背景: 使用 Oracle 12cR2 数据库,在这个特定的解决方案中,我们需要最大的可用性。我们在 Golden Gate 中使用主动-主动复制。设置本地用户进行身份验证。我们将客户端设置为能够无缝地进行故障转移并能够进行身份验证,我们已经手动同步了跨数据库实例的同一逻辑用户的密码。
问题陈述: 有没有办法出现客户端故障(如下所示),但能够指定主数据库和辅助数据库的用户凭据?
我们的凭据目前是通过 PoolDataSource 上的 setter 进行的,我还没有找到可以为用户名/密码设置的 TNS 字符串属性。
PoolDataSource poolDataSource = (PoolDataSourceImpl) PoolDataSourceFactory.getPoolDataSource();
poolDataSource.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");
poolDataSource.setURL(url);
poolDataSource.setUser(username);
poolDataSource.setPassword(password);
...
在客户端,我们使用 ojdbc8、ucp 和 ons jar:
<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})))
)