单机的主备库,如果没有集群软件,当主备切换后,客户端连接串往往需要修改,有条件的地方将IP设置为一个域名,例如 hrdb.huawei.com(仅是举例,如有雷同纯属巧合),然后切换DG,网络方面将这个域名指向备库IP(或F5分发到备库IP),客户端不用改动就可以继续访问数据库了。没有域名解析或F5怎么办?
用一个即将淘汰的技术 services_name,亲测oracle 19.9有效
-
创建一个服务:
-
exec dbms_service.create_service(service_name=>'appservice',network_name=>'appservice')
-
-
连接串这样设置:
-
ORCL =
-
(DESCRIPTION_LIST =
-
(FAILOVER = ON)
-
(LOAD_BALANCE = OFF)
-
(DESCRIPTION =
-
(ADDRESS_LIST =
-
(ADDRESS = (PROTOCOL = TCP)(HOST = bjdb)(PORT = 1521))
-
)
-
(CONNECT_DATA =
-
(SERVICE_NAME = appservice)
-
)
-
)
-
(DESCRIPTION =
-
(ADDRESS_LIST =
-
(ADDRESS = (PROTOCOL = TCP)(HOST = shdb)(PORT = 1521))
-
)
-
(CONNECT_DATA =
-
(SERVICE_NAME = appservice)
-
)
-
)
-
)
-
-
主库创建触发器:
-
CREATE OR REPLACE TRIGGER service_name_trg
-
AFTER DB_ROLE_CHANGE ON DATABASE
-
DECLARE
-
role VARCHAR(30);
-
BEGIN
-
SELECT DATABASE_ROLE INTO role FROM V$DATABASE;
-
IF role = 'PRIMARY' THEN
-
DBMS_SERVICE.START_SERVICE('appservice');
-
ELSE
-
DBMS_SERVICE.STOP_SERVICE('appservice');
-
END IF;
-
END;
-
/
-
-
重启主库
-
-
客户端测试
-
sqlplus scott/tiger@orcl
-
select host_name from v$instance; --连接到bjdb 北京
-
切换到备库
-
sqlplus scott/tiger@orcl
-
select host_name from v$instance; --连接到shdb 上海
-
-
透明,当然会话会中断,客户端需要能自动重新连接(tomcat连接池基本功能)。
官方推荐的技术 TAC
