您好,登錄后才能下訂單哦!
本篇內容主要講解“Oracle監聽器的靜態注冊與動態注冊區別是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Oracle監聽器的靜態注冊與動態注冊區別是什么”吧!
在運行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 altered
SQL>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監聽器的靜態注冊與動態注冊區別是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。