ORA-12514: TNS: 監聽程序當前無法識別連接描述符中請求的服務

近日在配置Oracle 10G的流複製環境時,遇到一個問題,關閉數據庫(shutdown immediate)後,通過SQL Plus連接數據庫:conn sys/his@orc0 as sysdba,出現如下錯誤:

    ORA-12514: TNS: 監聽程序當前無法識別連接描述符中請求的服務

通過重啓服務的方式啓動數據庫,再次連接卻能成功登錄,也就是說在關閉數據庫狀態下無法連接服務器。

    開始以爲是系統環境變量Oracle_SID的配置問題,因爲機器有多個實例,一陣折騰後還是不能連接。後來查資料得知:

    Oracle9i以後,後臺進程PMON自動在監聽器中註冊在系統參數SERVICE_NAMES中定義的服務名,SERVICE_NAMES默認爲DB_NAME+DOMAIN_NAME。監聽配置文件listener.ora中可以不必指定監聽的服務名。但是,當數據庫處於關閉狀態下PMON進程沒有啓動,也就不會自動註冊監聽的實例名,所以使用sqlplus sys/his@orc0 as sysdba 會出現ORA-12514錯誤。

如果在listener.ora文件中指定監聽的實例名,則即使數據庫處於關閉狀態,仍然可以連接。

listener.ora

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (SID_NAME = PLSExtProc)

      (ORACLE_HOME = G:\oracle\product\10.2.0\db_1)

      (PROGRAM = extproc)

    )

   (SID_DESC =

    (GLOBAL_DBNAME = ORCL)

    (ORACLE_HOME = G:\oracle\product\10.2.0\db_1)  

    (SID_NAME = ORCL)

    )

  )

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST = zyk)(PORT = 1521))

    )

  )

 

以上粗體部件爲增加的內容,修改後重啓監聽服務後即可。

附:通過在lsnrctl中輸入set display verbose,然後再通過命令service查看,服務狀態爲READY表示PMON自動註冊的服務名,而UNKNOWN則表示該服務是手工在LISTENER.ORA中配置的數據庫服務。

發佈了25 篇原創文章 · 獲贊 19 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章