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