2013-04-26 6 views
0

Я использую строку TNS в качестве URL-адреса моего источника данных Grails с двумя окнами Oracle (ora01, ora02). При нормальной работе он подключается к службе db ok. Вот конфиг:Ошибки Grails, переходящие во вторую БД с помощью строки TNS в качестве источника данных

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 
} 

Когда АБД выключить ora01 и перезапустить ora02 как активного, то Grails приложение doens't понимают и бросает 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 - это правильно? Это похоже на то, что приложение все еще пытается подключиться к мертвому db и не пытается использовать другой узел. Нужно ли мне заставить Grails делать что-то конкретное, чтобы переключиться на теперь действующий узел?

ответ

0

Просьба использовать (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)))" 
+0

Извинения за задержку в ответе. Я тоже пробовал FAILOVER = ON (но я думаю, что драйвер принимает ON по умолчанию в любом случае), но тот же результат, похоже, не понимает, что БД упала и не переключится на другой адрес. Такое же исключение, как указано выше. Я должен оставить это на данный момент, чтобы работать над другими вещами, но опубликую результаты решения/расследования, когда вернусь к нему. Благодарю. – spacebot

 Смежные вопросы

  • Нет связанных вопросов^_^