ORA-12514: TNS: 監聽程式當前無法識別連線描述符中

東北胖子發表於2012-10-10

關於這個錯誤,有很多種情況,我知道有2種情況,以下是網上摘錄的:

1、近日在配置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中配置的資料庫服務。

 

2、可能是資料庫伺服器蹦了,這樣的話,光重啟服務是不行的,重啟機器也無濟於事。可以用下面的方法解決。

  開啟cmd視窗,輸入sqlplus / as sysdba;startup,完畢後即恢復正常,執行速度有點慢,耐心等待。

  該問題附帶錯誤可能是:

oracle not available
shared memory realm does not exist

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2317695/viewspace-746028/,如需轉載,請註明出處,否則將追究法律責任。

相關文章