2012-02-17 4 views
1

Я тестирую поддержку отказоустойчивости 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 Планируемый выход из строя

  1. Получить соединение и распечатать экземпляр он подключен к
  2. Выполнить «srvctl остановить экземпляр -d -n» на одном из узлов
  3. Выполнить запрос на соединение, полученное на первом шаге.

Третий шаг с ошибкой (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; 
     } 
 

ответ

1

Если вы делаете SHUTDOWN NORMAL и затем завершить сделку вам, делает ваше приложение по-прежнему изящно?

Looks likesrvctl stop instance -d XXX -n YYY -o normal должен сделать это.

This thread предлагает метод shutdown по умолчанию для srvctl является «немедленным», что объясняет, что вы видите.

1

Я был в состоянии проверить поддержку UCP для FCF с двумя пересадками

  1. Создание нового сервиса. Служба, используемая при первоначальной попытке, была стандартной по умолчанию, и функция FCF не работает со службой по умолчанию, как указано here в примечании.

  2. Остановка службы вместо экземпляра. Остановка экземпляра будет симулировать незапланированный прорыв вместо запланированного.

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