标签:
本例以旧LIMS系统为例,说明FAILOVER的测试与配置及应用。
先在LIMS应用服务器上,通过SQLPLUS登录到数据库
如上,当前连接实例为lims1
然后关闭实例lims1
srvctl status database –d lims确认实例lims1已经关了
再回到应用服务器,用show parameter instance_name显示当前连接实例
提示ORA-03113错误,不能FAILOVER到正常实例。
虽然集群模式,但LIMS系统无法正常进行故障切换。
分析:
从TNS文件可以看出,旧系统试图通过客户端FAILOVER方式来切换到正常实例,TNS文件内容如下:
CTI_RAC =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.1.83)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.1.84)(PORT = 1521))
(LOAD_BALANCE = yes)
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = lims)
)
)
TNS文件虽然添加了两VIP地址,但并没有为其分配FAILOVER_MODE,修改TNS文件内容如下:
CTI_RAC =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.1.83)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.1.84)(PORT = 1521))
(LOAD_BALANCE = yes)
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = lims)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 180)
(DELAY = 5)
)
)
)
再次测试
发现,当前连接的实例是lims2
关闭实例lims2
回到应用服务器,查看切换是否成功
成功切换到实例lims1
上面是客户端的FAILOVER,客户端能实现FAILOVER,但配置与管理相对麻烦,需要为每个客户端调整TNS参数。
下面是服务端的FAILOVER
select * from dba_services;
注意:SYS$开头的两个服务不去动它,这里选用lims服务。当然,你也可以创建其他服务
使用dbms_service包修改服务lims
lims服务支持FAILOVER
回到应用服务器,再次测试
TNS文件里面添加下面内容:
RAC =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.1.80)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = lims)
)
)
10.10.1.80为Scan IP,服务名仍为lims
连接实例为lims2
关闭该实例
回到应用服务器,再次测试
FAILED_OVER为YES,说明该会话是FAILOVER而来。
说明:
FAILOVER在单实例环境照样适应,如下
单实例环境,实例名为orcl
测试如下:
当前会话ID为12
测试从t1表中获取数据
当执行数据查询后,切换到另一会话,重启数据库
发现在重启数据库过程中,会话12获取数据会有停顿等待
如上图,截取到的等待界面
当数据库重新启动后,PLSQL继续并输出后续数据。
上面就是单实例下的FAILOVER。
应用中测试如下 ,在加载数据过程中模拟数据库重启
打开交互界面
点击“button1”打开数据库连接
在弹出“startup force”时,我们重启数据库
如上,数据库重启完毕后,再回到交互界面,点击“确定”继续加载数据
应用并没有因为数据库的重启而中断,而是完成了对数据的加载,FAILOVER成功切换。
标签:
原文地址:http://www.cnblogs.com/wangcm/p/5923703.html