在一台陌生主机上,怎样确定网络配置?
1. 首先确定ORACLE运行的宿主OS用户。可用pe -ef 以查看 ora_smon_xxx 进程跑在哪个用户下的
bash-3.00$ ps -ef |grep ora_smon
oslubj0 23581 1 0 00:36:58 ? 0:28 ora_smon_lubj0
oslucs0 25770 1 0 00:40:04 ? 1:01 ora_smon_lucs0
osluqd0 20482 1 0 00:31:13 ? 0:31 ora_smon_luqd0
ora_smon_<SID> 后面那个字符串即数据库SID。上例中有三个不通的OS用户,每个用户都起了一个ORACLE instance。
2. 切换到oracle宿主用户,运行env等命令,或者ls prof_* ,确保 $ORACLE_SID, $ORACLE_SID等正确。
3. env, 看看 TNS_ADMIN 的值,即为 listener.ora 文件之所在! 下面都是浮云了。如果没有TNS_ADMIN这个变量,那么使用的就是默认的$ORACLE_HOME/network/admin/listener.ora
3. 找到正确的listener参数文件:
lsnrctl status $ORACLE_SID, 先看看默认的listener是否启动。如果有异常,可以试着运行 lsnrctl start:
Alias LISTENER
Version TNSLSNR for Solaris: Version 10.2.0.3.0 - Production
Start Date 03-DEC-2010 14:17:52
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /etc/paic/network/admin/listener.ora
Listener Log File /paic/bj/lbs/data/app/oracle/product/10.2.0/network/log/listener.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=e2cs5010)(PORT=1521)))
The listener supports no services
The command completed successfully
注意红色部分的文件,这才是本环境配置的listener文件。
4. 编辑listener参数文件,看看是哪个listener在监听当前SID:
cowlusj0=
(description_list=
(description=
(address_list=
(address=(protocol=TCP)(HOST=10.31.2.75)(PORT=1560))
)
)
)
SID_LIST_COWLUSJ0=
(SID_LIST=
(SID_DESC=
(ORACLE_HOME=/paic/sj/lbs/data/app/oracle/product/10.2.0)
(SID_NAME=lubj0)
)
)
先看SID_NAME=lubj0 定义在哪个 SID_LIST 中。然后找到SID_LIST_COWLUSJ0,“SID_LIST_”后面那部分字符串就是listener名称。
然后找到定义 COWLUSJ0的部分,可以得到IP,端口。
注意,listener的名称很重要。lsnrctl 工具里,如果不写具体的listener名称,那么操作的都是默认的1521端口上的listener。如果要启动或者停止特定的listener,必须这样写:
lsnrctl> status cowlusj0
lsnrctl> start cowlusj0
lsnrctl> stop cowlusj0
如果只是写 lsnrctl> stop 那么不会影响除1521端口之外其他的listener的。