資料庫啟動時將自身作為服務註冊至監聽器。客戶端只需知道服務名即可連線,無須知悉資料庫名或實例名。服務名可與實例名同或不同。
實例啟動時讀取 listener.ora 設定,將實例與服務註冊至監聽器。GLOBAL_DBNAME 對外提供服務名,SID_NAME 提供實例名。
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = ...) (PROGRAM = extproc))
(SID_DESC = (GLOBAL_DBNAME = orcl) (ORACLE_HOME = ...) (SID_NAME = orcl))
(SID_DESC = (GLOBAL_DBNAME = orcl1) (ORACLE_HOME = ...) (SID_NAME = orcl))
)
單實例 orcl,對外提供 orcl、orcl1 兩個服務。
PMON 進程依 init.ora 的 instance_name、service_names 參數動態註冊至監聽器。
instance_name,未設定則取 db_nameservice_names,未設定則組合 db_name.db_domainservice_names 以逗號指定多服務,適合共享伺服器架構SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = ...) (PROGRAM = extproc))
)
僅保留外部程序註冊,資料庫服務由 PMON 動態註冊。
local_listenerservice_names、instance_name,監聽器重啟時 PMON 可快速完成再註冊lsnrctl status
UNKNOWN = 靜態註冊(監聽器不知實例狀態,連線請求時才檢查)READY / BLOCKED = 動態註冊(監聽器即時掌握實例狀態,支援連線回退與負載平衡)