又是這個百無聊賴的問題,雖然問題芝麻點大,卻讓我們好找啊!
很久沒有安裝oracle了,今天安裝11g的時候,用PLSQL Developer連接時,就出現了這個俗不可耐的問題:ORA-12154 TNS無法解析指定的連接標識符。我自認為安裝的時候已經很小心翼翼了,結果還是出了纰漏,於是乎,我抱著不解決問題誓不罷休的決心開始一步步排查問題,功夫不負有心人,最終得以解決。
下面我詳細給大家介紹解決問題的思路:
首先搞清楚問題的主體有兩個:oracle服務和PLSQL Developer。
一、先排查oracle服務這邊。
1、開啟服務和監聽
命令行輸入:lsnrctl start
或者界面操作 右鍵 我的電腦-->管理-->服務和應用程序-->服務,右鍵點擊OracleOraDb11g_home1TNSListener-->啟動類型-->自動(延遲啟動),這樣啟動的好處是只要在使用oracle服務監聽的時候才啟動,節約內存。當然,在啟動服務監聽後順便啟動服務。右鍵點擊 OracleServiceORCL 與上面同樣操作。
監聽啟動之後可以查看監聽詳細狀態。命令行輸入:lsnrctl status。
監聽和服務都啟動成功之後,再用PLSQL Developer連接試一下,如果可以,下面步驟可以省略,如果不行,請看下面第二步。
2、用sqlplus測試連接
命令行輸入:sqlplus/nolog
再輸入:conn 用戶名/密碼 @ 實例 as sysdba 。示例:conn sys/123456@orcl as sysdba 或者 conn system/123456@orcl as sysdba。
說明:用戶名和密碼是在安裝oracle將要結束時,有個口令管理的選項進入設置的,用戶名有很多,比如sys,system,scott,但是密碼要自己設置。
如果能連接上,則可繼續閱讀下文,如果連接不上,則可以就此止步,去研究oracle安裝哪裡出了問題。
為了檢測更加保險,我們還可以ping oracle服務。命令行輸入:tnsping localhost:1521/orcl。如果出現“OK”字樣,可表示ping 通。
試著PLSQL Developer繼續連接,如果還連接不上,則繼續下文。
仔細檢查D:\app\Administrator\product\11.2.0\dbhome_2\NETWORK\ADMIN 中tnsnames.ora文件內容有沒有錯誤,比如多了空格啊什麼的,特別是地址指向。不過一般在第一次使用的時候是不需要改動裡面的東西。這裡注意了,oracle 11g 安裝完之後,安裝目錄下會有兩個dbhome。dbhome_1和dbhome_2,兩個裡面都有tnsnames.ora。我們要檢查的是dbhome_2文件夾裡的tnsnames.ora。
二、PLSQL Developer
以上流程如果比較順利,基本可以排除oracle服務的問題。我們再把問題轉向PLSQL Developer。
1、打開PLSQL Developer,先不登錄,點擊取消,接著我們照樣進入了操作主界面,點擊菜單欄中 工具-->首選項-->連接,右邊選擇oracle客戶端,選中你安裝的,然後點擊應用,確定即可。
2、重新登錄,填上你剛剛ping oracle服務的用戶名、密碼和實例。再連接,如果還連接不上,把數據庫實例加上主機名和端口號。示例:localhost:1521/orcl,這中配置是和tnsnames.ora配置一一對應的。再連接試試,必須成功,再不成功,那就超出我個人能力范圍了,呵呵~
下面給出tnsnames.ora原汁原味的配置格式:
# tnsnames.ora Network Configuration File: d:\app\Administrator\product\11.2.0\dbhome_2\network\admin\tnsnames.ora # Generated by Oracle configuration tools. LISTENER_ORCL = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ORACLR_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) (CONNECT_DATA = (SID = CLRExtProc) (PRESENTATION = RO) ) ) ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )說明:
ORCL2 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )這樣我們就在本地服務上多了一個orcl2的實例,我們可以試一試。
REMOTEORCL= (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.105)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )這樣在登錄時候,填寫對應的實例、用戶名和密碼就搞定了。