oracle靜態(tài)監聽(tīng)和動(dòng)態(tài)監聽(tīng)辨析 收藏
一、靜態(tài)注冊
靜態(tài)注冊指實(shí)例啟動(dòng)時(shí)讀取listener.ora配置文件,將實(shí)例和服務(wù)注冊到監聽(tīng)程序。無(wú)論何時(shí)啟動(dòng)一個(gè)數據庫,默認都有兩條信息注冊到監聽(tīng)器中:實(shí)例和服務(wù)。
SID_LIST_LISTENER =
( SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = Ora8)
(SID_NAME = test)
)
)
LISTENER =
( DESCRIPTION =
(ADDRESS = (HOST = 192.168.0.88)(PROTOCOL = TCP)(PORT = 1522))
)
這是一個(gè)最簡(jiǎn)單的靜態(tài)監聽(tīng)配置文件,SID_LIST_LISTENER部分的GLOBAL_DBNAME表示向外提供的服務(wù)名,SID_NAME是提供注冊的實(shí)例。
在tnsnames.ora文件中的CONNECT_DATA部分,可分別選擇SERVICE_NAME=Ora8或SID=test為客戶(hù)端提供連接。
對于配置非1521監聽(tīng)端口,只能選擇靜態(tài)注冊方式。
二、動(dòng)態(tài)注冊
動(dòng)態(tài)注冊不需要顯示的配置listener.ora文件,實(shí)例啟動(dòng)的時(shí)候,PMON進(jìn)程根據instance_name,service_name參數將實(shí)例和服務(wù)動(dòng)態(tài)注冊到listerer中。如果沒(méi)有設定instance_name,將使用db_name初始化參數值。如果沒(méi)有設定service_names,將拼接db_name和db_domain參數值來(lái)注冊監聽(tīng)。
SQL> show parameter service_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
service_names string test
SQL> show parameter instance_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string test
LSNRCTL> status
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 10.2.0.1.0 - Production
Start Date 24-SEP-2008 16:50:01
Uptime 0 days 0 hr. 0 min. 33 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Log File /u01/app/oracle/product/10.2.0/db_1/network/log/listener.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=test1)(PORT=1521)))
Services Summary...
Service "test" has 1 instance(s).
Instance "test", status READY, has 1 handler(s) for this service...
Service "test_XPT" has 1 instance(s).
Instance "test", status READY, has 1 handler(s) for this service...
The command completed successfully
SQL> alter system set service_names='oratest' scope=both;
System altered.
SQL> alter system set instance_name='instest' scope=spfile;
System altered.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 96468992 bytes
Fixed Size 1217884 bytes
Variable Size 88083108 bytes
Database Buffers 4194304 bytes
Redo Buffers 2973696 bytes
Database mounted.
Database opened.
LSNRCTL> status
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 10.2.0.1.0 - Production
Start Date 24-SEP-2008 16:52:44
Uptime 0 days 0 hr. 1 min. 52 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Log File /u01/app/oracle/product/10.2.0/db_1/network/log/listener.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=test1)(PORT=1521)))
Services Summary...
Service "oratest" has 1 instance(s).
Instance "instest", status READY, has 1 handler(s) for this service...
Service "test" has 1 instance(s).
Instance "instest", status READY, has 1 handler(s) for this service...
Service "test_XPT" has 1 instance(s).
Instance "instest", status READY, has 1 handler(s) for this service...
The command completed successfully
可以看到,監聽(tīng)注冊的服務(wù)和實(shí)例已發(fā)生了相應的變化。同靜態(tài)監聽(tīng),這里也可以分別使用SERVICE_NAME=oratest或SID=instest來(lái)進(jìn)行客戶(hù)端的連接