我正在尝试创建一个 JDBC 连接字符串,如果主数据库发生故障,它将允许故障转移到辅助数据库。我目前有以下字符串,但是当主数据库失败时,该字符串不会连接到辅助数据库。如果我将次要细节放在字符串中的第一位,它就可以工作。似乎如果字符串的第一部分遇到失败的数据库,它就不会继续到字符串的第二部分。
jdbc:oracle:thin:@
(
DESCRIPTION_LIST=
(LOAD_BALANCE=off)
(FAILOVER=on)
(DESCRIPTION=
(CONNECT_TIMEOUT=3)
(RETRY_COUNT=3)
(ADDRESS_LIST=
(LOAD_BALANCE=on)
(ADDRESS=
(PROTOCOL=TCP)
(HOST=11.111.1.111)
(PORT=1234)
)
)
(
CONNECT_DATA=(SERVICE_NAME=<servicename1>)
)
)
(DESCRIPTION=
(ADDRESS_LIST=
(LOAD_BALANCE=on)
(ADDRESS=
(PROTOCOL=TCP)
(HOST=22.222.2.222)
(PORT=1234)
)
)
(
CONNECT_DATA=(SERVICE_NAME=servicename2)
)
)
)
有什么建议吗?
最佳答案
如果您使用的是 JDBC 驱动程序 11g。您需要使用版本 11.2.0.4,然后在 11.2.0.4 之上应用合并补丁 24559240。
Patch 24559240: MERGE REQUEST ON TOP OF 11.2.0.4.0 FOR BUGS 19030178 19154304 20426934
Bugs Resolved by This Patch
19030178 ADD TLSV1.1 AND TLSV1.2 IN JDBC THIN
19154304 JDBC: RETRY_COUNT DOES NOT RETRY WHEN SERVICE DOWN AS REQUIRED
20426934 THIN JDBC NEED TO INTERPRET A NEW ERROR SEND BY LISTENER ON REACHING RATE_LIMIT
如果您使用 JDBC 驱动程序 12c 或更高版本。 CONNECT_TIMEOUT 被部分忽略。您必须改用 TRANSPORT_CONNECT_TIMEOUT。请注意 TRANSPORT_CONNECT_TIMEOUT 值可能以秒或毫秒为单位 - 取决于 JDBC 驱动程序版本。
尝试像这样使用连接字符串:
jdbc:oracle:thin:@(DESCRIPTION=
(TRANSPORT_CONNECT_TIMEOUT=5)
(CONNECT_TIMEOUT=5)
(RETRY_DELAY=10)
(RETRY_COUNT=2)(FAILOVER=ON)(LOAD_BALANCE=off)
(ADDRESS=(PROTOCOL=TCP)(HOST=db1-scan)(PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=db2-scan)(PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=testsrv)))
https://stackoverflow.com/questions/60431838/
相关文章:
reactjs - Auth0 并使用react,将用户重定向到注册页面
ios - GeometryReader 在 SwiftUI 中占用额外空间
mysql - 无法在 AWS-mysql 中创建表并抛出错误代码 1044。拒绝用户 'user1
python - pandas 将嵌套字典转换为 mutiIndex 行和列
python - "Chrome not reachable"在非 headless 模式下使用 X
c# - 在 Visual Studio 2019 中添加带有 css 类的 div 的键盘快捷方式
google-cloud-platform - 使用 GCP AutoML 进行自定义实体提取的预测