已经搜索了很多我的问题,但似乎不是常用的东西。这里的问题是Oracle DB Veritas集群,它基于2个节点,主节点和备用节点。 这种情况与客户有关,我们并没有在感觉良好的情况下接触它。所有这些东西都在 JBoss6.4 上运行,并且打算遵循以下逻辑:
这里的问题是即使node2正在运行,也要将集群故障回复到node1。 使用的连接字符串:
jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST = (load_balance = off)(failover = on)(ADDRESS =(PROTOCOL = TCP)(Host = node1)(Port = 49005))(ADDRESS =(PROTOCOL = TCP)(Host = node2) (Port = 49005)))(CONNECT_DATA =(SERVICE_NAME = app_service)))
如果应用程序无法将心跳事件写入数据库3次,则JVM将被关闭。是否有任何方法可以配置数据源连接,以便在考虑到node2已启动并以RO模式运行时,如果它可用,则它会故障回到主节点(node1)?
提前致谢!
答案 0 :(得分:0)
您可以使用特殊服务名称定义用于连接客户端的数据库。例如,在数据库启动时系统触发器的主模式下。 您可以通过运行命令
动态重新定义服务名称alter system set service_names='app_service_primary' scope=memory;
当数据库以主模式启动时,触发器会创建服务。客户端通过服务名称连接,该服务名称在数据库开头的触发器中创建,而不是由默认数据库名称或服务创建。
CREATE OR REPLACE TRIGGER sys.set_svc_name
AFTER
STARTUP
ON DATABASE
DECLARE role VARCHAR(30);
BEGIN
SELECT Database_Role
INTO Role
FROM V$database;
IF Role = 'PRIMARY' THEN
EXECUTE IMMEDIATE 'alter system set service_names=''app_service_primary'' scope=memory'; END IF;
END;
需要更改连接字符串
jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS_LIST = (load_balance=off)
(failover=on) (ADDRESS = (PROTOCOL = TCP) (Host = node1) (Port = 49005)) (ADDRESS = (PROTOCOL = TCP) (Host = node2) (Port = 49005)) )
(CONNECT_DATA = (SERVICE_NAME = app_service_primary)))