Oracle 10g Dataguard Broker Failover切换与HA

主库上都创建一个名为'PROD_TAF'的服务:
exec dbms_service.create_service(service_name=>'PROD_TAF',network_name=>'PROD_TAF');

SQL> exec dbms_service.create_service(service_name=>'PROD_TAF',network_name=>'PROD_TAF');
PL/SQL procedure successfully completed.

主从库上都创建一个触发器,当数据库启动到primary状态,启动上述的服务:
CREATE OR REPLACE TRIGGER trg_taf_service
after startup on database
DECLARE
role VARCHAR(30);
BEGIN
SELECT DATABASE_ROLE INTO role FROM V$DATABASE;
IF role='PRIMARY' THEN
DBMS_SERVICE.START_SERVICE('PROD_TAF');
END IF;
END;
/

SQL> CREATE OR REPLACE TRIGGER trg_taf_service
2 after startup on database
3 DECLARE
4 role VARCHAR(30);
5 BEGIN
6 SELECT DATABASE_ROLE INTO role FROM V$DATABASE;
7 IF role='PRIMARY' THEN
8 DBMS_SERVICE.START_SERVICE('PROD_TAF');
9 END IF;
10 END;
11 /

Trigger created.

当该服务没有启动时,启动'PROD_TAF'服务:
exec dbms_service.start_service(service_name=>'PROD_TAF');


查看动'PROD_TAF'服务是否启动:
lsnrctl service|grep PROD_TAF

$ lsnrctl service|grep PROD_TAF
Service "PROD_TAF" has 1 instance(s).

客户端tnsnames配置:

PROD_TAF =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = xxxpri)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = xxxxstdby)(PORT = 1521))
(LOAD_BALANCE = off)
(FAILOVER = ON)
(CONNECT_DATA =
(SERVICE_NAME = PROD_TAF)
(failover_mode =
(type = select)
(method = basic)
(retries = 20)
(delay = 15)
)
)
)


这样无论切换到那一台机器上,对客户端都是透明的,客户端程序与配置不用做任何改动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值