近日在配置Oracle 10G的流複製環境時,遇到一個問題,關閉數據庫(shutdown immediate)後,經過SQL Plus鏈接數據庫:conn sys/his@orc0 as sysdba,出現以下錯誤:html
ORA-12514: TNS: 監聽程序當前沒法識別鏈接描述符中請求的服務sql
經過重啓服務的方式啓動數據庫,再次鏈接卻能成功登陸,也就是說在關閉數據庫狀態下沒法鏈接服務器。數據庫
開始覺得是系統環境變量Oracle_SID的配置問題,由於機器有多個實例,一陣折騰後仍是不能鏈接。後來查資料得知:服務器
Oracle9i之後,後臺進程PMON自動在監聽器中註冊在系統參數SERVICE_NAMES中定義的服務名,SERVICE_NAMES默認爲DB_NAME+DOMAIN_NAME。監聽配置文件listener.ora中能夠沒必要指定監聽的服務名。可是,當數據庫處於關閉狀態下PMON進程沒有啓動,也就不會自動註冊監聽的實例名,因此使用sqlplus sys/his@orc0 as sysdba 會出現ORA-12514錯誤。oracle
若是在listener.ora文件中指定監聽的實例名,則即便數據庫處於關閉狀態,仍然能夠鏈接。spa
listener.orahtm
SID_LIST_LISTENER =blog
(SID_LIST =進程
(SID_DESC =ci
(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中配置的數據庫服務。