SUSPEND导致RAC环境的ORA-29702错误(二)

在测试RAC环境的SUSPEND命令时,出现了这个错误。

这一篇继续这个问题,找到导致问题的原因。

SUSPEND导致RAC环境的ORA-29702错误(一):http://yangtingkun.itpub.net/post/468/483337

 

 

简单描述一下碰到的问题。测试SUSPEND对于RAC环境的影响时,选择了3节点的RAC环境,保持两个实例打开一个实例关闭的状态,在一个实例上执行SUSPEND命令,这里会发现启动的两个实例都处于SUSPEND状态,随后启动另一个实例,发现这个实例在MOUNT节点会被挂起,不过这个实例的状态是正常的。

随后奇怪的事情发生了,当在任一个实例上执行RESUME命令后,Oracle会自动SHUTDOWN ABORT,并RESTART开始处于启动状态的两个实例中的一个实例,在这个实例对应的alert文件中,可以看到ORA-29702错误。

这个现象描述清楚了,不过不能确定的是,到底是SUSPEND操作对RAC环境的影响,还是由于在SUSPEND状态中,尝试启动了新的实例,导致了这个问题的产生,下面就来测试这个问题。

在节点1上执行下面的操作:

SQL> conn / as sysdba
已连接。
SQL> select instance_name, status, database_status from gv$instance;

INSTANCE_NAME    STATUS       DATABASE_STATUS
---------------- ------------ -----------------
testrac1         OPEN         ACTIVE
testrac3         OPEN         ACTIVE
testrac2         OPEN         ACTIVE

SQL>
SQL> alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';

会话已更改。

SQL> select instance_name, status, database_status, startup_time from gv$instance;

INSTANCE_NAME    STATUS       DATABASE_STATUS   STARTUP_TIME
---------------- ------------ ----------------- -------------------
testrac1         OPEN         ACTIVE            2009-02-21 18:37:30
testrac3         OPEN         ACTIVE            2009-04-23 10:42:55
testrac2         OPEN         ACTIVE            2009-02-21 01:17:58

SQL> alter system suspend;

系统已更改。

SQL> select instance_name, status, database_status, startup_time from gv$instance;

INSTANCE_NAME    STATUS       DATABASE_STATUS   STARTUP_TIME
---------------- ------------ ----------------- -------------------
testrac1         OPEN         SUSPENDED         2009-02-21 18:37:30
testrac3         OPEN         SUSPENDED         2009-04-23 10:42:55
testrac2         OPEN         SUSPENDED         2009-02-21 01:17:58

可以看到3个节点都处于启动状态,随后执行的SUSPEND命令使得3个节点都会进行到SUSPEND状态。随后在其他节点上执行RESUME命令:

SQL> alter system resume;

系统已更改。

回到实例1检查各个实例是否发生过重启的现象:

SQL> select instance_name, status, database_status, startup_time from gv$instance;

INSTANCE_NAME    STATUS       DATABASE_STATUS   STARTUP_TIME
---------------- ------------ ----------------- -------------------
testrac1         OPEN         ACTIVE            2009-02-21 18:37:30
testrac3         OPEN         ACTIVE            2009-04-23 10:42:55
testrac2         OPEN         ACTIVE            2009-02-21 01:17:58

显然,没有SHUTDOWN ABORT,没有重启,也没有ORA-29702错误。所有的实例状态都变为正常的ACTIVE。看来对于RAC环境设置SUSPEND是没有问题的,关键还在于在SUSPEND状态下尝试启动新的实例。

下面来验证一下:

bash-2.03$ srvctl stop inst -d testrac -i "testrac2,testrac3"
bash-2.03$ srvctl status db -d testrac
Instance testrac1 is running on node racnode1
Instance testrac2 is not running on node racnode2
Instance testrac3 is not running on node racnode3
bash-2.03$ sqlplus "/ as sysdba"

SQL*Plus: Release 10.2.0.3.0 - Production on 星期六 2 21 23:04:48 2009

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.


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

SQL> alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';

会话已更改。

SQL> select instance_name, status, startup_time from v$instance;

INSTANCE_NAME    STATUS       STARTUP_TIME
---------------- ------------ -------------------
testrac1         OPEN         2009-02-21 18:37:30

SQL> select instance_name, status, database_status from gv$instance;

INSTANCE_NAME    STATUS       DATABASE_STATUS
---------------- ------------ -----------------
testrac1         OPEN         ACTIVE

SQL> alter system suspend;

系统已更改。

将实例2和实例3全部关闭,然后将当前实例置于SUSPEND状态,下面启动实例2和实例3

bash-2.03$ sqlplus "/ as sysdba"

SQL*Plus: Release 10.2.0.3.0 - Production on 星期六 2 21 23:06:44 2009

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.

已连接到空闲例程。

SQL> startup
ORACLE
例程已经启动。

Total System Global Area 2147483648 bytes
Fixed Size                  2031480 bytes
Variable Size             436207752 bytes
Database Buffers         1694498816 bytes
Redo Buffers               14745600 bytes

实例2运行到MOUNT节点被阻塞,而实例3也一样:

bash-3.00$ sqlplus "/ as sysdba"

SQL*Plus: Release 10.2.0.3.0 - Production on 星期四 4 23 15:15:57 2009

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.

已连接到空闲例程。

SQL> startup
ORACLE
例程已经启动。

Total System Global Area 2147483648 bytes
Fixed Size                  2031480 bytes
Variable Size             352321672 bytes
Database Buffers         1778384896 bytes
Redo Buffers               14745600 bytes

下面在实例1执行RESUME命令:

SQL> alter system resume;

系统已更改。

SQL> select instance_name, status, database_status from gv$instance;

但是随后查询全体实例的语句出现了等待,这时实例2和实例3的启动完成:

数据库装载完毕。
数据库已经打开。
SQL> select instance_name, status, database_status from gv$instance;

INSTANCE_NAME    STATUS       DATABASE_STATUS
---------------- ------------ -----------------
testrac2         OPEN         ACTIVE
testrac3         OPEN         ACTIVE

由于实例2和实例3的结果完全一样,这里只贴出一个。实例2打开后,执行查询GV$INSTANCE的操作也出现了等待,大于半分钟左右,就会出现上面的最终结果,不过这个结果中看不到实例1的信息。

与此同时实例1等待的查询也有了结果,和实例2不同的是,查询报错了:

select instance_name, status, database_status from gv$instance
*
1 行出现错误:
ORA-03113:
通信通道的文件结束


SQL> conn / as sysdba
已连接。
SQL> alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';

会话已更改。

SQL> select instance_name, status, startup_time from v$instance;

INSTANCE_NAME    STATUS       STARTUP_TIME
---------------- ------------ -------------------
testrac1         OPEN         2009-02-21 23:09:49

SQL> select instance_name, status, database_status from gv$instance;

INSTANCE_NAME    STATUS       DATABASE_STATUS
---------------- ------------ -----------------
testrac1         OPEN         ACTIVE
testrac3         OPEN         ACTIVE
testrac2         OPEN         ACTIVE

重新连接后,发现实例1出现了重启。现在可以确定,就是由于在SUSPEND状态下,尝试启动新的实例,导致RAC运行的实例无法确定一致性,从而使得实例发生了重启。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-591871/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/4227/viewspace-591871/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值