编辑手记:
一、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,或者扫描下面二维码,备注:云和恩墨大讲堂,即可入群。每周与千人共享免费技术分享,与讲师在线讨论。