我读过我可以设置一个 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
首先指定,那么我会得到一个连接(就像我只是尝试连接到时所期望的那样site2
)。但是,当我把site1
它放在第一位时,我得到的错误与我尝试直接连接到的错误相同site1
——即:
java.util.concurrent.ExecutionException:
java.lang.RuntimeException:
java.sql.SQLException:
ORA-01033: ORACLE initialization or shutdown in progress
Oracle 瘦客户端是否需要第一个数据库在连接上工作,并且只有在连接期间出现问题时才进行故障转移?如果与第一台服务器的连接失败,我想要应用程序尝试下一台服务器(我可以使用try { ... } catch { ... }
应用程序逻辑来做,但希望驱动程序为我处理细节)。