我们开发的一个系统,用JDBC方式连接Oracle9i数据库. 并且存在两个oracle数据库(分别安装再两台服务器上,可以认为是完全独立的两个oracle数据库).其中一个为Primary database,另一个为secondary database. 再正常情况下,当请求到来时,系统会去访问primary database完成处理.只有当primary db出现故障(比如primary db所在机器网线被拔掉等),系统才会去访问secondary db进行处理.有点类似于"首选DNS,备选DNS"的方式. 现在遇到的问题是:例如我在将primary db所在机器网线被拔掉后,JDBC连接过了很长时间才超时,此时对请求的处理已经没有什么意义了.我们希望在这种情况下,很快能够捕捉到primary db的错误,从而在较短的时间内去访问secondary db.请问有什么样的方式可以做到.  知道的朋友希望能够给出详细的设置步骤和参数以及调用的api.  谢谢

解决方案 »

  1.   

    其实很简单,你把两个数据库做成RAC,用RAC FAILOVER功能,在客户端配置好
    客户端tnsnames.ora配置如下
    RAC =
    (DESCRIPTION =
    (enable=broken)
    (LOAD_BALANCE=ON)
    (FAILOVER=ON)
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.10)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.12)(PORT = 1521))
    )
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = rac)
    (failover_mode=(type=select)(method=basic)(retries=20)(delay=10))
    )
    )
    说实在的,RAC不太好做,比较麻烦.
      

  2.   

    要不就用苯点的办法.
    程序里起个线程实时监测到Promary database的网络,
    Runtime.getRuntime().exec ("cmd /c start tnsping ..."),用inputStream取得返回值.
    后面的就不说了...