【问题标题】:Oracle Dataguard TAF (Transparent Application Failover) IssuesOracle Dataguard TAF(透明应用程序故障转移)问题
【发布时间】:2019-10-20 11:30:21
【问题描述】:

我们已经为 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 

【问题讨论】:

标签: oracle transparent failover dataguard


【解决方案1】:

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

自 12.2 版以来,您的值 3(微秒)太低了。

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

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

RETRY_COUNT 连接参数是附加次数 应在初始尝试后进行连接尝试 失败的。因此,如果 RETRY_COUNT 为 2 则最多 3 个连接 将对 ADDRESS_LIST 中的每个地址进行尝试。然而 JDBC Thin 取 RETRY_COUNT 表示连接总数 尝试这样做,在上面的例子中,JDBC Thin 最多会生成 2 每个地址的尝试次数,而不是预期的 3.

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 2021-03-25
    • 2014-11-21
    • 2013-08-04
    相关资源
    最近更新 更多