一個簡單的listener.ora
# listener.ora Network Configuration File: d:\app\zyd\product\11.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = d:\app\zyd\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:d:\app\zyd\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.160)(PORT = 1666))
)
)
ADR_BASE_LISTENER = d:\app\zyd
------------------------文件結束---------------------------
注意需防火牆允許1666端口。
lsnrctl status <服務器地址如: lsnrctl status 192.168.0.126如果遠程服務器監聽的是其它端口,那需要在本機的對遠程服務器監聽的連接配置,具體做法是有$ORACLE_HOME/network/admin/listener.ora文件中增加一個監聽器,監聽器的地址是遠程服務器址,端口是遠程的端口,如:LISTENER126 =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.126)(PORT = 1522)))表示連接到192.168.0.126的1522監聽端口。然後用lsnrctl status LISTENER126就可顯示遠程服務器的監聽狀態了。同理,可以用這種方法啟動和停止遠程服務器的監聽。
在TCP/IP網絡中,(IP,端口號)可以唯一確定一個進程的地址,oracle監聽器也是一個TCP/IP網絡中的進程,默認的端口號是1521。
oracle監聽器進程可以同時為多個數據庫服務。
客戶端進程通過listener.ora 獲得oracle監聽器進程的(IP,端口)
oracle監聽器進程通過1521端口接收所有客戶聯接請求,並從客戶聯接請求中分理出客戶希望聯接的數據庫進程的相關信息,比如SID,SERVICE_NAME,DB_NAME。根據這些信息,通過查詢一個本地文件(tnsnames.ora),oracle監聽器進程可以得到客戶想要聯接的數據庫主進程的相關連結信息,並把這些信息返回給客戶端,客戶端根據返回的聯接信息,重新聯接到對應的數據庫主進程。
通過查詢本地配置文件tnsnames.ora,一個oracle監聽器進程就可以同時為多個數據庫(主進程)服務。