在使用Oracle數(shù)據(jù)庫時,開啟監(jiān)聽服務(wù)是非常必要的一個步驟。監(jiān)聽服務(wù)可用于監(jiān)聽數(shù)據(jù)庫客戶端連接請求,并將請求轉(zhuǎn)發(fā)給數(shù)據(jù)庫實例。在沒有開啟監(jiān)聽服務(wù)的情況下,數(shù)據(jù)庫客戶端是無法連接到數(shù)據(jù)庫實例的。
在Windows系統(tǒng)下,Oracle數(shù)據(jù)庫的監(jiān)聽服務(wù)通常是隨著數(shù)據(jù)庫的安裝一起自動啟動的。但是,在某些情況下,因為一些問題,監(jiān)聽服務(wù)可能會停止工作,這時就需要手動啟動或重啟監(jiān)聽服務(wù)了。
Oracle數(shù)據(jù)庫的監(jiān)聽服務(wù)是由一個可執(zhí)行文件 tnslistener.exe 來實現(xiàn)的。可以使用以下命令來啟動或重啟監(jiān)聽服務(wù):
lsnrctl start //啟動監(jiān)聽服務(wù) lsnrctl stop //停止監(jiān)聽服務(wù) lsnrctl reload //重啟監(jiān)聽服務(wù)
在啟動或重啟監(jiān)聽服務(wù)之前,需要先修改監(jiān)聽服務(wù)的配置文件 listener.ora,以便正確地配置監(jiān)聽服務(wù)。listener.ora 文件通常位于 $ORACLE_HOME/network/admin 目錄下。
listener.ora 文件的內(nèi)容如下:
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = orcl) (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1) (SID_NAME = orcl) ) (SID_DESC = (GLOBAL_DBNAME = orcl2) (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1) (SID_NAME = orcl2) ) )
上面的配置文件中,DESCRIPTION_LIST 中定義了監(jiān)聽服務(wù)監(jiān)聽的地址和端口號。SID_LIST_LISTENER 中定義了多個數(shù)據(jù)庫實例的信息。其中,GLOBAL_DBNAME 表示一個全局名稱,ORACLE_HOME 表示數(shù)據(jù)庫的安裝目錄,SID_NAME 表示數(shù)據(jù)庫實例的 SID 名稱。
舉例來說,假設(shè)我們要監(jiān)聽一個名為 orcl 的數(shù)據(jù)庫實例,那么配置文件的內(nèi)容應(yīng)該如下:
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = orcl) (ORACLE_HOME = C:\app\oracle\product\12.1.0\dbhome_1) (SID_NAME = orcl) ) )
修改完配置文件后,保存并退出。然后執(zhí)行以下命令來啟動監(jiān)聽服務(wù):
lsnrctl start
如果一切正常,你將會看到如下輸出:
LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 18-JUN-2013 15:07:55 Copyright (c) 1991, 2010, Oracle. All rights reserved. Starting tnslsnr: please wait... TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Production System parameter file is C:\app\oracle\product\11.2.0\dbhome_1\network\admin\listener.ora Log messages written to c:\app\oracle\diag\tnslsnr\win7test\listener\alert\log.xml Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=win7test)(PORT=1521))) Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=win7test)(PORT=1521))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Production Start Date 18-JUN-2013 15:08:36 Uptime 0 days 0 hr. 0 min. 0 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File C:\app\oracle\product\11.2.0\dbhome_1\network\admin\listener.ora Listener Log File c:\app\oracle\diag\tnslsnr\win7test\listener\alert\log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=win7test)(PORT=1521))) The listener supports no services The command completed successfully
注意到輸出中的 “Listening on” 和 “Listening Endpoints Summary” 部分,它們表示監(jiān)聽服務(wù)已經(jīng)在 1521 端口上開始監(jiān)聽客戶端連接請求。
至此,你已經(jīng)成功地啟動了 Oracle 數(shù)據(jù)庫的監(jiān)聽服務(wù)。你可以通過在另一個機器上使用 Oracle 客戶端工具連接到這個數(shù)據(jù)庫實例,并進行修改或查詢操作。