【listener】oracle靜態監聽和動態監聽 【轉載】
一、什麼是註冊?
pmon只會動態註冊port等於1521的監聽,否則pmon不能動態註冊listener,要想讓pmon動態註冊listener,需要設定local_listener引數。
LSNRCTL> start
啟動tnslsnr: 請稍候...
TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production
系統引數檔案為e:oracleproduct10.2.0db_1networkadminlistener.ora
寫入e:oracleproduct10.2.0db_1networkloglistener.log的日誌資訊
監聽: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=xys)(PORT=1522)))
正在連線到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xys)(PORT=1522)))
LISTENER 的 STATUS
------------------------
別名 LISTENER
版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ
ction
啟動日期 25-10月-2008 20:39:07
正常執行時間 0 天 0 小時 0 分 3 秒
跟蹤級別 off
安全性 ON: Password or Local OS Authentication
SNMP OFF
監聽程式引數檔案 e:oracleproduct10.2.0db_1networkadminlistener.o
ra
監聽程式日誌檔案 e:oracleproduct10.2.0db_1networkloglistener.log
監聽端點概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=xys)(PORT=1522)))
服務摘要..
服務 "orcl" 包含 1 個例程。
例程 "orcl", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "test" 包含 1 個例程。
例程 "test", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
命令執行成功
LSNRCTL> status
正在連線到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xys)(PORT=1522)))
LISTENER 的 STATUS
------------------------
別名 LISTENER
版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ
ction
啟動日期 25-10月-2008 20:39:07
正常執行時間 0 天 0 小時 0 分 6 秒
跟蹤級別 off
安全性 ON: Password or Local OS Authentication
SNMP OFF
監聽程式引數檔案 e:oracleproduct10.2.0db_1networkadminlistener.o
ra
監聽程式日誌檔案 e:oracleproduct10.2.0db_1networkloglistener.log
監聽端點概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=xys)(PORT=1522)))
服務摘要..
服務 "orcl" 包含 1 個例程。
例程 "orcl", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "test" 包含 1 個例程。
例程 "test", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
命令執行成功
SQL> alter system register; //手動註冊
系統已更改。
SQL>
LSNRCTL> status
正在連線到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xys)(PORT=1522)))
LISTENER 的 STATUS
------------------------
別名 LISTENER
版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ
ction
啟動日期 25-10月-2008 20:39:07
正常執行時間 0 天 0 小時 0 分 21 秒
跟蹤級別 off
安全性 ON: Password or Local OS Authentication
SNMP OFF
監聽程式引數檔案 e:oracleproduct10.2.0db_1networkadminlistener.o
ra
監聽程式日誌檔案 e:oracleproduct10.2.0db_1networkloglistener.log
監聽端點概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=xys)(PORT=1522)))
服務摘要..
服務 "orcl" 包含 2 個例程。
例程 "orcl", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
例程 "orcl", 狀態 READY, 包含此服務的 1 個處理程式...
服務 "orcl_XPT" 包含 1 個例程。
例程 "orcl", 狀態 READY, 包含此服務的 1 個處理程式...
服務 "test" 包含 1 個例程。
例程 "test", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
命令執行成功
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\\db_2)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = orcl1)
(SID_NAME = orcl1)
(ORACLE_HOME = G:\oracle\product\\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\\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對應的監聽
- 什麼是TNS?
TNS是Oracle Net的一部分,專門用來管理和配置Oracle資料庫和客戶端連線的一個工具,在大多數情況下客戶端和資料庫要通訊,必須配置TNS,當然在少數情況下,不用配置TNS也可以連線Oracle資料庫,比如通過JDBC.如果通過TNS連線Oracle,那麼客戶端必須安裝Oracle client程式.
- TNS有那些配置檔案?
TNS的配置檔案包括伺服器(安裝Oracle資料庫的機器)端和客戶端兩部分.伺服器有listener.ora,sqlnet.ora,tnsnames.ora,如果通過OCM(Oracle Connection Manage)和域名服務管理客戶端連線,伺服器端可能還包括cman.ora等檔案;客戶端有tnsnames.ora,sqlnet.ora.
listener.ora:監聽器配置檔案,成功啟動後是駐留在伺服器端的一個服務.什麼是監聽器?監聽器是用來偵聽客戶端的連線請求以及建立客戶端和伺服器端連線通道的一個服務程式.預設情況下Oracle在1521埠上偵聽資料庫連線請求.
sqlnet.ora:用來管理和約束或限制tns連線的配置,通過在該檔案中設定一些引數,可以管理TNS連線.根據引數作用的不同,需要分別在伺服器和客戶端配置.
tnsnames.ora:配置客戶端到伺服器端的連線服務,包括客戶端要連線到的伺服器和資料庫的配置資訊.
Oracle所有的TNS配置檔案都存放在
unix/linux: $ORACLE_HOME/network/admin
windows: %ORACLE_HOME%/network/admin
- TNS有那些配置工具?
我們可以手動配置,也可以通過Oracle Net Configuretion Assitant配置.
- OracleTNS配置流程
首先在Oracle server端安裝完成之後,因該先著手配置LISTENER,listenerr是進行Oracle通訊的首要元件,緊接著在客戶端安裝Oracle client,同時配置tnsnames.ora檔案.
- LISTENER(監聽器)配置
首先監聽器包括兩個部分:Oracle要監聽的地址、埠、通訊協議;Oracle要監聽的資料庫例項.非RAC環境下,LISTENER只能監聽本伺服器的地址和例項,RAC環境下,LISTENER還可以監聽遠端伺服器.每個資料庫最少要配置一個監聽器
LISTENER= (DESCRIPTION= (ADDRESS_LIST= (ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521)) (ADDRESS=(PROTOCOL=ipc)(KEY=extproc)) ) ) SID_LIST_LISTENER= (SID_LIST= (SID_DESC= (SID_NAME=plsextproc) (ORACLE_HOME=/oracle10g) (PROGRAM=extproc) ) (SID_DESC= (SID_NAME=mayp) (ORACLE_HOME=/oracle10g) ) )
listener部分配置了Oracle要監聽的地址資訊;SID_LIST_LISTENER部分配置了Oracle需要監聽的例項.
HOST引數即可以是hostname,也可以是ip地址.在一個多IP的伺服器上可以配置listener同時監聽多個地址.比如下面的配置:
LISTENER= (DESCRIPTION= (ADDRESS_LIST= (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.10)(PORT=1521)) (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.2.1) (PORT=1521)) ) )
或者可以配置多個監聽器,分別監聽不同的IP地址.
Oracle Net支援的通訊協議有:
1) TCP/IP 2) TCP/IP with SSL 3) Named Pipes 4) SDP
Oracle 9i引入了動態監聽服務註冊,指的是我們不需要在listener.ora中配置oracle要監聽的資料庫例項資訊,資料庫啟動的時候, PMON程式可以自動註冊當前資料庫例項到listener的監聽列表.也就是說上面的SID_LIST_LISTENER部分就不用配置了。使用動態監聽伺服器端必須滿足以下條件:
1) 資料庫必須設定INSTANCE_NAME和SERVICE_NAME引數;
2) 監聽器採用預設的TCP協議並使用1521埠進行監聽;
3)如果在配置監聽器時採用了其他通訊協議或者偵聽埠,進行以下設定告訴Oracle採用自定義監聽器:
1)通過LOCAL_LISTENER引數明確設定當前使用的監聽器,
2)在伺服器端都tnsnames.ora檔案中加入自定義監聽器的配置資訊.如果採用了OCM,那麼還可以在cman.ora中加入監聽器的配置資訊.
.LOCAL_LISTENER 可以通過ALTER SYSTEM動態設定.
ALTER SYSTEM SET LOCAL_LISTENER=’listener_alias’;
一個動態監聽配置的示例:
listener.ora檔案的配置:
LISTENER1 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.205.73)(PORT = 1421)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.200.64)(PORT = 1421)) (ADDRESS = (PROTOCOL = IPC)(KEY = extproc)) ) )
LOCAL_LISTENER引數的配置(因為這裡採用非1521的埠):
SQL> show parameter local_listener NAME TYPE VALUE ------------------------------------ ------------ ----------- local_listener string listener1
tnsnames.ora的配置:
LISTENER1= (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = dbtest)(PORT = 1421)(IP = FIRST)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.205.73)(PORT = 1421)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.200.64)(PORT = 1421)) ) mayp = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = dbtest)(PORT = 1421)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.200.64)(PORT = 1421)) ) (CONNECT_DATA = (SERVICE_NAME = mayp) (SERVER = DEDICATED) ) )
- TNS配置
我們說的TNS配置其實就是對tnsnames.ora檔案的配置,tnsnames.ora 有客戶端的配置,也有伺服器端的配置.客戶端和伺服器端配置的區別是因為伺服器端的配置跟LISTENER的配置相關.下面是一個簡單的配置示例:
mayp = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = dbtest)(PORT = 1421)) ) (CONNECT_DATA = (SERVICE_NAME = mayp) (SERVER = DEDICATED) ) )
同樣tnsnames.ora也包括兩部分,ADDRESS_LIST 部分包含了遠端資料庫伺服器的監聽地址資訊,也就是要告訴TNS遠端資料庫可通過乃些地址和CLIENT通訊;CONNECT_DATA 定義了CLIENT要連線的資料庫,還有資料庫的連線方式,(專用或共享)。在一個多ip環境中,TNS也可以配置多個遠端IP地址:
mayp = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = dbtest)(PORT = 1421)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.200.64)(PORT = 1421)) ) (CONNECT_DATA = (SERVICE_NAME = mayp) (SERVER = DEDICATED) ) )
一般在多IP環境中,還可以在TNS端配置load_balance和failover特性.這些特性在RAC環境下比較流行,load_balance特性可以讓client在連線資料庫是選擇任意地址進行連線,是各地址的連線均衡.failover開啟Oracle特有的 TAF特性,TAF為Transparent Application Failover的縮寫.load_balance可以在客戶端配置,也可以在伺服器端配置.下面是一個客戶端的配置示例:
mayp = (DESCRIPTION = (ADDRESS_LIST = (LOAD_BALANCE=ON) (FAILOVER=ON) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.205.73)(PORT = 1421)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.200.64)(PORT = 1421)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = MAYP) (FAILOVER_MODE = (TYPE = SELECT) (METHOD = BASIC) ) ) )
- sqlnet.ora的配置
sqlnet.ora是個很重要的配置,他可以控制和管理Oracle連線的屬性,根據引數作用的不同決定在客戶端配置還是在server端配置.sqlnet.ora的配置是全域性性的,也就說sqlnet.ora的配置是對所有的連線起作用,如果想對某個特殊的連線或服務進行約束或限制,可以在TNS配置相應引數.詳細引數可以參考:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27425054/viewspace-750395/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle靜態監聽Oracle
- 7、listener監聽
- Oracle靜態監聽中SID_NAME區分大小寫嗎?Oracle
- ORACLE之手動註冊監聽listener。alter system set local_listener="XXX"Oracle
- rac監聽不能動態註冊
- 【LISTENER】Oracle通過監聽連線緩慢分析Oracle
- day25-Listener監聽器
- [20190306]靜態監聽配置sid大小寫問題.txt
- [20180509]配置靜態監聽服務與ORA-12514
- oracle rac的scan監聽狀態Not All Endpoints RegisteredOracle
- Oracle 19C 監聽無法動態註冊例項Oracle
- Spring Boot 中動態管理 Kafka 監聽器Spring BootKafka
- Oracle啟動兩個監聽Oracle
- 動態監聽輸入框值的變化
- vue 動態監聽視窗大小變化事件Vue事件
- JMS監聽Oracle AQOracle
- 2.5.2. 監聽程式(listener)配置——2.5.2.3. 手工編輯監聽器配置檔案
- oracle監聽檔案listener.ora for 10g/11gOracle
- 【JS】在連續性監聽事件中,監聽當前狀態是否變化JS事件
- 監聽 watch props物件屬性監聽 或深度監聽物件
- listener_scan1.log、listener.log監聽日誌清理
- Oracle dblink監聽問題Oracle
- 6、oracle網路(監聽)Oracle
- 2.5.2. 監聽程式(listener)配置——2.5.2.1. netca
- 2.5.2. 監聽程式(listener)配置——2.5.2.2. netmgr
- 2.5.4. 測試Oracle net——2.5.4.2. 檢視監聽程式狀態Oracle
- Filter(過濾器)與Listener(監聽器)詳解Filter過濾器
- 屬性和監聽
- Oracle 監聽異常處理Oracle
- Oracle 建立非1521埠監聽Oracle
- Oracle 監聽投毒COST解決Oracle
- 一次Oracle監聽無法動態註冊處理過程排查分析Oracle
- Vue3.0的遞迴監聽和非遞迴監聽Vue遞迴
- 【LISTENER】Oracle分析連線監聽情況,判斷客戶端IP分佈Oracle客戶端
- 監聽div滾動高度
- watch監聽
- oracle rac scan監聽更改埠號Oracle
- oracle監聽不到例項服務Oracle
- Spring Boot 事件和監聽Spring Boot事件