启动数据库实例,报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

 

posted @ 2025-07-22 10:46  石云华  阅读(17)  评论(0)    收藏  举报