我面臨一個愚蠢的問題,但經過一段時間在線搜索和試驗後,我開始失去希望。
感謝Dataguard,我有兩個配置爲副本的Oracle DB。
Oracle:JDBC TNS URL連接不會故障轉移,因爲偵聽器仍然響應
我使用JDBC URL TNS連接到我的DB,如:
jdbc:oracle:thin:@ (DESCRIPTION_LIST= (FAILOVER=on) (LOAD_BALANCE=off) (DESCRIPTION= (ADDRESS= (PROTOCOL=TCP) (HOST=DB1) primary (PORT=1521)) (CONNECT_DATA= (SERVER=DEDICATED) (SID=MySID)) ) (DESCRIPTION= (ADDRESS= (PROTOCOL=TCP) (HOST=DB2) secondary (PORT=1521)) (CONNECT_DATA= (SERVER=DEDICATED) (SID=MySID)) ) )
當我執行切換,角色被交換:DB1變爲二級和DB2成爲初級。 DB1處於安裝狀態。
到目前爲止,這麼好。
但是通過我的連接URL,我期待從DB2獲得連接,這個連接已成爲主要連接,但由於DB1監聽器仍然處於工作狀態,它就好像一切正常,我最終試圖獲得DB1上的連接,從而導致了以下錯誤:
ORA-01033: ORACLE initialization or shutdown in progress
如果我殺了聽衆,那麼故障轉移的工作,我得到了來自DB2的連接。
但dataguard的重點在於執行自動故障轉移。
但如果我被迫殺聽衆:
- 這不是我所期待:)
- 轉回可能無法正常工作,因爲它使用的聽衆這樣做
如果有人對於正確的配置有一個線索,我很感興趣!
在此先感謝。
你可以通過編程實現它,這很容易 - 捕捉一個異常並嘗試另一個sid,這是一個想法。 –
感謝您的建議。我寧願避免編寫代碼,因爲我在應用程序服務器中,並且正在使用連接池機制。編碼意味着超載他們的代碼,並可能失去支持。我沒有試圖做一些完全瘋狂的事情,我很驚訝沒有簡單的方法來實現目前的工具。 – mbutton77