zoukankan      html  css  js  c++  java
  • [Oracle] 参数修改小结

    v$parameter


    Oracle参数的修改比较复杂,有些参数是可以在session级别修改,有些则必须在system级别修改,有些参数修改后马上生效(不需要重启),有些参数则必须重启才能生效,那么我们如何知道这些信息呢?可以查询动态视图v$parameter中的两列(如下所示)得知:

    1. ISSES_MODIFIABLE

    指示参数是否可以在session级别( Alter session set )修改(True or False)

    2. ISSYS_MODIFIABLE

    指示参数是否可以在system级别(Alter system set)修改,有如下3个取值:

    1)IMMEDIATE - 立即生效

    2)DEFERRED - 下个session生效

    3)False - 必须得重启才能生效(必须指定Scope=spfile)

    我们来看下面的例子:

    SYS@TEST16>select name,ISSES_MODIFIABLE,ISSYS_MODIFIABLE from v$parameter where name in ('workarea_size_policy','audit_file_dest','sga_target','sga_max_size');
    
    NAME                                                                             ISSES_MODIFIABL ISSYS_MODIFIABL
    -------------------------------------------------------------------------------- --------------- ---------------
    sga_max_size                                                                     FALSE           FALSE
    sga_target                                                                       FALSE           IMMEDIATE
    audit_file_dest                                                                  FALSE           DEFERRED
    workarea_size_policy                                                             TRUE            IMMEDIATE

    其中只有workarea_size_policy可以在session级别修改,其它3个都只能在system级别修改。

    sga_target修改后立即生效,audit_file_dest修改后下一个session生效,sga_max_size修改后必须重启才能生效(spfile)。


    ALTER SESSION/SYSTEM SET


    alter session set的语法如下:

    alter session set parameter_name = parameter_value;

    如上所述,并不是所有的参数都可以在session级别修改,只有isses_modifiable为true才可以。

    alter system set的语法如下:


    其中:

    Comment(可选):修改时可附加说明;

    Deferred(可选):如果v$parameter的issys_modifiable为deferred,修改时必须加上deferred选项,表示下个session才生效。

    Scope(默认:both):有如下3个取值:

          -- memory 表示只在内存中修改,实例重启后失效;

          -- spfile表示只在spfile中修改,只有当重启重新读取spfile之后才生效;

          -- both表示同时在memory和spfile中修改(推荐)

    Sid (默认:*):该选项针对RAC,默认为*,表示RAC的所有实例同时修改,如果不想全部修改,用Sid指定Oracle实例即可。


    一个例子


    今天,开发人员抱怨Oracle数据库时常连接不上,报如下错误:
    ORA-12519, TNS:no appropriate service handler found
    该错误是因为Oracle参数processes设置过小,需要调整它,processes当前的值为:
    SYS@TEST16>show parameter processes;
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    processes                            integer     100
    通过查询v$parameter(如下所示)可知,该参数是系统级别的,且必须重启才能生效:
    select name,ISSES_MODIFIABLE,ISSYS_MODIFIABLE from v$parameter where name='process';
    NAME                                                                             ISSES_MODIFIABL ISSYS_MODIFIABL
    -------------------------------------------------------------------------------- --------------- ---------------
    processes                                                                        FALSE           FALSE
    通过alter system set修改:
    SYS@TEST16>alter system set processes=1500 comment='change from 100 to 1500' scope=spfile;
    
    System altered.
    
    注意:这里一定要加上scope=spfile,否则会报如下错误,因为issys_modifiable=false
    ORA-02095: specified initialization parameter cannot be modified


  • 相关阅读:
    python mymsql sqlalchemy
    python中 wraps 的作用
    python Subprocess的使用
    实现一个命令分发器
    实现一个cache装饰器,实现过期可清除功能
    求2个字符串的最长公共子串
    Base64编码,解码的实现
    把一个字典扁平化
    hihocoder1415 重复旋律3
    hihocoder 1407 重复旋律2
  • 原文地址:https://www.cnblogs.com/riskyer/p/3241647.html
Copyright © 2011-2022 走看看