我面临一个愚蠢的问题,但经过一段时间在线搜索和试验后,我开始失去希望。
感谢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