Data Guard 环境中客户端的自动切换

使用Data Guard架构时,当角色发生转换switchover,也就是主库成备库处于mount状态,备库成新主库open状态,这时客户端再连接时就会收到ORA-0133:ORACLE initialization or shutdown in progress错误,而不会选择下一个可用的地址,因为原来的主库处于mout状态,监听是可用的。

在switchover发生后,尽量不修改应用和数据库的配置所耽误的时间,则需要提前对应用和数据库做出一个合理的配置方案,使用应用能够自动重连新的主库,对于failover的情况,原主库得到修复后,起到mount状态应用间隔的日志时也是这样的状况。



一种方式是通过设置客户端和TNS和数据库service_names来访问

针对物理主库操作

步骤如下:

1.客户端的tnsnames.ora

test =  
	 (DESCRIPTION =  
	     (ADDRESS_LIST =  
	     (ADDRESS = (PROTOCOL = TCP)(HOST = HostA)(PORT = 1521))  
	     (ADDRESS = (PROTOCOL = TCP)(HOST = HostB)(PORT = 1521))  
	     )  
	     (CONNECT_DATA =  
	     (SERVICE_NAME = test)  
	     )  
	    )  

2.设置连接超时

在客户端sqlnet.ora文件中添加以下内容:
SQLNET.OUTBOUND_CONNECT_TIMEOUT=3

3.在primary数据库运行

begin  
     dbms_service.create_service('test','test');  
end;  
/

begin  
     DBMS_SERVICE.START_SERVICE('test');  
end;  
/  
停止为:
begin  
     DBMS_SERVICE.STOP_SERVICE('test');  
end;  
/
删除为:
begin 
     DBMS_SERVICE.DELETE_SERVICE('test');  
end;  
/

4.在primary数据库创建触发器:

create trigger test_trig after startup on database 
declare 
dg_role varchar(30);
begin
    select database_role into dg_role from v$database; 
    if dg_role='PRIMARY' then
       DBMS_SERVICE.START_SERVICE('test');
    end if;
end;
/

对于逻辑备库,则应使用DB_ROLE_CHANGE系统事件创建触发器。


另外使用OCI驱动的程序,则需要配置serviceTAF就可以实现客户端透明切换;使用JDBC thin方式的应用,则应该在应用程序写入这样的重连机制,例如weblogic连接池重连机制。

这个方案就是将两边的数据库的service name都设置成test,应用使用test这个服务名连接数据库。当发生角色转换时,由触发器在数据库角色下,startup的时候修改动态service_names参数并重新注册

5.在primary库上设置service的TAF功能

begin
dbms_service.modify_service
('test',
FAILOVER_METHOD=>'BASIC',
FAILOVER_TYPE=>'SELECT',
FAILOVER_RETRIES=>15,
FAILOVER_DELAY=>5);
end;
/



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值