當使用plsqldev客戶端登入oracle資料庫時,如果對應的tnsnames.ora中是直接使用IP地址來連線,並且未在系統的hosts檔案中繫結主機名時,極易出現ORA-12502及ORA-12545報錯,這兩種錯誤內容分別是:
ORA-12502: TNS:listener received no CONNECT_DATA from client
ORA-12545: Connect failed because target host or object does not exists
而且就算是偶爾正常能登入進去,登入過程也會非常緩慢,這就很有可能是資料庫的監聽引數沒配置正確,可以使用以下方式來解決。
1、在windows的hosts檔案中顯式的繫結IP和主機名,比如我的資料庫VIP地址是192.168.1.10,資料庫伺服器主機名為racdb1,則繫結之:
192.168.1.10 racdb1-vip
這樣,再使用plsqldev登入時,便不會再出現上述兩種錯誤。當然,如果你嫌這樣太麻煩,想要像我一樣直接在tnsnames.ora裡指明IP來訪問,則可以採用以下第二種方案
2、顯式設定local_listener引數值,如下操作:
$ sqlplus / as sysdba
SQL> show parameter listener
NAME TYPE VALUE
———————————— ———– ——————————
local_listener string
remote_listener string LISTENERS_RACDB
SQL> alter system set local_listener=`(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.10)(PORT = 1521))` sid=`racdb1`;
System altered
注意上面的地址是vip地址,sid是當前資料庫例項ID,在每個資料庫節點上執行上述命令,並重新啟動叢集,再嘗試登入,則會發現問題已經排除了。