監聽器靜態註冊允許在 listener.ora 中預先定義服務,無需實例啟動即可被監聽器感知,常用於 Data Guard、GoldenGate 等場景。本文通過配置示例、狀態驗證及客戶端測試,徹底講透靜態註冊機制。
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ora11gbak) -- 自定義服務名,供客戶端連接使用
(ORACLE_HOME = /u01/app/ora11/product/11.2.0/dbhome_1)
(SID_NAME = ora11g)
)
(SID_DESC =
(GLOBAL_DBNAME = lixorabak) -- 另一自定義服務名
(ORACLE_HOME = /oracle)
(SID_NAME = lixora)
)
)
關鍵點:
GLOBAL_DBNAME可自定義,不必與數據庫db_name或service_names一致;SID_NAME必須與實例instance_name一致;ORACLE_HOME指向實例安裝路徑。
LSNRCTL> status
Services Summary...
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s)...
Service "lixora" has 1 instance(s).
Instance "lixora", status READY, has 1 handler(s)... -- 動態註冊
Service "lixorabak" has 1 instance(s).
Instance "lixora", status UNKNOWN, has 1 handler(s)... -- 靜態註冊
Service "ora11g" has 1 instance(s).
Instance "ora11g", status READY, has 1 handler(s)... -- 動態註冊
Service "ora11gbak" has 1 instance(s).
Instance "ora11g", status UNKNOWN, has 1 handler(s)... -- 靜態註冊
NAME TYPE VALUE
-----------------------------------------------------------
db_name string ora11g
db_unique_name string ora11g
global_names boolean FALSE
instance_name string ora11g
service_names string ora11g
動態註冊服務名默認取自 service_names;靜態註冊服務名由 GLOBAL_DBNAME 指定。
C:\> sqlplus system/oracle@10.80.18.241/ora11gbak
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
SQL> select * from dual;
DUMMY
-----
X
使用靜態註冊的服務名 ora11gbak 成功連接,驗證配置生效。
| 維度 | 動態註冊 | 靜態註冊 |
|---|---|---|
| 觸發方式 | 實例啟動後 PMON 自動註冊 | 監聽器讀取 listener.ora 靜態加載 |
| 狀態顯示 | READY | UNKNOWN |
| 實例未啟動時 | 服務不可見 | 服務可見,連接時由監聽器啟動專用進程 |
| 典型場景 | 常規業務連接 | Data Guard、GoldenGate、RMAN 備份、實例未啟動需連接 |
GLOBAL_DBNAME 建議命名規範:_<用途> ,如 ora11g_dg、ora11g_gg。listener.ora 後需 lsnrctl reload 或重啟監聽器生效。