淺談Oracle的監(jiān)聽服務(wù)-靜態(tài)注冊
概述
動態(tài)服務(wù)是實例在服務(wù)器上啟動并運行時向偵聽器注冊的代表,而靜態(tài)服務(wù)(SID_LIST_LISTENER)可用于服務(wù)外部連接,無論是否在服務(wù)器上運行實例,連接非常有用到空閑或 NOMOUNT 數(shù)據(jù)庫。
根據(jù)Oracle 19c Advanced Features of Oracle Net Services,靜態(tài)服務(wù)的用例可以是以下任何一種:
- 外部過程調(diào)用。
- Oracle 異構(gòu)服務(wù)。
- Oracle Data Guard。
- 從 Oracle Enterprise Manager Cloud Control 以外的工具遠(yuǎn)程啟動數(shù)據(jù)庫。
- 與早于 Oracle8i 版本 2 (8.1) 的 Oracle 數(shù)據(jù)庫的連接。
1、添加單個靜態(tài)服務(wù)
啟用靜態(tài)服務(wù)注冊功能的配置非常簡單,只需在監(jiān)聽器配置文件中添加一個名為SID_LIST_LISTENER的條目,該文件通常位于$ORACLE_HOME/network/admin/listener.ora,然后重新啟動監(jiān)聽器。
[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))
)
基本上,靜態(tài)服務(wù)注冊至少需要知道兩項,ORACLE_HOME和ORACLE_SID。如您所見,我們在條目中提供了它們。
2、添加多個靜態(tài)服務(wù)
對于更多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不為空的數(shù)據(jù)庫,您應(yīng)該在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>
在上述情況下,數(shù)據(jù)庫的DB_DOMAIN是example.com。請注意,如果您的DB_DOMAIN為空,則不必添加它。不要忘記重新啟動監(jiān)聽器以立即生效。
4、Data Guard Broker 的靜態(tài)服務(wù)
您必須為數(shù)據(jù)保護(hù)代理添加一個特殊的靜態(tài)服務(wù)<DB_UNIQUE_NAME>_DGMGRL.<DB_DOMAIN>以啟用需要重新啟動實例而無需手動干預(yù)的代理操作,例如通過switchover在主數(shù)據(jù)庫和備用數(shù)據(jù)庫之間進(jìn)行角色轉(zhuǎn)換。
[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為空,則不必添加它。所有服務(wù)名稱最好大寫。
服務(wù)名稱的狀態(tài)
讓我們看看他們在監(jiān)聽器中的狀態(tài)。
[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
靜態(tài)服務(wù)ORCL的狀態(tài)被標(biāo)記為UNKNOWN,而動態(tài)服務(wù)是READY,這意味著實例確實存在并準(zhǔn)備好服務(wù)。