启动数据库实例,报ORA-01606 parameter not identical to that of another mounted instance错误
案例概述
对客户的一台Exadata X8M-2进行image升级。升级计算节点时,从日志提示可以看出image升级成功,但启动数据库实例出错。检查数据库的alert日志,可以看到如下报错信息。
ORA-1105 signalled during: ALTER DATABASE MOUNT...
1、故障处理过程
1.1尝试手动启动数据库实例。
|
SQL> startup ORACLE instance started. …… ORA-01105: mount is incompatible with mounts by other instances ORA-01606: parameter not identical to that of another mounted instance
SQL> |
从报错的日志可以看出,大概的原因是当前正在启动的实例参数与另外一个已经open的实例参数不一致。但具体是哪个参数设置不对,导致实例无法启动呢?错误日志中没有提及。
1.2 如何找出哪个参数的参数值在各个实例中不一致,而导致实例无法启动?
方法一:
可以直接查询x$ksppi和x$ksppcv字典表,然后对输出结果进行对比。
|
set linesize 200 set pagesize 20000 col ksppinm for a50 col ksppstvl for a60 select ksppinm, ksppstvl from x$ksppi x, x$ksppcv y where x.indx = y.indx order by 1; |
在报错的节点上和当前已经存活的节点上分别执行以上语句,用diff命令对比输出结果,可以找出参数值不同的参数。
这种方式相对而言比较麻烦,下面介绍一种更加简单的方法。
方法二:
直接查看报错节点的alert日志。alert日志中会记录non-default的参数和参数值。例如本示例。
|
System parameters with non-default values: processes = 500 sessions = 772 spfile = "+DG_DATA/racdb/spfileracdb.ora" sga_target = 2928M control_files = "+DG_DATA/racdb/controlfile/control01.ctl" db_block_size = 8192 db_cache_size = 1G compatible = "11.2.0.4.0" log_archive_dest_1 = "LOCATION=+DG_DATA/archivelog" cluster_database = TRUE db_create_file_dest = "+DG_DATA" _gc_policy_time = 0 thread = 1 undo_tablespace = "UNDOTBS1" instance_number = 1 remote_login_passwordfile= "EXCLUSIVE" db_domain = "" remote_listener = "rac11g-scan:1521" audit_file_dest = "/u01/app/oracle/admin/racdb/adump" audit_trail = "DB" db_name = "racdb" open_cursors = 300 pga_aggregate_target = 972M diagnostic_dest = "/u01/app/oracle" |
这个示例中,重点关注那些参数值在所有实例中必须完全一致的参数,例如:_gc_policy_time。当前无法启动的实例,_gc_policy_time参数值为0。
检查当前存活节点的实例,发现_gc_policy_time参数值为10。
1.3 至此,我们已经弄清实例无法启动的原因,这类gc开头的隐含参数是数据库级参数,也即所有的实例的参数值必须相同,否则无法启动。前期设置了_gc_policy_time了参数值,但未重启数据库,所以导致这次故障。
2、解决办法
重启整个数据库
srvctl stop database -d racdb
srvctl start database -d racdb
浙公网安备 33010602011771号