Я тестирую поддержку отказоустойчивости Fast Connect (FCF) от Oracle Universal Connection Pool (UCP) версии 11.2.0.1.0. Рассматриваемый сценарий - это запланированное событие отключения. Стандартная версия Oracle Database 11g Release 11.2.0.2.0 - это используемая версия базы данных. Ниже приведены шаги, я следую в моем тестеOracle UCP - FCF Планируемый выход из строя
- Получить соединение и распечатать экземпляр он подключен к
- Выполнить «srvctl остановить экземпляр -d -n» на одном из узлов
- Выполнить запрос на соединение, полученное на первом шаге.
Третий шаг с ошибкой (ORA-03113: конец файла на канале связи), если это не так, поскольку это запланированное событие отключения. Анализируя журналы ucp, я мог видеть, что событие FAN принимается клиентом jdbc и обрабатывается путем маркировки состояния соединения как «STATUS_CLOSE_ON_RETURN», но выполнение запроса с использованием этого заимствованного соединения не выполняется.
Ожидаемый результат заключается в том, что любые запросы, выполняемые по заимствованным соединениям, преуспевают, и соединение остается действительным до тех пор, пока оно не будет возвращено в пул. После этого он должен быть закрыт пулом. Команда экземпляра stop не должна выполняться до тех пор, пока это не будет выполнено.
Что-нибудь недоставало в конфигурации? Правильно ли указанная команда srvctl?
Оракул конфигурация пула, как показано ниже
PoolDataSourceImpl pds = new PoolDataSourceImpl();
try {
pds.setConnectionPoolName("Connection Pool");
pds.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");
pds.setConnectionFactoryProperties(getOracleDataSourceProperties());
pds.setDataSourceName("DataSource");
pds.setServerName(SERVER_NAME);
pds.setUser("system");
pds.setPassword("pass");
pds.setPortNumber(1521);
pds.setMinPoolSize(0);
pds.setMaxPoolSize(25);
pds.setMaxIdleTime(1800);
pds.setValidateConnectionOnBorrow(true);
pds.setONSConfiguration("nodes=v-ind-db-11g-01:6200,v-ind-db-11g-02:6200");
pds.setFastConnectionFailoverEnabled(true);
pds.setInactiveConnectionTimeout(20);
pds.setConnectionWaitTimeout(20);
pds.setPropertyCycle(60);
pds.startPool();
} catch (SQLException e) {
throw new RuntimeException("Cannot create project datasource", e);
}
.......
Properties getOracleDataSourceProperties() {
Properties p = new Properties();
p.put("driverType", "oci");
p.put("networkProtocol", "tcp");
p.put("serviceName", SERVICE_NAME);
return p;
}