【发布时间】:2019-10-18 05:53:50
【问题描述】:
我了解到我可以设置一个 JDBC 瘦客户端连接字符串,这样我的 Java 程序将首先尝试连接到第一个数据库,然后如果出现问题,它将尝试连接到第二个数据库。
然而这在实践中并没有发生。
如果我使用以下字符串:
jdbc:oracle:thin:@(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS =
(PROTOCOL = TCP)
(HOST = site1)
(PORT = 1521)
)
(ADDRESS =
(PROTOCOL = TCP)
(HOST = site2)
(PORT = 1521)
)
)
(FAILOVER=ON)
(FAILOVER_MODE=
(TYPE=SELECT)
(METHOD=BASIC)
(RETRIES=20)
(DELAY=3)
)
(LOAD_BALANCE = OFF)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = MYDB)
)
)
现在我知道site1 已关闭,site2 已启动。如果我在列表中指定site2 first,那么我会得到一个连接(就像我尝试连接到site2 时所期望的那样)。但是,当我首先输入 site1 时,我会遇到与尝试直接连接到 site1 相同的错误 - 这是:
java.util.concurrent.ExecutionException:
java.lang.RuntimeException:
java.sql.SQLException:
ORA-01033: ORACLE initialization or shutdown in progress
Oracle 瘦客户端是否要求第一个数据库进行连接,并且仅在连接期间出现问题时才进行故障转移?如果与第一台服务器的连接失败,我想要应用程序尝试下一台服务器(我可以使用try { ... } catch { ... } 应用程序逻辑来完成,但希望驱动程序为我处理详细信息)。
【问题讨论】: