oracle中監聽程式當前無法識別連線描述符中請求服務 的解決方法
早上同事用PL/SQL連線虛擬機器中的Oracle資料庫,發現又報了“ORA-12514 TNS 監聽程式當前無法識別連線描述符中請求服務”錯誤,幫其解決後,發現很多人遇到過這樣的問題,因此寫著這裡。
也許你沒有遇到過,原因如下:
你oracle安裝成功後,一直未停止資料庫(即資料庫是啟動的),客戶端配置成功後,應該一直不會有什麼問題。
而一旦你和我同事一樣,有時把Oracle安裝在虛擬機器中,而且Oracle安裝完畢後,沒在進行任何監聽的配置,則虛擬機器再啟動,則就會出現ORA-12514的問題。如下圖
如下是解決思路:
根據出錯資訊判斷出客戶端未監聽到例項服務名
1、通過重啟服務的方式啟動資料庫,再次連線仍無法連線伺服器。
2、既然第一種方法不能解決問題,那就第二種方法。考慮監聽listener.ora
監聽配置檔案listener.ora中可以不必指定監聽的服務名(安裝Oracle10g後也是沒有指定的)。正常情況下一般只要資料庫啟動,客戶端連線資料庫也沒有什麼問題,但是有時重複啟動關閉也會出現ORA-12514錯誤。
既然listener.ora中沒有指定監聽,我們可以在listener.ora檔案中指定監聽的例項名,這樣該問題應該可以連線。
步驟如下:
- 在oracle伺服器Oracle安裝目錄(我的在E:\Oracle10g下,每個人的不一樣,根據自己的情況查詢)Network/admin目錄下找到listener.ora 我的如下圖所示
# listener.ora Network Configuration File: E:\Oracle10g\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = E:\Oracle10g)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = E:\Oracle10g)
(SID_NAME = ORCL)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = onest)(PORT = 1521))
)
)
標紅的為我新增的部分,ORCL為監聽的例項名。
結果出現如下圖的提示。
- 這時我們不要著急,只需要oracle伺服器重新啟動一下,再次連線即成功。這也是我們配置完listener.ora 監聽後,經常忘記的。再次嘗試,可以看到客戶端可以連線上oracle伺服器了,而且PL/SQL再次連線也沒有問題了。
而有些朋友在配置客戶端時,連線資料庫成功,而使用PL/SQL時,又出現瞭如下圖所示的問題。這又如何解決呢?為什麼oracle客戶端已經連線成功了,而PL/SQL確不行呢?
出現如上的原因是,可能是大家再配置oracle客戶端時,雖然連結成功了,步驟上可能有些錯誤。大家使用Net Cofiguration Assistant客戶端時重新配置了Orcl,而不是新增,我們應該如下步驟處理,就不會出問題了。
1、如果Net Cofiguration Assistant中已經有了Orcl。我們可以重新配置
2、如果Net Cofiguration Assistant中沒有Orcl,我們應該新增 具體介面如下圖所示。
如果大家該步處理也沒有問題了,listener.ora 修改成功,並且重新啟動了oracle伺服器,無論oracle客戶端還是PL/SQL都能夠成功連線資料庫了。
總結一下。當大家遇到“ORA-12514 TNS 監聽程式當前無法識別連線描述符中請求服務”錯誤的解決步驟:
1、通過重啟服務的方式啟動資料庫,再次連線嘗試。
2、如果第一種方法不可行,我們採用第二種方法
- 正確新增listener.ora;
- 重新啟動了oracle伺服器,並檢查oracle所有服務是否啟動;
-
oracle客戶端Net Cofiguration Assistant正確新增或重新配置例項名
第三種方法:
如果oracle版本是8點幾的,要把oracle8i相容性打鉤,然後在填寫sid,
然後在檢視地址的主機名和ip是否正確,最後檢視監聽器的主機名和ip是否正確,
在最後測試就可以了