oracle 10g里面除了启动监听的用户之外,其他用户都无法停止listener,即使listener没有设置密码。但是为了避免误操作,我个人认为最好还是为listener设置密码。

在默认情况下,启动Listener或者使用lsnrctl status命令查看监听状态,可以看到:

LSNRCTL> status
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rac1)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 10.2.0.4.0 - Production
Start Date                22-NOV-2010 16:24:31
Uptime                    0 days 0 hr. 0 min. 29 sec
Trace Level               off
Security                  ON: Password or Local OS Authentication
这表明Listener的安全机制使用了Password方式或者Local OS Authentication方式,在这种状态下,即使是设置了监听密码,对于oracle的安装用户来说,也仍然是不需要任何密码就可以停止监听的,可 以说oracle的安装用户可以无视listener密码的存在。
如果想在stop listener的时候,提示需要输入密码的都,需要在listener.ora文件添加如下内 容:LOCAL_OS_AUTHENTICATION_LINTENER=OFF(LINTENER是我的监听名称),然后LSNRCTL模式下设置密 码,LSNRCTL> change_password
Old password: #输入旧密码,如果没有的话,可以不输入
New password: #输入新密码
Reenter new password: #重复输入新密码
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rac1)(PORT=1521)))
Password changed for LISTENER
The command completed successfully
LSNRCTL> set password #输入密码
Password:
The command completed successfully
LSNRCTL> save_config   #保存设置
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rac1)(PORT=1521)))
Saved LISTENER configuration parameters.
Listener Parameter File   /app/oracle/product/10.2/db_1/network/admin/listener.ora
Old Parameter File   /app/oracle/product/10.2/db_1/network/admin/listener.bak
The command completed successfully
LSNRCTL> exit
可以在listener.ora文件中看到多出的记录:
#----ADDED BY TNSLSNR 22-NOV-2010 16:09:49---
PASSWORDS_LISTENER = A84B68296921539A
#--------------------------------------------

现在测试stop listener:
直接stop,无法停止,提示没有密码
LSNRCTL> stop
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rac1)(PORT=1521)))
TNS-01169: The listener has not recognized the password
输入密码
LSNRCTL> set password
Password:
The command completed successfully
再次执行stop,停止成功
LSNRCTL> stop
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rac1)(PORT=1521)))
The command completed successfully
LSNRCTL>

如果不想继续使用密码,只需要在listener.ora文件中删除或者注销掉PASSWORDS_LISTENER即可。