在有Oracle Listener的動態註冊之前,採用的是靜態註冊,所謂靜態註冊是指Oracle執行個體在啟動時,讀取listener.ora裡的配置,然後註冊到Listener,它主要有兩個缺點:
1. Listener不知道Oracle執行個體的即時狀態
2. listener.ora裡的配置比較麻煩,常需要手動修改。
動態註冊
所謂動態註冊是指Oracle執行個體啟動後,會通過pmon進程即時的把執行個體狀態和參數(instance_name,service_name)同步給Listener,其中參數instance_name如果為空白,則預設為SID,參數service_name如果為空白,則預設為db_name.db_domain
有了動態註冊之後,我們甚至不需要listener.ora,這時命令lsnrctl start將啟動預設的Listener(TCP協議、1521連接埠,Service和Instance分別來自參數service_name和instance_name。
這裡有一個小tip:pmon並不是真正即時同步Oracle執行個體至Listener,而是隔幾十秒,但你可以通過alter system register命令手動同步。
下面我們來看一個例子:
在這個例子裡,我們沒有配置listener.ora,listener.ora啟動後的狀態如下:
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date 18-SEP-2013 16:58:01
Uptime 0 days 0 hr. 12 min. 54 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Log File /opt/oracle/diag/tnslsnr/data/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.15)(PORT=1521)))
Services Summary...
Service "orcl.localdomain" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
The command completed successfully
instance_name和service_names參數配置如下:
SQL>show parameter instance_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string orcl
SQL>show parameter service_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
service_names string orcl.localdomain
從上面我們可以發現:Listener裡的Service、Instance是和instance_name、service_names參數相對應。這裡需要特別說明的是:參數service_names可以指定多個service_name,它們之間用逗號隔開。
在用戶端tnsnames.ora裡我們可以設定SID等於instance_name:
test =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.15)(PORT = 1521))
)
(CONNECT_DATA =
(sid = orcl)
)
)
也可以設定service_name等於services_names中的任意一個:
test =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.15)(PORT = 1521))
)
(CONNECT_DATA =
(service_name = orcl.localdomain)
)
)
Oracle監聽的動態註冊和靜態註冊
Oracle DBA之監聽的靜態註冊與動態註冊
Oracle Listener 動態註冊 與 靜態註冊
Linux/Unix shell 監控Oracle監聽器(monitor Listener)
Oracle一個執行個體配置多個Listener或多個連接埠