我使用hibernate從數據庫中提取數據。我們有20多個節點的oracle RAC數據庫。當主服務器出現故障時,在休眠模式下切換到其他數據庫
現在的問題是,如果數據庫的一個節點發生故障,我不得不切換到另一個節點,在運行時沒有應用程序拋出錯誤,如果該節點關閉,我已經切換到第三節點,如明智。
當我們使用建立連接的傳統JDBC的風格,這是可以做到很容易的,因爲連接對象將是空的,當節點連接失敗
這就是這樣,我創建會話工廠,
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory()
{
try
{
return new Configuration().configure("database.cfg.xml").buildSessionFactory();
}
}
,這是方式正在逐漸會議,
會話= HibernateUtil.getSessionFactory()的openSession()。
現在,我該如何識別節點出現故障,以便我可以嘗試連接到備用節點。
我不能使用以下類型的配置,因爲我所有的節點SID的不同
jdbc:oracle:thin:@(description=(address_list=(load_balance=on)(failover=on) (address=(protocol=tcp)(host=host1)(port=1521))(address=(protocol=tcp)(host=host2)(port=1521)))(connect_data=(service_name=xxxxsid)(failover_mode=(type=select)(method=basic)))
我抓我的頭2天弄清楚如何能夠做到這一點。
由於在保證倍數副本之間一致性的問題,我強烈建議您依靠DBMS獲得冗餘/高可用性,並避免手動從應用程序切換。 – SJuan76 2012-07-22 18:34:29
我不確定這會有所幫助,但還有另一個適用於RAC的Oracle JDBC驅動程序。我沒有使用它,但我相信JDBC驅動程序應接受多個數據庫URL。 – 2012-07-22 20:17:34