標籤:des style blog http io color ar os sp
在運行lsnrctl命令的status時,常會看到如下傳回值:
服務“test”包含1個常式。 常式"mydata",狀態 UNKOWN,包含此服務的一個處理常式。。。服務"a"包含1個常式。 常式"mydata",狀態 READY,包含此服務的一個處理常式。。。
這裡的,狀態UNKOWN即表明為靜態註冊(手動填寫參數);
狀態為READY的記錄,表明為動態註冊(listener.ora參數由PMON進程自動從參數檔案擷取);
一、靜態註冊
監聽配置中,資料庫服務中的全域資料庫名,可以寫任意內容,與資料庫無關,只要保證SID正確即可連上資料庫。
由於靜態註冊,參數是手動靜態添加,與資料庫無關。資料庫無法確認監聽是否正確配置。因此,lsnrctl中的status顯示狀態為unkown。即不保證能連通資料庫。
注意:靜態註冊監聽,用戶端在配置tnsnames.ora服務命名時,“(Oracle 8i或更高版本)服務名”裡填寫內容要與服務端靜態註冊監聽器時的全域資料庫名一致。否則,無法連通。
lsnrctl中顯示如下
服務“test”包含1個常式。 常式“mydata”,狀態UNKOWN,包含此服務的一個處理常式。。。
test即從監聽配置過程,資料庫服務中的“全域資料庫名”讀到的值(即設定檔中GLOBAL_DBNAME的值),“mydata”是從監聽配置中,資料庫服務中SID讀到的值(即SID_NAME的值)。
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = test) (ORACLE_HOME = /orahome/oracle/product/10.2.0/db_1) (SID_NAME = mydata) ) )
用戶端在配置tnsname時,服務名(SERVICE_NAME)即為test。否則,串連不到資料庫。
ABC = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.23)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME =
test) ) )
這裡的ABC,為服務命名。可以為任意值,在用戶端串連伺服器時,填寫的主機字串,即為此服務命名ABC。
二、動態註冊
1、預設的動態註冊
pmon在資料庫啟動到mount或open時,動態從參數檔案中讀取service_names值。service_names可以為多個值。
service_names預設為dbca建立資料庫時的全域資料庫名。
設定參數service_names為‘a,b,c‘,命令如下:
alter system set service_names=‘a,b,c‘;
則:
lsnrctl狀態如下:
服務“test”包含1個常式。 常式"mydata",狀態 UNKOWN,包含此服務的一個處理常式。。。服務"a"包含1個常式。 常式"mydata",狀態 READY,包含此服務的一個處理常式。。。服務"b"包含1個常式。 常式"mydata",狀態 READY,包含此服務的一個處理常式。。。服務"c"包含1個常式。 常式"mydata",狀態 READY,包含此服務的一個處理常式。。。服務 "mydata.ccddt.cn" 包含一個常式。 常式"mydata",狀態 READY, 包含此服務的一個處理常式。。。
以上服務名a, b, c, mydata.ccddt.cn都為READY,為動態註冊。
這裡多了最後一條"mydata.ccddt.cn",是PMON預設動態註冊到監聽器內的。
注意:不管參數service_names為何值,pmon都會自動以全域資料庫名(這裡為mydata.ccddt.cn)為服務名,動態註冊一個監聽。
預設情況下,若啟用動態註冊監聽,連接埠號碼必須為1521。若啟用其他連接埠的動態監聽註冊,必須要做相關配置。
通過查看v$session,狀態為SYS$USERS的串連為通過靜態註冊監聽串連到伺服器。
2、自訂連接埠的動態監聽註冊
若要啟用非預設連接埠1521的動態監聽註冊,預設狀態,Oracle不會進行動態註冊。要啟用動態註冊,必須設定local_listener參數。並在服務端配置tnsnames.ora指定監聽參數,或者直接通過修改local_listener指定監聽參數。步驟如下:
1)服務端
netmgr,配置監聽程式,監聽連接埠為1525(非預設連接埠)
儲存配置
2)、指定監聽參數
(1)法1:直接通過修改local_listener參數指定
SQL>alter system set LOCAL_LISTENER=‘(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.23)(PORT=1525))‘;
System altered
SQL>alter system register
System altered (2)法2:在Oracle伺服器端建立$ORACLE_HOME/network/admin/tnsnames.ora。解析檔案,位置並填入如下內容
mytest =(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS=(PROTOCOL=TCP)(HOST = 192.168.1.23)(PORT = 1525))
)
)
這裡的mytest也可以根據自己需要,修改為其他字串。如a或b等。設定參數,指定通過tnsnames.ora內的資訊指定監聽參數SQL>alter system set local_listener=mytest;
System alteredSQL>alter system register;
3、查看監聽器狀態
LSNRCTL> status
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.23)(PORT=1525)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 10.2.0.1.0 - Production
Start Date 15-MAR-2011 10:43:47
Uptime 0 days 0 hr. 0 min. 56 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /orahome/oracle/product/10.2.0/db_1/network/admin/listener.ora
Listener Log File /orahome/oracle/product/10.2.0/db_1/network/log/listener.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oraserver)(PORT=1525)))
Services Summary...
Service "a" has 1 instance(s).
Instance "mydata", status READY, has 1 handler(s) for this service...
Service "b" has 1 instance(s).
Instance "mydata", status READY, has 1 handler(s) for this service...
Service "c" has 1 instance(s).
Instance "mydata", status READY, has 1 handler(s) for this service...
Service "mydata" has 1 instance(s).
Instance "mydata", status READY, has 1 handler(s) for this service...
Service "mydataXDB" has 1 instance(s).
Instance "mydata", status READY, has 1 handler(s) for this service...
Service "mydata_XPT" has 1 instance(s).
Instance "mydata", status READY, has 1 handler(s) for this service...
The command completed successfully
oracle靜態與動態監聽