JDB C строка соединения для восстановления при сбое - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь создать строку соединения JDB C, которая разрешит отработку отказа для вторичной базы данных в случае сбоя основной. В настоящее время у меня есть следующая строка, но когда первичный сбой, строка не подключается к вторичной БД. Если я сначала добавлю второстепенную деталь в строку, она будет работать Похоже, что если первая часть строки попадает в сбойную базу данных, она не переходит во вторую часть строки.

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)
        )
    )
 )

Любой совет?

1 Ответ

0 голосов
/ 27 февраля 2020

Если вы используете драйверы JDB C 11g. Вам необходимо использовать версию 11.2.0.4, а затем применить исправление слияния 24559240 поверх 11.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

В случае, если вы используете драйверы JDB C 12 c или выше. CONNECT_TIMEOUT частично игнорируется. Вместо этого вы должны использовать TRANSPORT_CONNECT_TIMEOUT. Просто помните, что значение TRANSPORT_CONNECT_TIMEOUT может быть в секундах или миллисекундах - в зависимости от версии драйвера JDB C.

Попробуйте использовать строку подключения следующим образом:

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))) 
...