【監聽】動態註冊和靜態註冊
不管是動態監聽還是靜態監聽,前提就是lsnrctl start listenername要先執行,區別就是靜態監聽是監聽啟動時讀取到的監聽配置檔案中(除預設監聽以外)的資訊,動態監聽就是資料庫例項啟動時或每隔一分鐘PMON註冊到預設監聽中的資訊
什麼是註冊
註冊就是將資料庫作為一個服務註冊到監聽程式。客戶端不需要知道資料庫名和例項名,只需要知道該資料庫對外提供的服務名或SID就可以申請連線到資料庫。這個服務名或SID可能與例項名一樣,也有可能不一樣。
在資料庫伺服器啟動過程中,資料庫伺服器會向監聽程式註冊相應的服務(無論何時啟動一個資料庫,預設地都有兩條資訊註冊到監聽器中:service_names和instance_name,即lsnrctl status時顯示的Service和Instance)
相當於是這樣:在資料庫伺服器和客戶端之間有一監聽程式(Listener),在監聽程式中,會記錄相應資料庫對應的服務名(一個資料庫可能對應有多個服務名),當客戶端需要連線資料庫時,只需要提供服務名,就可以建立客戶端和伺服器之間的連線。
動態註冊:
資料庫例項啟動的時候PMON程式根據spfile.ora中的值將instance_name,service_names兩個引數值註冊到預設監聽中(不管有沒有listener.ora檔案,預設監聽都是存在的)。不管什麼時候PMON程式都會每隔一分鐘根據spfile.ora中的值將instance_name,service_names兩個引數值註冊到預設監聽中
如果lsnrctl stop後再lsnrctl start,資料庫例項啟動的時候動態註冊的資訊會丟失,不過一分鐘後恢復正常,因為每隔一分鐘,PMON程式會向監聽進行動態註冊,就正常了
動態註冊預設只註冊到預設的監聽器上(host是hostname不是ip、埠是1521、協議是TCP,關於監聽器名稱則隨便不一定非得是LISTENER),如果需要向非預設監聽註冊,則需要配置local_listener引數,配置該引數值是監聽器的名稱,比如配置為lsn2,對應埠123456,則動態註冊就不會再動態到1521,就註冊到123456了
動態註冊發生的時間:每隔一分鐘(時間間隔是1分鐘的前提是服務端已經啟動)或資料庫例項啟動的時候
所以動態註冊,一般先啟動監聽程式再啟動oracle服務,因為oracle伺服器啟動時會動態註冊,如果先啟動oracle,再啟動監聽程式,則隔一分鐘再看看
一個動態註冊的案例
lsnrctl status發現沒有動態註冊
發現預設監聽配置的host=伺服器名稱
檢視ifconfig發現ip是192.168.189.128
而/etc/hosts中伺服器名稱對應的ip是192.168.182.128
至此找到原因,把/etc/hosts中182改為189即可
說明:動態註冊是把資料庫資訊當作服務註冊到監聽中的host和port中,如果host中配置的資訊為ip,但是實際伺服器上不存在這個ip則無法動態註冊,如果host中配置的是伺服器名稱,而伺服器名稱不存在或伺服器名稱在/etc/hosts中對應的ip實際上不存在則無法動態註冊
靜態註冊:
監聽程式啟動時讀取listener.ora檔案的配置,將listener.ora檔案內容中的例項名(SID_NAME)和服務名(GLOBAL_DBNAME,如果listener.ora沒有GLOBAL_DBNAME,則預設GLOBAL_DBNAME=SID_NAME)註冊到監聽器中(監聽器的名字存在listener.ora檔案中)
靜態註冊時,listener.ora中的GLOBAL_DBNAME向外提供服務名,listener.ora中的SID_NAME提供註冊的例項名。
採取靜態註冊方法時,listener.ora中的內容如下:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = i-122F6351)(PORT = 1521))
)
)
LISTENER2 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST =
localhost)(PORT = 1521))
)
)
SID_LIST_LISTENER2 =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /opt/oracle/product/11.2.0/db_1)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /opt/oracle/product/11.2.0/db_1)
(SID_NAME = orcl)
)
(SID_DESC =
(GLOBAL_DBNAME = orcl1)
(ORACLE_HOME = /opt/oracle/product/11.2.0/db_1)
(SID_NAME = orcl)
)
)
ADR_BASE_LISTENER = D:\oracle\product\10.2.0\db_1
該檔案表明資料庫例項名為orcl,預設監聽為listener,靜態監聽listener2則向外提供了兩個服務:orcl和orcl1
靜態監聽如果有非預設監聽器listener以外的其他名稱的監聽器,則操作方式如下,前提是兩個監聽中的port和key不能一樣,否則也只能啟動一個。
lsnrctl start listenername
lsnrctl status listenername
lsnrctl stop listenername
Lsnrctl status後Service的值--對於動態註冊和靜態註冊,Service有不同的取值
對於動態註冊
(優先順序別service_names.db_domain=db_unique_name.db_domain>db_name.db_domain)
如果有引數值service_names\db_unique_name,
則拼接service_names、db_unique_name引數值和db_domain引數值註冊到監聽,即兩個值
如果只有引數值service_names,且值和db_name值不一樣
則拼接service_names、db_name引數值和db_domain引數值註冊到監聽,即兩個值
如果只有引數值db_unique_name,且值和db_name值不一樣
則拼接db_unique_name引數值和db_domain引數值註冊到監聽,即一個值
對於靜態註冊:
Service的值是GLOBAL_DBNAME(如果listener.ora檔案沒有的話,預設使用listener.ora檔案的SID_NAME)
lsnrctl start時(一般先讀本使用者下的listener.ora檔案,發現沒有listener.ora檔案就不讀這個檔案)只啟動監聽名稱為listener、埠為1521、tcp協議、host為hostname的監聽。
沒有listener.ora檔案時比預設listener.ora檔案只是少了一個PROTOCOL = IPC的外部程式呼叫介面,為了規範配置,我們還是不刪除listener.ora檔案,讓它預設保留ipc和tcp協議
實驗過,沒有listener.ora檔案時lsnrctl start時預設的監聽器名稱就是LISTENER,內容為如下
Listening Endpoints Summary..
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=i-122F6351)(PORT=1521)))
所以可以說listener.ora檔案裡面配置的內容主要是靜態監聽,需要listener.ora檔案主要為了新增靜態監聽global_dbname\sid_name(SID_LIST_LISTENER)和新增額外的監聽器名稱
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30496894/viewspace-1849542/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle監聽靜態註冊和動態註冊Oracle
- Oracle監聽的靜態註冊和動態註冊Oracle
- oracle監聽動態註冊與靜態註冊Oracle
- Oracle監聽的動態註冊與靜態註冊Oracle
- oracle監聽動態註冊與靜態註冊[轉帖]Oracle
- oracle監聽之動態和靜態註冊Oracle
- 動態註冊和靜態註冊
- 靜態註冊和動態註冊
- oracle監聽器的靜態和動態註冊Oracle
- oracle監聽器動態註冊於靜態註冊的區別Oracle
- 監聽動態註冊
- 動態註冊監聽
- 動態監聽註冊
- 動態和靜態監聽註冊-小魚的理解
- Oracle listener靜態註冊和動態註冊Oracle
- oracle的靜態註冊和動態註冊Oracle
- ORACLE 動態註冊,靜態註冊,多個監聽,一個監聽多個埠配置Oracle
- 轉載:oracle監聽器的靜態和動態註冊Oracle
- 靜態註冊和動態註冊總結(zt)
- listener靜態註冊和動態註冊總結
- rac監聽動態註冊
- 動態註冊監聽Listener
- Oracle 動態監聽註冊Oracle
- Oracle 靜態監聽註冊詳解Oracle
- Oracle listener靜態註冊和動態註冊總結Oracle
- Oracle Listener 動態註冊 與 靜態註冊Oracle
- Oracle Listener 動態註冊與靜態註冊Oracle
- Oracle監聽器的靜態註冊與動態註冊,以及DB_DOMAIN問題OracleAI
- rac監聽不能動態註冊
- oracle 監聽器動態與靜態註冊服務_listenerOracle
- oracle listener 靜態和動態註冊Oracle
- Oracle動態監聽註冊測試Oracle
- HPUX 監聽無法動態註冊UX
- listener的靜態註冊與動態註冊詳述
- srvctl新增新的監聽和埠並靜態註冊
- 【原創】Oracle的動態監聽註冊Oracle
- oracle監聽【非1521埠】動態註冊Oracle
- 【RAC】srvctl管理工具新增新監聽和靜態註冊