如何在具有多个服务器的Oracle JDBC long TNSNAME样式URL中使用不同的服务名称

时间:2012-06-06 07:17:56

标签: oracle url jdbc cluster-computing tnsnames

当我尝试使用JDBC长TNSNAME样式URL连接数据库服务器时出现问题。我们有两个Oracle集群服务器。这是我的TNSNAME样式网址。

jdbc:oracle:thin:@(DESCRIPTION=
  (LOAD_BALANCE=ON)(FAILOVER=ON)(ADDRESS_LIST=
    (ADDRESS=(PROTOCOL=TCP)(HOST=host1)(PORT=1250))
    (ADDRESS=(PROTOCOL=TCP)(HOST=host2)(PORT=1250))
  )
  (CONNECT_DATA=
    (SERVICE_NAME= DEV1)
  )
)

我的问题是当我们的DBA创建数据库时,他为host1和host2使用了不同的服务名称。 host1是DEV1,host2是DEV2_B,如果我切换主机序列,它似乎无法工作。像

jdbc:oracle:thin:@(DESCRIPTION=
  (LOAD_BALANCE=ON)(FAILOVER=ON)(ADDRESS_LIST=
    (ADDRESS=(PROTOCOL=TCP)(HOST=host2)(PORT=1250)) /*host2 now come first, it would be cause connect failure.*/
    (ADDRESS=(PROTOCOL=TCP)(HOST=host1)(PORT=1250))
  )
  (CONNECT_DATA=
    (SERVICE_NAME= DEV1)
  )
)

我认为在这种情况下,故障转移和负载平衡是没用的。我的问题是,如何在我的URL中单独设置service_name? (这两个DB也使用不同的SID.DEVA和DEVB) 请帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

(DESCRIPTION_LIST=
            (FAILOVER=true)
            (LOAD_BALANCE=false)
            (DESCRIPTION=
            (ADDRESS= (PROTOCOL=TCP) (HOST=TEST_DB) (PORT=1521))
            (CONNECT_DATA=
            (SERVICE_NAME=saibal)))             
            (DESCRIPTION=
            (ADDRESS= (PROTOCOL=TCP) (HOST=MY_DB) (PORT=1521))
            (CONNECT_DATA=
            (SERVICE_NAME= test_saibal))
)