0

Oracle RAC的动态failover与静态failover

杨廷琨 2017-03-12
161

编辑手记:


一、RAC环境下LOGICAL STANDBY数据库的FAILOVER切换

环境:

PRIMARY数据库和STANDBY数据库采用的都是RAC 11.1.0.6 for Solaris10 sparc,共享存储PRIMARY数据库采用VOLUMN CLUSTER MANAGER,而STANDBY数据库使用ASM。


1、FAILOVER切换用于主库不可用的情况。

这种情况相对比较简单,不需要太多的准备工作,不过为了模拟,首先将PRIMARY数据库关闭:



下面关闭实例2:


下面关闭LOGICAL STANDBY的第2实例:


检查实例1:

SQL> select instance_name, status from gv$instance;

INSTANCE_NAME    STATUS
---------------- ------------
rac11g1          OPEN


如果可以找到最新的归档日志,可以拷贝到本地数据库,并通过ALTER DATABASE REGISTER LOGICAL LOGFILE来注册。


、下面就将LOGICAL STANDBY数据库切换未主数据库了:


如果希望LOGICAL STANDBY应用完所有的日志在切换为主库,可以在ALTER DATABASE ACTIVATE语句最后添加FINISH APPLY语句。


下面数据库已经切换为主库,两个数据库直接已经没有联系了。


将两个数据库都启动,检查一下数据库的运行情况:


连接另外一个数据库:


至此,FAILOVER切换完成。


二、 静态FAILOVER 


静态FAILOVER就是连接时FAILOVER,也就是说当用户配置了多个IP地址后,当一个地址无法访问时,会自动通过其他的地址进行访问,而不会返回错误给用户。


测试环境为10.2.0.4 Rac for Solaris for sparc 64:


为了避免REMOTE_LISTENER的影响,先将参数置为空:

SQL> ALTER SYSTEM SET REMOTE_LISTENER = '' SCOPE = BOTH;

系统已更改。


检查节点1上配置:


节点2上的参数配置:


将数据库的TESTRAC1服务名配置为:

关闭实例1:

bash-2.03$ srvctl stop inst -d testrac -i testrac1


检查连接会话:


由于配置了静态FAILOVER,当连接实例1失败时,自动可以连接到实例2上,而且从V$SESSION的查询中可以看到,这里动态FAILOVER并没有生效,起作用的是静态FAILOVER特性。


如果将FAILOVER设置为OFF:

测试TESTRAC1服务名:

SQL> CONN YANGTK/YANGTK@TESTRAC1
ERROR:
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务

警告: 您不再连接到 ORACLE。


连接报错,说明再FAILOVER设置为OFF的情况下,连接不会尝试其他的地址。

如果将地址中IP的次序调换:

再次测试连接:

SQL> CONN YANGTK/YANGTK@TESTRAC1
已连接。
SQL> SELECT INSTANCE_NAME FROM V$INSTANCE;

INSTANCE_NAME
----------------
testrac2


可以看到,如果不指定FAILOVER为ON,则Oracle只会尝试地址列表中的第一个地址,而选择忽略其他的配置,如果设置FAILOVER为ON,则Oracle会尝试所有的地址。


需要注意一点,一旦添加了INSTANCE_NAME的设置,则FAILOVER的设置不再有效。


而如果配置服务名如下:

测试连接:

SQL> CONN YANGTK/YANGTK@TESTRAC1
ERROR:
ORA-12521: TNS: 监听程序当前无法识别连接描述符中请求的实例

警告: 您不再连接到 ORACLE。

加入"云和恩墨大讲堂"微信群,参与讨论学习

搜索 盖国强(Eygle) :eyygle,或者扫描下面二维码,备注:云和恩墨大讲堂,即可入群。每周与千人共享免费技术分享,与讲师在线讨论。


关注微信,获得后续精彩分享

「喜欢文章,快来给作者赞赏墨值吧」
文章转载自杨廷琨,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论