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