我正在測試Oracle通用連接池(UCP)11.2.0.1.0版的快速連接故障轉移(FCF)支持。正在嘗試的場景是計劃中斷事件。 Oracle數據庫11g版本11.2.0.2.0標準版是正在使用的數據庫版本。下面是我跟隨在我的測試Oracle UCP - FCF計劃中斷支持
- 步驟獲得一個連接並打印連接到
- 執行實例「SRVCTL停止實例-d -n」上的一個節點
- 執行查詢在第一步中檢索到的連接上。
第三步失敗時出現錯誤(ORA-03113:通信通道上的文件結束),因爲它不應該是一個計劃中斷事件。分析ucp日誌我可以看到,jdbc客戶端接收到FAN事件,並通過將連接狀態標記爲「STATUS_CLOSE_ON_RETURN」進行處理,但仍然使用該借用連接執行查詢失敗。
預期的結果是,在借用連接上執行的任何查詢都會成功並且連接仍然保持有效,直到它返回到池。之後它應該被游泳池關閉。停止實例命令應該不會成功,直到完成。
有什麼我在配置中丟失?上面的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;
}