Oracle Dataguard TAF(透明应用程序故障转移)问题

时间:2019-06-04 22:48:43

标签: oracle transparent failover dataguard

我们已经为Dataguard数据库配置了oracle TAF(透明应用程序故障转移),以便在主数据库出现任何问题时应用程序可以使用相同的服务名称来连接数据库,并且必须切换到备用数据库,但是我们遇到了一个独特的问题数据中心内的应用程序服务器能够连接到db,但来自不同数据中心的服务器无法使用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 

1 个答案:

答案 0 :(得分:0)

请注意,在版本12.1中,Oracle在没有任何警告的情况下将transport_connect_timeout的含义从几秒更改为几毫秒。 因此,如果使用此版本,则无法分辨3表示秒还是毫秒。

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

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

  
      
  • 错误12998506 RETRY_COUNT连接参数是使用JDBC瘦描述时的尝试连接总数
  •   
     

RETRY_COUNT连接参数是附加次数   初始尝试后应进行连接尝试   失败了因此,如果RETRY_COUNT为2,则最多3个连接   将尝试对ADDRESS_LIST中的每个地址进行尝试。然而   JDBC Thin以RETRY_COUNT表示连接总数   因此,在上面的示例中,JDBC瘦将最多产生2个   尝试输入每个地址,而不是预期的3。

     

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

PS:从版本6开始,JDBC驱动程序似乎忽略了参数retry_delay。 12c及更高。