早上同事用PL/SQL連接虛擬機中的Oracle數(shù)據(jù)庫,發(fā)現(xiàn)又報了“ORA-12514 TNS 監(jiān)聽程序當前無法識別連接描述符中請求服務”錯誤,幫其解決后,發(fā)現(xiàn)很多人遇到過這樣的問題,因此寫著這里。
也許你沒有遇到過,原因如下:
你oracle安裝成功后,一直未停止數(shù)據(jù)庫(即數(shù)據(jù)庫是啟動的),客戶端配置成功后,應該一直不會有什么問題。
而一旦你和我同事一樣,有時把Oracle安裝在虛擬機中,而且Oracle安裝完畢后,沒在進行任何監(jiān)聽的配置,則虛擬機再啟動,則就會出現(xiàn)ORA-12514的問題。如下圖
TNS 監(jiān)聽程序當前無法識別連接描述符中請求服務 的解決方法" name=image_operate_32961295504739984 alt="ORA-12514 TNS 監(jiān)聽程序當前無法識別連接描述符中請求服務 的解決方法" src="http://s7.sinaimg.cn/middle/5007d1b1g9a40c1c8ebf6&690" width=378 height=106>
如下是解決思路:
根據(jù)出錯信息判斷出客戶端未監(jiān)聽到實例服務名
1、通過重啟服務的方式啟動數(shù)據(jù)庫,再次連接仍無法連接服務器。
2、既然第一種方法不能解決問題,那就第二種方法。考慮監(jiān)聽listener.ora
監(jiān)聽配置文件listener.ora中可以不必指定監(jiān)聽的服務名(安裝Oracle10g后也是沒有指定的)。正常情況下一般只要數(shù)據(jù)庫啟動,客戶端連接數(shù)據(jù)庫也沒有什么問題,但是有時重復啟動關閉也會出現(xiàn)ORA-12514錯誤。
既然listener.ora中沒有指定監(jiān)聽,我們可以在listener.ora文件中指定監(jiān)聽的實例名,這樣該問題應該可以連接。
步驟如下:
- 在oracle服務器Oracle安裝目錄(我的在E:\Oracle10g下,每個人的不一樣,根據(jù)自己的情況查找)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為監(jiān)聽的實例名。
- 然后在Oracle服務器的服務中重新啟動監(jiān)聽服務
TNS 監(jiān)聽程序當前無法識別連接描述符中請求服務 的解決方法" name=image_operate_641295504618796 alt="ORA-12514 TNS 監(jiān)聽程序當前無法識別連接描述符中請求服務 的解決方法" src="http://s16.sinaimg.cn/middle/5007d1b1g9a4102276c5f&690" real_src="http://s16.sinaimg.cn/middle/5007d1b1g9a4102276c5f&690">,然后在oracle客戶端通過再次配置對Orcl實例的監(jiān)聽,如下圖所示
TNS 監(jiān)聽程序當前無法識別連接描述符中請求服務 的解決方法" name=image_operate_40861295504642796 alt="ORA-12514 TNS 監(jiān)聽程序當前無法識別連接描述符中請求服務 的解決方法" src="http://s6.sinaimg.cn/middle/5007d1b1g9a410a2805c5&690" width=476 height=86 real_src="http://s6.sinaimg.cn/middle/5007d1b1g9a410a2805c5&690"> - 結果出現(xiàn)如下圖的提示。
TNS 監(jiān)聽程序當前無法識別連接描述符中請求服務 的解決方法" name=image_operate_14831295504695718 alt="ORA-12514 TNS 監(jiān)聽程序當前無法識別連接描述符中請求服務 的解決方法" src="http://s13.sinaimg.cn/middle/5007d1b1g9a40c26294dc&690" width=598 height=401 real_src="http://s13.sinaimg.cn/middle/5007d1b1g9a40c26294dc&690"> - 這時我們不要著急,只需要oracle服務器重新啟動一下,再次連接即成功。這也是我們配置完listener.ora 監(jiān)聽后,經常忘記的。再次嘗試,可以看到客戶端可以連接上oracle服務器了,而且PL/SQL再次連接也沒有問題了。
而有些朋友在配置客戶端時,連接數(shù)據(jù)庫成功,而使用PL/SQL時,又出現(xiàn)了如下圖所示的問題。這又如何解決呢?為什么oracle客戶端已經連接成功了,而PL/SQL確不行呢?
TNS 監(jiān)聽程序當前無法識別連接描述符中請求服務 的解決方法" name=image_operate_78131295504727281 alt="ORA-12514 TNS 監(jiān)聽程序當前無法識別連接描述符中請求服務 的解決方法" src="http://s3.sinaimg.cn/middle/5007d1b1g9a40c320fad2&690" width=436 height=288 real_src="http://s3.sinaimg.cn/middle/5007d1b1g9a40c320fad2&690">
出現(xiàn)如上的原因是,可能是大家再配置oracle客戶端時,雖然鏈接成功了,步驟上可能有些錯誤。大家使用Net Cofiguration Assistant客戶端時重新配置了Orcl,而不是添加,我們應該如下步驟處理,就不會出問題了。
1、如果Net Cofiguration Assistant中已經有了Orcl。我們可以重新配置
2、如果Net Cofiguration Assistant中沒有Orcl,我們應該添加 具體界面如下圖所示。
TNS 監(jiān)聽程序當前無法識別連接描述符中請求服務 的解決方法" name=image_operate_52121295504778234 alt="ORA-12514 TNS 監(jiān)聽程序當前無法識別連接描述符中請求服務 的解決方法" src="http://s5.sinaimg.cn/middle/5007d1b1g9a412cc6e6d4&690" width=594 height=397 real_src="http://s5.sinaimg.cn/middle/5007d1b1g9a412cc6e6d4&690">
如果大家該步處理也沒有問題了,listener.ora 修改成功,并且重新啟動了oracle服務器,無論oracle客戶端還是PL/SQL都能夠成功連接數(shù)據(jù)庫了。
總結一下。當大家遇到“ORA-12514 TNS 監(jiān)聽程序當前無法識別連接描述符中請求服務”錯誤的解決步驟:
1、通過重啟服務的方式啟動數(shù)據(jù)庫,再次連接嘗試。
2、如果第一種方法不可行,我們采用第二種方法
轉載自:http://blog.sina.com.cn/s/blog_5007d1b10100oqo8.html