對oracle各種各樣的錯誤還真是不熟悉,記錄一次困擾很久問題的最終排查記錄。
一、症狀描述:
plsql無法連接數據庫,提示:“ORA-12154:TNS:無法解析指定的連接標識符”
二、排查過程
- tnsnames.ora 填寫沒有錯誤
- 監聽服務已經啟動:管理工具--服務,OracleOraDb10g_home1TNSListener服務。
- 服務器orcl實例已經啟動:管理工具---服務,OracleServiceORCL
- 服務器能ping通:網絡連接良好
- 實例能tnsping通:能夠ping通,則說明客戶端能解析listener的機器名,而且lister也已經啟動,但是並不能說明數據庫已經打開,而且tsnping的過程與真正客戶端連接的過程也不一致。
- oracle客戶端oracle net Manager測試通過,表明確實能連接
- 環境變量path值設置已經修改好。
- sqlplus提示 ORA-12154:sqlplus 用戶名/密碼@192.168.164.132:1521/orcl。
- plsql-preference-oracle home人工設置正確。
已經過程經過N次重復始終無法連接,始終報錯“ORA-12154"。
三、解決方案
經過以上反復修改,終於有一天用sqlplus遠程連接時報了個新錯誤:
"ORA-12560: TNS: 協議適配器錯誤"
總算有個眉目了,服務器端在環境變量中設置orcle_sid=orcl。
網上百度解決方法如下
在運行中輸入regedit,進入注冊表,然后到HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0將該環境變量ORACLE_SID設置為****,****是database SID。
或者右擊我的電腦,屬性--高級系統設置--環境變量---系統變量--新建變量名=oracle_sid,變量值=****,****是database SID。或者進入sqlplus前,在command line下輸set oracle_sid=********是database SID。
但我進入注冊表后發現,我的ORACLE_SID=orcl,沒有問題。
繼續嘗試下面的設置環境變量的方式,新建變量:ORACLE_SID=orcl,問題解決。
有待探討
那么問題來了:
這台服務器中注冊表中設置了ORACLE_SID也不能保證完全可以連接,最好設置ORACLE_SID;而跟他完全同樣配置的另一台服務器(這兩台其實是虛擬機,復制過來的,完全一樣),並未在環境變量中設置ORACLE_SID卻能連接。這是為什么?
參考
