[zt] Oracle RAC的Failover设置与测试

 

       Oracle RAC环境下,在配置TAFTransparent Application Failover)之后,如果一个节点上的实例出现了故障,Oracle会自动将会话迁移到另一个实例上。


进行TAF配置,要在客户端的tnsname.ora中添加如下的关键参数:



       ( failover_mode = ( type = select ) ( method = basic ) )


       下面分别对是否在客户端配置TAF的情况进行测试:

 


一、不配置TAF的情况


1、客户端的tnsname.ora配置如下:



RACDB =


  (DESCRIPTION =


    (ADDRESS_LIST =


      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.171)(PORT = 1521))


    )


    (CONNECT_DATA =


      (SERVICE_NAME = racdb.chenxu.yo2.cn)


    )


  )


2、连接数据库,检查实例信息



SQL> conn sys/chenxu@racdb as sysdba


已连接。


SQL> show parameter instance_name


 


NAME                                 TYPE        VALUE


------------------------------------ ----------- ------------------------------


instance_name                        string      RACDB2


3、关闭实例RACDB2



[root@NODE01 bin]# ./srvctl status database -d racdb


Instance RACDB1 is running on node node01


Instance RACDB2 is running on node node02


[root@NODE01 bin]#


[root@NODE01 bin]# ./srvctl stop instance -d racdb -i racdb2


[root@NODE01 bin]#


[root@NODE01 bin]# ./srvctl status database -d racdb


Instance RACDB1 is running on node node01


Instance RACDB2 is not running on node node02


4、再次检查刚才连接的会话



SQL> select instance_name from v$instance;


select instance_name from v$instance


*


1 行出现错误:


ORA-03113: 通信通道的文件结束


 


SQL> select instance_name from v$instance;


ERROR:


ORA-03114: 未连接到 ORALCE


可以看到执行操作后,Oracle会报上面的错误。


 


二、配置TAF的情况


1、下面在客户端的tnsname.ora文件中配置TAF,内容如下:



RACDB =


  (DESCRIPTION =


    (ADDRESS_LIST =


      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.171)(PORT = 1521))


    )


    (CONNECT_DATA =


      (SERVICE_NAME = racdb.chenxu.yo2.cn)


      ( failover_mode = ( type = select ) ( method = basic ) )


    )


  )


2、重新开启实例



[root@NODE01 bin]# ./srvctl start instance -d racdb -i racdb2


[root@NODE01 bin]#


[root@NODE01 bin]# ./srvctl status database -d racdb


Instance RACDB1 is running on node node01


Instance RACDB2 is running on node node02


3、重新登陆,检查实例信息



SQL> conn sys/chenxu@racdb as sysdba


已连接。


SQL> select instance_name from v$instance;


 


INSTANCE_NAME


----------------


RACDB2


4、再次关闭实例RACDB2



[root@NODE01 bin]# ./srvctl stop instance -d racdb -i racdb2


[root@NODE01 bin]# ./srvctl status database -d racdb


Instance RACDB1 is running on node node01


Instance RACDB2 is not running on node node02


5、检查刚才的连接的会话



SQL> select instance_name from v$instance;


 


INSTANCE_NAME


----------------


RACDB1                  # 可以看到由原来的RACDB2变成RACDB1


可知,在没有运行事务的操作下,可以无缝地切换到另一个节点上。


 


三、配置TAF后,当运行事务时候,能否进行切换?


       在实际的使用环境中,有些正在进行的事务,如一个节点上正在执行的DML是无法采用以上的方法切换的。下面针对这种情况进行测试:


1、两个实例都开启后,客户端连接,并执行DML语句



SQL> conn sys/chenxu@racdb as sysdba


已连接。


SQL> select instance_name from v$instance;


 


INSTANCE_NAME


----------------


RACDB2


 


SQL> create table test as select * from dba_objects;


 


表已创建。


 


SQL> insert into test select * from dba_objects;     # 进行DML操作


 


已创建50393行。


2、关闭当前连接的实例RACDB2



[root@NODE01 bin]# ./srvctl stop instance -d racdb -i racdb2


[root@NODE01 bin]# ./srvctl status database -d racdb


Instance RACDB1 is running on node node01


Instance RACDB2 is not running on node node02


3、检查刚才的连接的会话



SQL> select instance_name from v$instance;


select instance_name from v$instance


*


1 行出现错误:


ORA-25402: 事务处理必须重新运行


 


SQL> select count(*) from test;


select count(*) from test


*


1 行出现错误:


ORA-25402: 事务处理必须重新运行


 


SQL> commit;


commit


*


1 行出现错误:


ORA-25402: 事务处理必须重新运行


 


SQL> rollback;


 


回退已完成。


 


SQL> select instance_name from v$instance;


 


INSTANCE_NAME


----------------


RACDB1                  # rollback之后,切换到实例RACDB1


 


SQL> select count(*) from test;


 


  COUNT(*)


----------


     50393                # 已经回滚到建表时候的那些数据


所以,该测试说明了Oracle不能切换正在执行DML语句的情况,因为未完成的事务可能需要回滚。也就是只要没有获得的事务存在,就可以动态的切换过去。

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

转载于:http://blog.itpub.net/35489/viewspace-600658/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值