说明 本文方法适用于使用不了命令“SRVCTL”创建service的情况: 1. 11gR2之前的数据库版本配置DG的自动化Client Failover的service 2. 任何仅安装在文件系统上的DG,数据库版本不限 配置步骤 1. 在主库上,创建两个service,一个连接到主库(primdb),另一个(stbydb)连接到备库:
SQL> exec dbms_service.create_service('primdb','primdb');
SQL> exec dbms_service.create_service('stbydg','stbydg');
2. 在主库上,启动刚创建的连接到主库所需的 service:
SQL> exec dbms_service.start_service('primdb');
3. 在主库上,创建触发器来自动化管理这些 services:
CREATE OR REPLACE TRIGGER AutoDGServices after startup on database
DECLARE
db_role VARCHAR(30);
db_open_mode VARCHAR(30);
BEGIN
SELECT DATABASE_ROLE, OPEN_MODE INTO db_role, db_open_mode FROM V$DATABASE;
IF db_role = 'PRIMARY' THEN
DBMS_SERVICE.START_SERVICE('primdb');
DBMS_SERVICE.STOP_SERVICE('stbydg');
END IF;
IF db_role = 'PHYSICAL STANDBY' AND db_open_mode LIKE 'READ ONLY%' THEN DBMS_SERVICE.START_SERVICE('stby_dg');
END IF;
END;
/
4. 重启备库使得刚才创建的触发器生效
SQL> shu immediate SQL> startup
5. 进行主备库切换测试,检查新的service能否自动在新主库上启动并在旧主库上停止 注:tnsnames.ora文件参考
PRIMDB = (DESCRIPTION = (ADDRESS_LIST = (FAILOVER = ON) (LOAD_BALANCE = OFF) (ADDRESS = (PROTOCOL = TCP)(HOST = Prim-DB)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = Stby-DG)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = primdb) ) ) STBYDG = (DESCRIPTION = (ADDRESS_LIST = (FAILOVER = ON) (LOAD_BALANCE = OFF) (ADDRESS = (PROTOCOL = TCP)(HOST = Stby-DG)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = Prim-DB)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = stbydg) ) )
