Grails错误切换到以TNS字符串作为数据源的第二个DB

Grails错误切换到以TNS字符串作为数据源的第二个DB,grails,datasource,tns,Grails,Datasource,Tns,我使用一个TNS字符串作为Grails数据源的url,带有两个oracle数据库(ora01、ora02)。在正常运行期间,它连接到数据库服务ok。以下是配置: dbString = "jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS_LIST = (LOAD_BALANCE = ON) (ADDRESS = (PROTOCO

我使用一个TNS字符串作为Grails数据源的url,带有两个oracle数据库(ora01、ora02)。在正常运行期间,它连接到数据库服务ok。以下是配置:

dbString = "jdbc:oracle:thin:@(DESCRIPTION = 
                  (ADDRESS_LIST = 
                        (LOAD_BALANCE = ON) 
                        (ADDRESS = (PROTOCOL = TCP)(HOST = ora01.foo)(PORT = 1521)) 
                        (ADDRESS = (PROTOCOL = TCP)(HOST = ora02.bar)(PORT = 1521))
                  ) 
                  (CONNECT_DATA = (SERVICE_NAME = orastage)))"

dataSource 
{
    pooled = true
    driverClassName = "oracle.jdbc.OracleDriver"
    username = foo
    password = bar
    url = dbString
    logSql = false
}   
当DBA关闭ora01并将ora02作为活动的重新启动时,Grails应用程序没有意识到并抛出JDBC错误:

2013-04-26 11:41:35,428 ERROR JDBCTransaction - JDBC commit failed
java.sql.SQLRecoverableException: No more data to read from socket
at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1142)
at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1099)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:288)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:191)
at oracle.jdbc.driver.T4C7Ocommoncall.doOCOMMIT(T4C7Ocommoncall.java:75)
at oracle.jdbc.driver.T4CConnection.doCommit(T4CConnection.java:565)
at oracle.jdbc.driver.PhysicalConnection.commit(PhysicalConnection.java:3851)
at oracle.jdbc.driver.PhysicalConnection.commit(PhysicalConnection.java:3857)
at org.apache.commons.dbcp.DelegatingConnection.commit(DelegatingConnection.java:334)
我的配置看起来还好吗?我假设Grails可以在连接时将TNS字符串作为数据源URL,在我们尝试使db失败之前,一切正常-这是正确的吗?这就像该应用程序仍在尝试连接到死数据库,而没有尝试其他节点。我是否需要让Grails执行任何特定的操作以切换到现在正在工作的节点?

尝试使用描述中的
(FAILOVER=ON)

dbString = "jdbc:oracle:thin:@(DESCRIPTION = 
                  (ADDRESS_LIST = 
                        (LOAD_BALANCE = ON) 
                        (FAILOVER=ON)
                        (ADDRESS = (PROTOCOL = TCP)(HOST = ora01.foo)(PORT = 1521)) 
                        (ADDRESS = (PROTOCOL = TCP)(HOST = ora02.bar)(PORT = 1521))
                  ) 
                  (CONNECT_DATA = (SERVICE_NAME = orastage)))"

对延迟回复表示歉意。我也尝试过FAILOVER=ON(但我认为驱动程序在默认情况下假定为ON),但同样的结果是,似乎没有意识到数据库已断开,并且不会切换到其他地址。与上述相同的例外情况。我不得不暂时离开这里去做其他事情,但当我回到这里时,我会发布解决方案/调查的结果。谢谢