Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1207400
  • 博文数量: 350
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 5668
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-23 17:53
文章分类

全部博文(350)

文章存档

2013年(350)

分类: Oracle

2013-04-27 09:57:14

从原理上来说,RAC数据库中初始化参数的修改,与单实例初始化参数的修改是一样的,不过,实际操作中这两者也会存在差异:对于那些各节点需要独立设置的参数,在修改时必须指定实例名。也就是说,在修改RAC数据库的初始化参数时,如果指定了实例名,那么仅修改指定的实例的对应初始化参数,否则的话,该RAC环境下所有节点均会被修改(默认值是*,即修改所有实例)。

  由于ORACLE数据库支持的初始化参数非常多(当然啦通常并不是每一项都需要修改),其中对于某些初始化参数,各节点必须拥有相同的值,而还有些初始化参数,不同节点可以拥有(甚至必须拥有)不同的值。下面按类别进行介绍。

1、必须拥有相同设置的初始化参数

  下列参数在数据库创建时,一旦确定,所有节点就必须拥有相同的参数值,包括:

  • ACTIVE_INSTANCE_COUNT
  • ARCHIVE_LAG_TARGET
  • CLUSTER_DATABASE
  • CLUSTER_DATABASE_INSTANCES
  • COMPATIBLE
  • CONTROL_FILES
  • DB_BLOCK_SIZE
  • DB_DOMAIN
  • DB_FILES
  • DB_NAME
  • DB_RECOVERY_FILE_DEST
  • DB_RECOVERY_FILE_DEST_SIZE
  • DB_UNIQUE_NAME
  • INSTANCE_TYPE (RDBMS or ASM)
  • PARALLEL_MAX_SERVERS
  • REMOTE_LOGIN_PASSWORD_FILE
  • UNDO_MANAGEMENT

  上述参数所代表的意义就不说了,知道的俺不想说,不知道的俺说不上来。

2、必须拥有独立设置的初始化参数

  • INSTANCE_NUMBER :该参数是RAC环境中的专用参数之一, RAC 使用 该 参数来区分不同的实例 。
  • THREAD :该参数也是RAC环境下适用的专用参数括弧之一,用来指定当前实例的REDOLOG线程号;
  • UNDO_TABLESPACE :如果使用AUM--Automatic Undo Management(现在还有谁在用手动回滚段吗),那么UNDO_TABLESPACE参数就是用来指定自动管理的UNDO表空间。对于RAC环境数据库,需要注意的时,每个实例使用不同的UNDO表空间,因此UNDO_TABLESPACE初始化参数,对于各个实例也会拥有各种独立的参数值。

3、可以拥有不同设置的初始化参数

  ORACLE 建议设置下列 初始化 参数中的参数值为相同值,不过如果条件需 要 ,也可以为其指定不同的参数值:

  • ARCHIVE_LAG_TARGET

  • 关于这个参数可以多说两句,ORACLE中基于重做日志实现的特性(比如Dataguard以及Streams),通常需要考虑到重做日志在切换时由于实际原因,归档重做日志文件到目标端可能会耗费一些时间。本参数就是用来设置,是否允许延迟归档到目标端服务器的时间。该值是一个时间类型,单位为秒,如果指定的话,值的范围在60-7200之间。对于RAC环境,由于每个节点分别生成不同的重做日志,因此也可以根据需要随意与归档相关的参数,除本参数外,还有LOG_ARCHIVE_FORMAT、LOG_ARCHIVE_DEST_n等。
  • LICENSE_MAX_USERS
  • SPFILE
  • UNDO_RETENTION

4、如何修改RAC初始化参数

  对于标准需求,在RAC环境和单实例环境并没有什么不同,例如,修改初始化参数log_archive_dest2的参数值,操作如下:

  首先分别检查两个节点中,当前参数设置:

    JSSDBN1> show parameter log_archive_dest_2;

    NAME                                 TYPE        VALUE

    ------------------------------------ ----------- ------------------------------

    log_archive_dest_2                   string

    JSSDBN2> show parameter log_archive_dest_2;

    NAME                                 TYPE        VALUE

    ------------------------------------ ----------- ------------------------------

    log_archive_dest_2                   string

  仍然是通过alter system语句执行修改,操作如下:

    JSSDBN1> alter system set log_archive_dest_2='location=/data/oradata/jssdb';

    System altered.

  提示成功,分别查看两节点的参数值:

    JSSDBN1> show parameter log_archive_dest_2;

    NAME                                 TYPE        VALUE

    ------------------------------------ ----------- ------------------------------

    log_archive_dest_2                   string      location=/data/oradata/jssdb

    JSSDBN2> show parameter log_archive_dest_2;

    NAME                                 TYPE        VALUE

    ------------------------------------ ----------- ------------------------------

    log_archive_dest_2                   string      location=/data/oradata/jssdb

  看起来没有什么不同对吧。这里需要注意一点,如果更新的参数与路径有关系,那么必须确认该路径在每个节点中均确实存在,不然就有可能导致更新报错,或者是以后实际操作用到该参数时出错。这里仍以log_archive_dest_2参数为例,假如在节点1上执行更新归档路径如下(节点2中并不存在/data/oradata/jssdb1目录):

    JSSDBN1> alter system set log_archive_dest_2='location=/data/oradata/jssdb1/archive';

    alter system set log_archive_dest_2='location=/data/oradata/jssdb1/archive'

    *

    ERROR at line 1:

    ORA-32008: error while processing parameter update at instance jssdbn2

    ORA-02097: parameter cannot be modified because specified value is invalid

    ORA-16032: parameter LOG_ARCHIVE_DEST_2 destination string cannot be translated

    ORA-07286: sksagdi: cannot obtain device information.

    Linux-x86_64 Error: 2: No such file or direc

  ORACLE 的提示也很明确了, ORA-32008 说节点2更新处理更新时出错,因为 ORA-02097 指定的参数值无效,根本原来就在于 Linux-x86_64 Error: 2: No such file or direc tory 。

  那么你可能就会有问题了:我的实际环境中,两节点的路径确实不同(不像本例中仅只是缺少目录,正如前面讲的,有些参数各节点必须拥有不同值),那又该如何处理呢?太简单了,分别设置不同节点的参数值就是了。

  对于RAC环境中的初始化参数修改,我们可以通过执行alter system语句时,附加sid参数,来指定要更新的实例,这样就可以为不同实例指定不同的参数值了(只要更新的参数确实支持设置不同的值)。

  首先修改节点1中的log_archive_dest_2参数,操作如下:

    JSSDBN1> alter system set log_archive_dest_2='location=/data/oradata/jssdbn1' sid='jssdbn1';

    System altered.

    JSSDBN1> show parameter log_archive_dest_2;

    NAME                                 TYPE        VALUE

    ------------------------------------ ----------- ------------------------------

    log_archive_dest_2                   string      location=/data/oradata/jssdbn1

  节点1的参数已经修改,下面查看一下节点2:

    JSSDBN2> show parameter log_archive_dest_2;

    NAME                                 TYPE        VALUE

    ------------------------------------ ----------- ------------------------------

    log_archive_dest_2                   string      location=/data/oradata/jssdb

  仍为旧值,接下来再用相同的方式修改节点2的设置即可:

    JSSDBN2> alter system set log_archive_dest_2='location=/data/oradata/jssdbn2' sid='jssdbn2';

    System altered.

    JSSDBN2> show parameter log_archive_dest_2;

    NAME                                 TYPE        VALUE

    ------------------------------------ ----------- ------------------------------

    log_archive_dest_2                   string      location=/data/oradata/jssdbn2

  竣工。


阅读(2259) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~