环境说明:
DB:Oracle 11.2.0.4.0 RAC
OS:AIX 7.1
背景说明:
在一次Oracle数据库迁移的项目中,由于数据量较大(3T),停机窗口又非常短(不超过20分钟),计划采用ADG方式进行数据库迁移。
在做迁移准备工作时,需要先搭建DG备库,配置DG同步关系。
由于在正式迁移当天,需要进行主备库角色切换,这需要提前在主、备上库分别配置DG主库和备库相关的参数。
然而,DG参数中有几个是静态参数,只有重启实例才能生效,例如db_file_name_convert。
故障起因:
在DG迁移前,担心在迁移当天漏掉DG相关参数,导致DG异常,于是在主库提前配置了DG相关参数,其中静态参数需要在后期重启实例才能生效,当前不生效。
SQL> alter system set db_file_name_convert='chen','cjc' scope=spfile sid='*';
然而在主库配置db_file_name_convert参数不久,主库RAC其中一个节点主机,由于AIX一个模块故障,发生了主机重启,在主机启动后,实例确没有自动拉起来。
问题现象:
尝试手动启动节点1实例,报错ORA-01677
SQL> startup
ORACLE instance started.
Total System Global Area 3724607488 bytes
Fixed Size 2258760 bytes
Variable Size 1191184568 bytes
Database Buffers 2516582400 bytes
Redo Buffers 14581760 bytes
ORA-01105: mount is incompatible with mounts by other instances
ORA-01677: standby file name convert parameters differ from other instance
问题原因:
显然是因为RAC两个节点的db_file_name_convert参数不一致导致节点1实例无法启动。
该参数在RAC节点1上已经生效,节点2因为没有重启实例,所以没有生效,导致参数在两个节点不一致。
问题影响:
由于数据库参数不一致,导致数据库恢复时间延长了,有时候这对于核心数据库来讲是致命的,好在本次案例处理非常及时,没有造成额外的影响。
解决方案:
由于节点2的db_file_name_convert参数还没有生效,直接去掉这个参数即可,在节点1或节点2执行如下语句:
SQL> alter system reset db_file_name_convert scope=spfile;
重启节点1数据库实例。
SQL> shutdown immediate
ORA-01507: database not mounted
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 3724607488 bytes
Fixed Size 2258760 bytes
Variable Size 1191184568 bytes
Database Buffers 2516582400 bytes
Redo Buffers 14581760 bytes
Database mounted.
Database opened.
此时节点1实例已经恢复。
查看节点1,2当前实例db_file_name_convert参数值。
SQL> show parameter db_file_name_convert
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert string
查看节点1,2当前实例在spfile中记录的db_file_name_convert参数值。
SQL> show spparameter db_file_name_convert
SID NAME TYPE VALUE
-------- ----------------------------- ----------- ----------------------------
* db_file_name_convert string chen
* db_file_name_convert string cjc
故障思考:
(1)有很多在单实例运维时的常规操作,在RAC运维时需要格外注意,比如本次案例所讲的参数不一致的问题。
又比如在简单不过的表空间扩容操作,在单实例下几乎不会出现问题,在RAC和RAC+DG环境下需要考虑更多的因素,稍有不注意可能会付出惨痛的代价。
(2)很多重要数据库的变更操作,最好先在测试环境进行充分测试,例如在修改参数时,需要确定该参数是否可以单节点生效,还是必须所有节点同时生效。
除了db_file_name_convert参数以外,还有很多参数需要两个节点完全一致,部分参数如下:
Initialization Parameter Use in Oracle RAC.
Parameters That Must Have Identical Settings on All Instances
COMPATIBLE
CLUSTER_DATABASE
CLUSTER_DATABASE_INSTANCES
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_EXECUTION_MESSAGE_SIZE
REMOTE_LOGIN_PASSWORDFILE
UNDO_MANAGEMENT
故障模拟重现过程:
感兴趣的朋友可以在RAC环境下做实验,过程非常好模拟,只需要配置一个db_file_name_convert参数,并只重启其中一个实例,就可以问题重现。
节点1
SQL> show parameter db_file_name_convert
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert string
SQL> alter system set db_file_name_convert='chen','cjc' scope=spfile;
System altered.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 3724607488 bytes
Fixed Size 2258760 bytes
Variable Size 1191184568 bytes
Database Buffers 2516582400 bytes
Redo Buffers 14581760 bytes
ORA-01105: mount is incompatible with mounts by other instances
ORA-01677: standby file name convert parameters differ from other instance
节点1,2
SQL> show parameter db_file_name_convert
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert string chen, cjc
SQL> show spparameter db_file_name_convert
SID NAME TYPE VALUE
-------- ----------------------------- ----------- ----------------------------
* db_file_name_convert string chen
* db_file_name_convert string cjc
重置
SQL> alter system reset db_file_name_convert scope=spfile;
System altered.
SQL> show parameter db_file_name_convert
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert string chen, cjc
SQL> show spparameter db_file_name_convert
SID NAME TYPE VALUE
-------- ----------------------------- ----------- ----------------------------
* db_file_name_convert string
再次重启即可
SQL> shutdown immediate
ORA-01507: database not mounted
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 3724607488 bytes
Fixed Size 2258760 bytes
Variable Size 1191184568 bytes
Database Buffers 2516582400 bytes
Redo Buffers 14581760 bytes
Database mounted.
Database opened.
SQL> show parameter db_file_name_convert
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert string
SQL> show spparameter db_file_name_convert
SID NAME TYPE VALUE
-------- ----------------------------- ----------- ----------------------------
* db_file_name_convert string
欢迎关注我的公众号《IT小Chen》