0

我们已经为 dataguard 数据库配置了 oracle TAF(透明应用程序故障转移),以便应用程序可以使用相同的服务名称来连接数据库,以防主数据库出现任何问题并且必须切换到备用数据库,但是我们遇到了一个独特的问题,即应用程序服务器数据中心内能够连接到数据库,但来自不同数据中心的服务器无法使用 taf 服务连接..在 90 秒超时间隔后,它尝试连接到备用主机并失败

即使跨数据中心,使用直接主机名和 sid 的连接也可以正常工作

错误 :

Caused by: java.io.IOException: Socket read timed out, socket connect lapse 3 ms. plx9852.xyz.com/135.167.30.103 1524 3 1 true 
at oracle.net.nt.TcpNTAdapter.connect(TcpNTAdapter.java:209) 
at oracle.net.nt.ConnOption.connect(ConnOption.java:161) 
at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:470) 
... 54 more
pcdrest_taf.db.xyz.com=
(description=(connect_timeout=90)(retry_count=30)(retry_delay=3)(transport_connect_timeout=3)(load_balance=off)(failover=on)(address_list=(address=(protocol=tcp)(host=plx9843.xyz.com)(port=1524))(address=(protocol=tcp)(host=plx9852.xyz.com)(port=1524)))(connect_data=(service_name=pcdrest_taf.db.xyz.com)(failover_mode=(type=select)(method=basic))))

使用 LDAP 的应用程序上的连接字符串:

spring.datasource.jdbcUrl=jdbc:oracle:thin:@ldap://polarx.xyz.com:3060/pcdrest_taf,cn=OracleContext,dc=db,dc=xyz,dc=com ldap://polarx1.xyz.com:3060/pcdrest_taf,cn=OracleContext,dc=db,dc=xyz,dc=com ldap://polarx2.sbc.com:3060/pcdrest_taf,cn=OracleContext,dc=db,dc=xyz,dc=com ldap://polarx3.sbc.com:3060/pcdrest_taf,cn=OracleContext,dc=db,dc=xyz,dc=com ldap://polarx4.sbc.com:3060/pcdrest_taf,cn=OracleContext,dc=db,dc=xyz,dc=com ldap://polarx5.sbc.com:3060/pcdrest_taf,cn=OracleContext,dc=db,dc=xyz,dc=com 

4

1 回答 1

0

请注意 Oracle 在 12.1 版中将 transport_connect_timeout 的含义从秒更改为毫秒,而没有任何警告。因此,如果您使用此版本,则无法判断 3 是指秒还是毫秒。

从 12.2 版开始,您的 3(微秒)值太低。

此外,Oracle JDBC 驱动程序中存在几个与 TAF 相关的错误。例如:

  • Bug 12998506 RETRY_COUNT 连接参数是使用 JDBC Thin 时的连接尝试总数 说明

RETRY_COUNT 连接参数是在初始尝试失败后应进行连接尝试的额外次数。因此,如果 RETRY_COUNT 为 2,则将对 ADDRESS_LIST 中的每个地址进行最多 3 次连接尝试。但是 JDBC Thin 使用 RETRY_COUNT 来表示连接尝试的总数,因此在上面的示例中,JDBC Thin 将对每个地址进行最多 2 次尝试,而不是预期的 3 次。

这是错误 12760352 的后续,其中使用 JDBC Thin 时 ADDRESS_LIST 中的地址以错误的顺序重试(例如,如果地址列表包含 A 和 B JDBC Thin 将尝试连接为 AA ... BB ... 而不是阿布...)。

PS:参数 retry_delay 似乎被 JDBC 驱动程序从版本中忽略。12c 及更高版本。

于 2019-06-05T07:35:05.953 回答