今天用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安裝目錄(我的在C:\oracle下,每個人的不一樣,根據自己的情況查找)Network/admin目錄下找到listener.ora 我的如下圖所示
# listener.ora Network Configuration File: C:\oracle\product\10.2.0\db_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:\oracle\product\10.2.0\db_1)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = C:\oracle\product\10.2.0\db_1)
(SID_NAME = ORCL)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.59.129)(PORT = 1521))
)
)
標紅的為我添加的部分,ORCL為監聽的實例名。
然后,oracle服務器重新啟動一下,再次連接即成功,這也是我們配置完listener.ora 監聽后,經常忘記的,
再次嘗試,可以看到客戶端可以連接上oracle服務器了,而且PL/SQL再次連接也沒有問題了。