Справочная информация: Работа с базой данных Oracle 12cR2 и в этом конкретном решении нам нужна максимальная доступность. Мы используем Active-Active репликацию с Golden Gate. Локальные пользователи настроены для аутентификации. Мы настраиваем наших клиентов, чтобы иметь возможность бесперебойного переключения при отказе и аутентификации, мы вручную синхронизировали c пароли для одного и того же логического пользователя между экземплярами БД.
Постановка задачи: Есть ли способ иметь вид сбоя на стороне клиента (как показано ниже), но иметь возможность указать учетные данные пользователя для первичных и вторичных БД?
Наши учетные данные в настоящее время через установщик на PoolDataSource и Мне еще предстоит найти строковое свойство TNS, которое мы можем установить для имени пользователя / пароля.
PoolDataSource poolDataSource = (PoolDataSourceImpl) PoolDataSourceFactory.getPoolDataSource();
poolDataSource.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");
poolDataSource.setURL(url);
poolDataSource.setUser(username);
poolDataSource.setPassword(password);
...
На стороне клиента мы используем jar ojdbc8, ucp и ons:
<dependency>
<groupId>com.oracle.database</groupId>
<artifactId>ojdbc8</artifactId>
<version>12.2.0.1</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ucp</artifactId>
<version>12.1.2-0-0</version>
</dependency>
<dependency>
<groupId>com.oracle.weblogic</groupId>
<artifactId>ons</artifactId>
<version>12.1.2-0-0</version>
</dependency>
Вот как выглядит наша строка подключения:
dbc: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=${primaryHostname)(PORT=1521)))
(CONNECT_DATA=(SERVICE_NAME=${primaryServiceName)))
(DESCRIPTION=
(ADDRESS_LIST=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=${secondaryHostname })(PORT=1521)))
(CONNECT_DATA=(SERVICE_NAME=${secondaryServiceName})))
)