淺談Oracle的監聽服務-靜態注冊
概述
動態服務是實例在服務器上啟動并運行時向偵聽器注冊的代表,而靜態服務(SID_LIST_LISTENER)可用于服務外部連接,無論是否在服務器上運行實例,連接非常有用到空閑或 NOMOUNT 數據庫。
根據Oracle 19c Advanced Features of Oracle Net Services,靜態服務的用例可以是以下任何一種:
- 外部過程調用。
- Oracle 異構服務。
- Oracle Data Guard。
- 從 Oracle Enterprise Manager Cloud Control 以外的工具遠程啟動數據庫。
- 與早于 Oracle8i 版本 2 (8.1) 的 Oracle 數據庫的連接。
1、添加單個靜態服務
啟用靜態服務注冊功能的配置非常簡單,只需在監聽器配置文件中添加一個名為SID_LIST_LISTENER的條目,該文件通常位于$ORACLE_HOME/network/admin/listener.ora,然后重新啟動監聽器。
[oracle@test ~]$ vi $ORACLE_HOME/network/admin/listener.ora
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME=ORCL))
)
基本上,靜態服務注冊至少需要知道兩項,ORACLE_HOME和ORACLE_SID。如您所見,我們在條目中提供了它們。
2、添加多個靜態服務
對于更多ORACLE_SID,您可以像這樣將SID_LIST附加到條目中。
[oracle@test ~]$ vi $ORACLE_HOME/network/admin/listener.ora
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME=ORCL))
(SID_DESC=
(ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME=SMALLDB))
)
3、 使用 GLOBAL_DBNAME
對于那些DB_DOMAIN不為空的數據庫,您應該在SID_LIST中添加更多信息GLOBAL_DBNAME。
[oracle@test ~]$ vi $ORACLE_HOME/network/admin/listener.ora
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME=ORCL))
(GLOBAL_DBNAME=orcl.example.com)
)
GLOBAL_DBNAME的格式如下:
<DB_UNIQUE_NAME>.<DB_DOMAIN>
在上述情況下,數據庫的DB_DOMAIN是example.com。請注意,如果您的DB_DOMAIN為空,則不必添加它。不要忘記重新啟動監聽器以立即生效。
4、Data Guard Broker 的靜態服務
您必須為數據保護代理添加一個特殊的靜態服務<DB_UNIQUE_NAME>_DGMGRL.<DB_DOMAIN>以啟用需要重新啟動實例而無需手動干預的代理操作,例如通過switchover在主數據庫和備用數據庫之間進行角色轉換。
[oracle@test ~]$ vi $ORACLE_HOME/network/admin/listener.ora
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME=ORCL))
(GLOBAL_DBNAME=ORCL_DGMGRL)
)
請注意,如果您的DB_DOMAIN為空,則不必添加它。所有服務名稱最好大寫。
服務名稱的狀態
讓我們看看他們在監聽器中的狀態。
[oracle@test ~]$ lsnrctl status
Services Summary
Service "ORCL" has 2 instance(s).
Instance "ORCL", status UNKNOWN, has 1 handler(s) for this service
Instance "ORCL", status READY, has 1 handler(s) for this service
Service "ORCLXDB" has 1 instance(s).
Instance "ORCL", status READY, has 1 handler(s) for this service
The command completed successfully
靜態服務ORCL的狀態被標記為UNKNOWN,而動態服務是READY,這意味著實例確實存在并準備好服務。