數據庫實例向 Listener 發布服務名,客戶端僅需服務名即可連接,無需知曉 SID/主機/端口細節。啟動實例時默認註冊兩條信息:實例名、服務名。
實例啟動讀取 listener.ora 中 SID_LIST_LISTENER 區段:
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))
)
GLOBAL_DBNAME:對外發布的服務名 (可多個映射同一 SID)。SID_NAME:實例名 (註冊到 Listener 的實例標識)。實例啟動後 PMON 進程讀取初始化參數自動向 Listener 註冊:
INSTANCE_NAME:實例名 (缺省 = DB_NAME)。SERVICE_NAMES:服務名列表 (缺省 = DB_NAME.DB_DOMAIN 或 DB_UNIQUE_NAME),支援多值逗號分隔。驗證:LSNRCTL> SERVICES 輸出中 Service "orcl" has 1 instance(s). Instance "orcl", status READY... 即為動態註冊。
| 參數 | 缺省值 | 說明 |
|---|---|---|
| INSTANCE_NAME | DB_NAME | 實例標識,RAC 每節點不同 |
| SERVICE_NAMES | DB_NAME.DB_DOMAIN | 可多值,支援同一實例發布多服務名 |
| DB_DOMAIN | NULL | 若為 NULL,服務名 = DB_NAME |
| DB_UNIQUE_NAME | DB_NAME | Data Guard 環境區分主備 |
listener.ora 僅保留 LISTENER 地址配置,刪除 SID_LIST_LISTENER。INSTANCE_NAME、共享 SERVICE_NAMES,實現客戶端負載均衡 (LOAD_BALANCE=ON) 與故障轉移 (FAILOVER=ON)。LSNRCTL SERVICES 檢查 READY 狀態,異常時重啟 PMON (ALTER SYSTEM REGISTER) 強制重註冊。