ORACLE配置非默認位置的監聽程序

在Oracle的默認設置當中,監聽的配置文件會默認存放在$ORACLE_HOME/network/admin/listener.ora文件中,在該文件中存放了Oracle的監聽配置信息,在其同目錄下有tns的配置文件tnsnames.ora文件和sqlnet.ora文件。
在前一段時間操作ERP數據庫的時候發現一個問題:在進程中提及到的監聽程序(假設監聽程序的名字爲ALTER)在$ORACLE_HOME/network/admin/listener.ora文件中沒有相關的配置信息,經多方查找並請教公司大牛之後,找到在$ORACLE_HOME/network/admin下的一個子目錄中,例如:$ORACLE_HOME/network/admin/abc/listener.ora中找到了監聽器ALTER的相關配置信息。
當時,第一個疑問是,做了什麼的配置能夠是監聽程序知道有這個文件的存在呢?(肯定不會自動識別的吧?)
所以,找問題,然後找到了TNS_ADMIN這個環境變量上。僅以此文做一個測試記錄:
OS:rhel5.4
DB:oracle 10g R2
$ORACLE_HOME=/u02/app/oracle/product/10.2.0/db_1

將原來的監聽程序停掉:
$ oracle@model ~> lsnrctl status
新建目錄(爲了營造一個反差比較大的情況,這裏選擇一個不屬於ORACLE_HOME的路徑):
$ oracle@model ~> mkdir /home/oracle/admin/
$ oracle@model ~> cd /home/oracle/admin/
$ oracle@model ~/admin> touch listener.ora
在listener.ora文件中添加如下內容進行監聽服務的靜態註冊:
SID_LIST_HELLO_WORLD =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = hello)
(ORACLE_HOME = /u02/app/oracle/product/10.2.0/db_1)
(SID_NAME = test2)
)
)
HELLO_WORLD =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1530))
)
這個時候啓動監聽程序:
$ oracle@model ~> lsnrctl start HELLO_WORLD
這個時候會報出下面的錯誤信息:
TNS-01151: Missing listener name, HELLO_WORLD, in LISTENER.ORA
因爲在監聽程序啓動的時候,會默認的查找$ORACLE_HOME/network/admin/listener.ora文件來查找你需要啓動的監聽信息,現在裏面沒有,所以根本啓動不了了!
下面我們添加如下一個環境變量:
$ oracle@model ~> export TNS_ADMIN=/home/oracle/admin/
再次啓動HELLO_WORLD監聽程序:
$ oracle@model ~> lsnrctl start HELLO_WORLD

LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 22-NOV-2012 00:17:06

Copyright (c) 1991, 2005, Oracle. All rights reserved.

Starting /u02/app/oracle/product/10.2.0/db_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 10.2.0.1.0 - Production
System parameter file is /home/oracle/admin/listener.ora
Log messages written to /u02/app/oracle/product/10.2.0/db_1/network/log/hello_world.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1530)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1530)))
STATUS of the LISTENER
------------------------
Alias HELLO_WORLD
Version TNSLSNR for Linux: Version 10.2.0.1.0 - Production
Start Date 22-NOV-2012 00:17:06
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /home/oracle/admin/listener.ora
Listener Log File /u02/app/oracle/product/10.2.0/db_1/network/log/hello_world.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1530)))
Services Summary...
Service "hello" has 1 instance(s).
Instance "test2", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
監聽器啓動成功!可見在TNS_ADMIN環境變量發揮了相關的作用。那之前的配置能否正常啓動呢?
$ oracle@model ~/admin> lsnrctl start
結果就不截出來了,爲了證明啓動成功呢,我們截出來進程來看一下:
$ oracle@model ~/admin> ps -ef | grep tns | grep -v grep
oracle 17930 1 0 00:17 ? 00:00:00 /u02/app/oracle/product/10.2.0/db_1/bin/tnslsnr HELLO_WORLD -inherit
oracle 17994 1 0 00:29 ? 00:00:00 /u02/app/oracle/product/10.2.0/db_1/bin/tnslsnr LISTENER -inherit

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章