oracle JDBC故障转移连接字符串

im9ewurl  于 2023-04-29  发布在  Oracle
关注(0)|答案(1)|浏览(125)

我正在尝试创建一个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)
        )
    )
 )

有什么建议吗?

6ju8rftf

6ju8rftf1#

如果你使用的是JDBC驱动程序11 g.您需要使用版本www. example www.example.com 。2.0.4.

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驱动程序12 c或更高版本。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)))

相关问题