方法
一臺數(shù)據(jù)庫服務(wù)器一般只需要一個,一個可以監(jiān)聽多個數(shù)據(jù)庫,也可以一個數(shù)據(jù)庫多個監(jiān)聽,當然也可以為每個數(shù)據(jù)庫配置專門的,這要根據(jù)具體的情況來配置。事實上,配置監(jiān)聽就是將數(shù)據(jù)庫服務(wù)的注冊信息寫入指定文件,那樣每次啟動監(jiān)聽的時候就會自動讀取數(shù)據(jù)庫的相關(guān)信息。我們把實例將數(shù)據(jù)庫將所提供的服務(wù)名及相關(guān)信息告知listener的過程稱之為服務(wù)注冊,注冊通常包括數(shù)據(jù)庫的服務(wù)名、實例名、SERVER模式、端口號等。我們可以通過Lsnrctl命令查看監(jiān)聽的運行情況和數(shù)據(jù)庫的狀態(tài):
Ready:代表實例可以接受連接請求,是動態(tài)注冊的監(jiān)聽;
Blocked:實例目前不能接受連接請求;
Unknown:靜態(tài)注冊的監(jiān)聽。
在運行l(wèi)snrctl命令的status時,常會看到如下返回值(下圖紅色部分):
結(jié)果顯示,狀態(tài)UNKOWN和READY的監(jiān)聽記錄,它們分別是靜態(tài)和動態(tài)注冊的監(jiān)聽。先來說一下動態(tài)注冊,動態(tài)注冊是在instance啟動的時候,由PMON進程根據(jù)init.ora中的instance_name、service_names兩個參數(shù)將實例和服務(wù)動態(tài)注冊到listener中。如果沒有定義service_name,數(shù)據(jù)庫會根據(jù)db_name和db_domain組成的一個全局數(shù)據(jù)庫名成注冊到中,instance_name是實例名稱,一般和SID值一樣。
動態(tài)注冊不必須顯式的配置在listener.ora文件中,當然在listener.ora配置如圖7-4綠色部分的內(nèi)容來實現(xiàn)動態(tài)注冊也無妨,DBA還可以通過SQL語句—“alter system register;”強制PMON向動態(tài)注冊。在Oracle 9i之后,不需要任何配置即可實現(xiàn)動態(tài)注冊,實例啟動后會自動在本地主機默認的號端口上查找,并進行注冊。
說明:在數(shù)據(jù)庫服務(wù)器啟動過程中,數(shù)據(jù)庫服務(wù)器會向監(jiān)聽程序注冊相應(yīng)的服務(wù)(無論何時啟動一個數(shù)據(jù)庫,默認地都有兩條信息注冊到中:數(shù)據(jù)庫服務(wù)器對應(yīng)的實例和服務(wù)。)相當于是這樣:在數(shù)據(jù)庫服務(wù)器和客戶端之間有一監(jiān)聽程序(Listener),在監(jiān)聽程序中,會記錄相應(yīng)數(shù)據(jù)庫對應(yīng)的服務(wù)名(一個數(shù)據(jù)庫可能對應(yīng)有多個服務(wù)名),當客戶端需要連接數(shù)據(jù)庫時,只需要提供服務(wù)名,就可以建立客戶端和服務(wù)器之間的連接。
注意:Oracle_SID從ORACLE 10G開始,參數(shù)文件不再記錄INSTANCE_NAME,此時INSTANCE_NAME動態(tài)從系統(tǒng)ORACLE_SID獲得來保持一致。
事實上,我們常說的Oracle數(shù)據(jù)庫監(jiān)聽配置,一般都是指靜態(tài)注冊—將實例的相關(guān)信息手動告知listener,即將數(shù)據(jù)庫的相關(guān)信息配置到listener.ora中。在實例啟動時就會讀取listener.ora文件的配置,listener.ora中的GLOBAL_DBNAME向外提供服務(wù)名,listener.ora中的SID_NAME提供注冊的實例名,將實例和服務(wù)注冊到監(jiān)聽程序,靜態(tài)配置最大的問題就是無法知道數(shù)據(jù)庫真正的狀態(tài)。
說明:如果關(guān)閉數(shù)據(jù)庫后在查看監(jiān)聽會發(fā)現(xiàn)動態(tài)注冊的自動消失了只有靜態(tài)注冊的在,動態(tài)注冊機制不需要對做任何額外配置,而結(jié)果卻比靜態(tài)注冊更準確,靜態(tài)注冊機制需要針對每個數(shù)據(jù)庫都做額外配置,但是結(jié)果卻不準確。關(guān)于監(jiān)聽的配置,可以使用網(wǎng)絡(luò)配置助手(Oracle Net Configuration Assistant)或網(wǎng)絡(luò)管理器(Oracle Net Manager),也可以通過“f:app
npruduct11.2.0dbhome_1
etworkadminlistener.ora”直接手動配置。
1)Net Configuration Assistant,主要為用戶提供Oracle數(shù)據(jù)庫的監(jiān)聽程序、命名方法、本地NET服務(wù)名和目錄配置,網(wǎng)絡(luò)配置助手以向?qū)У男问匠霈F(xiàn),使配置過程簡單,適合初學者,根據(jù)向?qū)л斎氡O(jiān)聽程序名稱→網(wǎng)絡(luò)協(xié)議→主機→端口,完成配置。
2)Net Manager和Net Configuration Assistant功能相似,主要內(nèi)容為本地服務(wù)命名和監(jiān)聽程序配置,但Net Manager將所有配置步驟集合到同一界面,更適合熟練者進行操作。根據(jù)界面的提示,點擊“監(jiān)聽程序”,再點擊左側(cè)欄的“+”添加監(jiān)聽,按步驟輸入:監(jiān)聽程序名稱→網(wǎng)絡(luò)協(xié)議→主機→端口,完成配置。
3)通過“$ORACLE_HOME/network/admin/listener.ora”(Linux系統(tǒng)下)“$ORACLE_HOME11.2.0dbhome_1 etworkadminlistener.ora”(Windows系統(tǒng))直接手動配置,在listener.ora加入下圖紅色部分的內(nèi)容。
說明:可以通過查看listener.ora文件判斷監(jiān)聽的注冊方式,如果[監(jiān)聽名]和SID_LIST_[監(jiān)聽名]配置是成對出現(xiàn)的,這代表是靜態(tài)監(jiān)聽;如果listener.ora文件只有[監(jiān)聽名]的配置,監(jiān)聽就變成動態(tài)監(jiān)聽了,這時它需要由oracle數(shù)據(jù)庫的pmon主動向監(jiān)聽注冊,告知監(jiān)聽有這么一個服務(wù)的存在。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com