转-改变RAC参数可能引发的参数不一致的问题


分类: Linux

这个问题其实已经在文章《CLUSTER_DATABASE_INSTANCES参数》中提到过,但是当时并没有太在意。以至于在随后两天的测试中,连续两次由于这个问题导致了RAC实例无法启动,因此还是有必要单独描述一下这个问题。

CLUSTER_DATABASE_INSTANCES参数:http://yangtingkun.itpub.net/post/468/482960

 

 

对于RAC数据库而言,初始化参数可以多个实例共用,也可以设置各自实例的初始化参数。

用来标识实例本身的初始化参数就不用说了,每个实例必须单独设置。剩下的参数都是可以共用,也可以每个实例单独设置。在实例上设置的参数会覆盖数据库级的参数设置。

虽然没有什么参数是必须多个实例共用,但是有些参数要求各个实例的配置必须一致,否则会导致实例无法启动。

一个例子就是上面的提到的CLUSTER_DATABASE_INSTANCES:

SQL> show parameter cluster_database_instances

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
cluster_database_instances           integer     2
SQL> select instance_name from gv$instance;

INSTANCE_NAME
----------------
test1
test2

SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
test1

在这个RAC环境中,有两个实例,CLUSTER_DATABASE_INSTANCES的配置也是2。

对于CLUSTER_DATABASE_INSTANCES这种不能直接修改,只有重启数据库实例才能生效的参数,如果修改SPFILE后需要注意:

SQL> alter system set cluster_database_instances = 3;   
alter system set cluster_database_instances = 3
                 *
第 1 行出现错误:
ORA-02095: 无法修改指定的初始化参数


SQL> alter system set cluster_database_instances = 3 scope = spfile;

系统已更改。

修改参数很容易,但是留下一个隐患,下次重启数据库的时候两个实例必须全部重启,否则就会导致错误:

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORA-29707: inconsistent value 3 for initialization parameter cluster_database_instances with other instances

如果要重启其中某个实例,关闭并启动时会报错。

问题很简单,由于CLUSTER_DATABASE_INSTANCES参数的修改不影响正在运行的实例,因此另一个运行的实例的参数设置为2,而现在要以参数值3启动当前实例,所以导致错误的产生。

解决方法有很多种,比如关闭另外的实例,然后重启整个数据库,或者修改SPFILE,将参数改变回原值,或者通过pfile的方式为实例指定一个临时的值。无论何种方法要最终解决这个问题还需要所有实例同时重启。

SQL> exit
从 Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options 断开
bash-3.00$ srvctl stop db -d test 
bash-3.00$ srvctl start db -d test
bash-3.00$ sqlplus "/ as sysdba"

SQL*Plus: Release 11.1.0.6.0 - Production on 星期五 4月 24 16:16:16 2009

Copyright (c) 1982, 2007, Oracle.  All rights reserved.


连接到:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options

SQL> show parameter cluster_database_instances

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
cluster_database_instances           integer     3

还有一种参数也要求多个实例的设置必须相同,且这种参数是可以动态修改的:

SQL> show parameter log_archive_config

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_config                   string      DG_CONFIG=(test,teststby)
SQL> alter system set log_archive_config = '';

系统已更改。

SQL> show parameter log_archive_config

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_config                   string

由于这个参数的修改不需要重启,所以修改很轻松,即修改了当前实例,也修改了SPFILE,使得数据库所有的实例重启都使用新设置的值。似乎没有什么问题,然后这个操作已经埋下了问题。

如果当前的实例需要重启,则会碰到错误:

SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
test1

SQL> select instance_name from gv$instance;

INSTANCE_NAME
----------------
test1
test2

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area  776896512 bytes
Fixed Size                  2098776 bytes
Variable Size             220912040 bytes
Database Buffers          549453824 bytes
Redo Buffers                4431872 bytes
数据库装载完毕。
ORA-03113: 通信通道的文件结束
进程 ID: 24455
会话 ID: 58 序列号: 6

重启居然碰到了ORA-3113错误,检查alert文件可以发现,问题就是LOG_ARCHIVE_CONFIG参数在两个实例上配置不同造成的:

Fri Apr 24 16:31:47 2009
ALTER DATABASE   MOUNT
NOTE:Loaded library: System
SUCCESS: diskgroup DATA was mounted
Errors in file /data/oracle/diag/rdbms/test/test1/trace/test1_ping_24656.trc:
Setting recovery target incarnation to 1
Successful mount of redo thread 1, with mount id 1983157714
Database mounted in Shared Mode (CLUSTER_DATABASE=TRUE)
Lost write protection disabled
Completed: ALTER DATABASE   MOUNT
Fri Apr 24 16:31:54 2009
ALTER DATABASE OPEN
Picked broadcast on commit scheme to generate SCNs
WARNING: The 'LOG_ARCHIVE_CONFIG' init.ora parameter settings
are inconsistent with another started instance.  This may be
caused by the 'DB_UNIQUE_NAME' init.ora parameter being specified
differently on one or more of the other RAC instances; the
DB_UNIQUE_NAME parameter value MUST be identical for all
instances of the database.
Errors in file /data/oracle/diag/rdbms/test/test1/trace/test1_lgwr_24686.trc:
ORA-16188: LOG_ARCHIVE_CONFIG settings inconsistent with previously started instance
Errors in file /data/oracle/diag/rdbms/test/test1/trace/test1_lgwr_24686.trc:
ORA-16188: LOG_ARCHIVE_CONFIG settings inconsistent with previously started instance
LGWR (ospid: 24686): terminating the instance due to error 16188
Fri Apr 24 16:31:54 2009
ORA-1092 : opitsk aborting process
Fri Apr 24 16:31:54 2009
System state dump is made for local instance
System State dumped to trace file /data/oracle/diag/rdbms/test/test1/trace/test1_diag_24652.trc
Trace dumping is performing id=[cdmp_20090424163154]
Fri Apr 24 16:31:56 2009
Instance terminated by LGWR, pid = 24686

即使修改另外实例上的LOG_ARCHIVE_CONFIG参数,也无法解决这个问题:

SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
test2

SQL> alter system set log_archive_config = '' scope = memory;

系统已更改。

重启实例1仍然是ORA-3113错误,只能重启整个数据库:

SQL> conn / as sysdba
已连接到空闲例程。
SQL> startup      
ORACLE 例程已经启动。

Total System Global Area  776896512 bytes
Fixed Size                  2098776 bytes
Variable Size             220912040 bytes
Database Buffers          549453824 bytes
Redo Buffers                4431872 bytes
数据库装载完毕。
ORA-03113: 通信通道的文件结束
进程 ID: 29431
会话 ID: 145 序列号: 1


SQL> exit
从 Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options 断开
bash-3.00$ srvctl stop db -d test
PRKP-1002 : Error stopping instance test1 on node ser1
CRS-0233: ??????????????????????????????????????
bash-3.00$ srvctl start db -d test
bash-3.00$ sqlplus "/ as sysdba"

SQL*Plus: Release 11.1.0.6.0 - Production on 星期五 4月 24 16:43:56 2009

Copyright (c) 1982, 2007, Oracle.  All rights reserved.


连接到:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options

SQL> show parameter log_archive_config

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_config                   string
SQL> select instance_name from gv$instance;

INSTANCE_NAME
----------------
test1
test2

需要注意LOG_ARCHIVE_CONFIG参数只是在清除参数设置的时候才会有问题,如果是设置不同的值并不会导致上面的错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值