pmon只會動態註冊port等於1521的監聽,否則pmon不能動態註冊listener,要想讓pmon動態註冊listener,需要設置local_listener參數。 LSNRCTL> start TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production 正在連接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xys)(PORT=1522))) 監聽端點概要... 監聽端點概要... SQL> alter system register; //手動註冊 系統已更改。 SQL> 監聽端點概要...
local_listener是用在當使用非默認的端口時,PMON進程能夠進行動態註冊。 我們可以這麼設置該值形如,local_listener='(ADDRESS = (PROTOCOL = TCP)(HOST = hostname or ip)(PORT = 1521))' 這裏說下該值的一個注意點: 先看下listener.ora的配置吧 SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = G:\oracle\product\10.2.0\db_2) (PROGRAM = extproc) ) (SID_DESC = (GLOBAL_DBNAME = orcl1) (SID_NAME = orcl1) (ORACLE_HOME = G:\oracle\product\10.2.0\db_2) (PROGRAM = orcl1) ) )
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) (ADDRESS = (PROTOCOL = TCP)(HOST = fztxt)(PORT = 1521)) ) )
(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = fztxt)(PORT = 1525)) )
SID_LIST_TXT_LIS = (SID_LIST = (SID_DESC = (SID_NAME = orcl1) (ORACLE_HOME = G:\oracle\product\10.2.0\db_2) (PROGRAM = orcl1) ) ) 我們這麼設置listener.ora,這樣,就有了靜態的監聽了,包括listener和txt_lis,我們可以通過lsnrctl start txt_lis來啓動這個監聽,也可以通過lsnrctl status txt_lis來觀察這個監聽的狀態。 當我們設置了listener.ora後,txt_lis還不能被客戶端訪問,那怎麼使這個生效呢,這時我們就要PMON來進行動態註冊,這就需要local_listener了。 Local_listener有兩種設置: 1、如果我們設置 Alter system set local_listener=’(ADDRESS = (PROTOCOL = TCP)(HOST = fztxt)(PORT = 1525))’。那麼,我們只要alter system register;強制PMON註冊,就可以實現動態註冊了。 2、接下來,來討論另外一個local_listener的設置: Alter system set local_listener=txt_lis; 那麼,PMON能識別出來嗎? 答案是不能的,因爲PMON不知道去哪裏解析這個txt_lis。 那有一種情況:如果我們是在數據宕機的時候修改的local_listener=txt_lis;那這時啓動數據庫,則會出現: SQL> startup ORA-00119: invalid specification for system parameter LOCAL_LISTENER ORA-00132: syntax error or unresolved network name 'TXT_LIS' 這是因爲: 要在服務器上的tnsnames.ora裏做設置,來映射listener1 啓動時它會去服務端的tnsnames.ora裏txt_lis的含義,找不到,解析不了,則會報ora-00132的錯誤。 那服務端的tnsnames.ora要怎麼設置呢? Txt_lis=(ADDRESS = (PROTOCOL = TCP)(HOST = fztxt)(PORT = 1525)) 加上這個就OK了。 接下來我們再做另外的測試: SQL> alter system set local_listener='asdf'; alter system set local_listener='asdf' * 第1行出現錯誤: ORA-02097:無法修改參數,因爲指定的值無效 ORA-00119:系統參數LOCAL_LISTENER的說明無效 ORA-00132:語法錯誤或無法解析的網絡名稱'asdf' 說明:local_listener的值不能隨便設置,要在listener.ora上有相應的標識 以上是local_listener的設置問題。 另外,就像上面批註裏面說的,txt_lis註冊的實例和服務跟默認的監聽一樣,那隻要我們設置了alter system set local_listener=…… 這時,我們listener status ,也就是默認的監聽的狀態,我們發現,動態監聽沒有了,剩下的靜態監聽
可以知道,默認的監聽就只有靜態監聽了,動態監聽都在等待local_listener所對應的監聽了。PMON真是見風使舵啊。 更進一步,我們發現,只要我們成功設置了local_listener的值,包括實例和服務名不和默認監聽一樣,PMON都會在等待local_listener對應的監聽 |