天天看點

Oracle監聽注冊和sqlnet,Oracle監聽的動态注冊與靜态注冊

Oracle監聽

介于Oracle的資料庫和用戶端之間的通道。因為資料庫本身不對外提供服務,是以需要通過監聽器來實作。

幾個相關的參數:

local_listener

db_domain

remote_listener

service_names

相關指令:

監聽指令:lsnrctl

參數:

1、start/stop 啟動/關閉服務

2、service 檢視目前已注冊的服務

3、status  檢視注冊服務的狀态

登入資料庫指令:sqlplus

為了使用監聽器,首先就要啟動監聽:

lsnrctl start

監聽注冊過程

一、資料庫根據service_names/db_domain兩個參數,建立服務名:

service_name1.db_domain ... service_nameN.db_domain

預設為資料庫的執行個體名。

二、将服務名注冊到監聽器,如果監聽器沒有啟動,則以:lsnrctl start啟動;注冊内容有服務名、端口(預設1521)等

三、監聽器對外提供已注冊的服務

四、外部用戶端通過該伺服器的1521端口連接配接到資料庫

監聽需要注冊服務,有兩種方式:

一種是靜态注冊。在啟動監聽的時候,根據監聽檔案($ORACLE_HOME/network/admin/listener.ora)直接注冊

這種方式不管資料庫是否啟動,都會注冊一個監聽服務。是以,通過這個服務去連接配接資料庫,有可能連接配接不上,也有可能

連接配接上。

其狀态顯示的是unknown,也就是說它此時是不知道資料庫是否可以連接配接的。

Service "PLSExtProc" has 1 instance(s).

Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...

一種是動态注冊。資料庫啟動後,自動會将服務名注冊到監聽器上。是以,通過這類服務去連接配接,是可以確定連接配接成功的。

動态注冊除了資料庫啟動時會自動注冊,也可以通過以下指令手工注冊:

alter system register;

如果不執行手工指令進行動态注冊,資料庫也會間隔1分鐘自動發起注冊。

其狀态顯示的是ready,也就是說此時已經準備好連接配接了。

Service "orcl" has 1 instance(s).

Instance "orcl", status READY, has 1 handler(s) for this service...

如果此時資料庫是關閉的,将不會有動态注冊的資訊顯示,而靜态注冊卻依然存在。

對于監聽檔案

如果不存在,資料庫會按照目前的服務名參數(service_names)中提供的服務名,會自動将服務注冊到監聽器上。

如果存在,則按照監聽檔案中提供的服務名進行注冊,資料庫也會發起注冊到監聽器上。此時動态注冊和靜态注冊會同時存在。

前面已經說到,注冊到監聽器上的服務名,是由service_names參數決定的,可以指定多個,以逗号分隔,如下:

SQL> show parameter service_names;

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

service_names                        string      orcl,wanghf

除了服務名,還可以為服務指定一個域名,可以讓将服務名讓各個不同的外部系統調用:

SQL> alter system set db_domain='abc.com' scope=memory;

alter system set db_domain='abc.com' scope=memory

*

ERROR at line 1:

ORA-02095: specified initialization parameter cannot be modified

SQL> alter system set db_domain='abc.com' scope=spfile;

從上面可以看到,這個參數的修改需要重新開機資料庫,而不能立即生效。

修改後,檢視監聽狀态資訊便顯示如下(部分):

Service "wanghf.abc.com" has 1 instance(s).

Instance "orcl", status READY, has 1 handler(s) for this service...

The command completed successfully

對于動态注冊,如果沒有特殊設定,則到目前為止已經可以正常連接配接和操作了。

但是,如果需要修改預設端口(1521),那該怎麼做?這個時候,local_listener參數就出現了。

可以按如下指令進行設定:

alter system set local_listener='(ADDRESS = (PROTOCOL=TCP)(HOST=localhost)(PORT=1522))';

其中,端口可以按要求做修改。設定此參數後,再手工注冊一下即可:

alter system register;

或者等待最多一分鐘,資料庫也會自動重新注冊。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12932950/viewspace-706407/,如需轉載,請注明出處,否則将追究法律責任。