绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
【LISTENER】修改监听密码导致NL-00051错误的分析与总结
2019-12-29 20:14:30
今天遇到了一个Case,在修改监听密码保存配置时抛出“NL-00051: internal error code, arguments: [302], [1], [], [], [], [], []”错误。
简单模拟再现一下这个问题,并对可能导致NL-00051错误的场景进行总结和分析。

1.问题现象
ora10g@secdb /home/oracle$ lsnrctl

LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 24-MAR-2011 21:19:56

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

Welcome to LSNRCTL, type "help" for information.

LSNRCTL> set current_listener listener
Current Listener is listener
LSNRCTL> change_password
Old password:
New password:
Reenter new password:
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
Password changed for listener
The command completed successfully
LSNRCTL> save_config
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
NL-00051: internal error code, arguments: [302], [1], [], [], [], [], []
LSNRCTL>

2.问题原因
原因是在创建完数据库后没有使用netca创建监听,导致在$ORACLE_HOME/network/admin/目录下不存在listener.ora文件,因此变化后的监听配置无法写入到listener.ora文件,因此抛出了NL-00051错误。
ora10g@secdb /home/oracle$ ls -l $ORACLE_HOME/network/admin/listener.ora
ls: /oracle/ora10gR2/product/10.2.0/db_2/network/admin/listener.ora: No such file or directory

3.问题处理
使用neca工具创建监听皆可,亦可通过手工创建listener.ora文件的方法来解决这个问题。

4.NL-00051报错的另外一种表现形式
除由于listener.ora文件不存在导致NL-00051报错外,更常见的一种场景是listener.ora文件中包含乱码,导致监听变化信息无法写入。
针对这种问题现象,同样可以通过重建监听的方法来解决。

这里给出一种验证是否是由于listener.ora文件中包含乱码导致NL-00051报错的检验方法。

1)关闭监听
LSNRCTL> stop
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
The command completed successfully

2)将原有的listener.ora文件进行备份
ora10g@secdb /home/oracle$ mv $ORACLE_HOME/network/admin/listener.ora $ORACLE_HOME/network/admin/listener.ora_backup

3)创建一个不包含任何信息的listener.ora空文件
ora10g@secdb /home/oracle$ touch $ORACLE_HOME/network/admin/listener.ora

4)启动监听程序
LSNRCTL> start
Starting /oracle/ora10gR2/product/10.2.0/db_2/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 10.2.0.1.0 - Production
System parameter file is /oracle/ora10gR2/product/10.2.0/db_2/network/admin/listener.ora
Log messages written to /oracle/ora10gR2/product/10.2.0/db_2/network/log/listener.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=secdb)(PORT=1521)))

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 10.2.0.1.0 - Production
Start Date                24-MAR-2011 17:59:04
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /oracle/ora10gR2/product/10.2.0/db_2/network/admin/listener.ora
Listener Log File         /oracle/ora10gR2/product/10.2.0/db_2/network/log/listener.log
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=secdb)(PORT=1521)))
The listener supports no services
The command completed successfully


即使listener.ora文件为空,监听程序是依然可以顺利启动的。

5)为监听设置密码
LSNRCTL> change_password
Old password:
New password:
Reenter new password:
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
Password changed for LISTENER
The command completed successfully

6)将变化后的配置进行保存
LSNRCTL> save_config
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
Saved LISTENER configuration parameters.
Listener Parameter File   /oracle/ora10gR2/product/10.2.0/db_2/network/admin/listener.ora
Old Parameter File   /oracle/ora10gR2/product/10.2.0/db_2/network/admin/listener.bak
The command completed successfully

配置信息保存成功。
此时便会在listener.ora文件中增加有关密码设置的信息。

7)查看listener.ora文件中写入的信息
ora10g@secdb /home/oracle$ cat $ORACLE_HOME/network/admin/listener.ora

#----ADDED BY TNSLSNR 24-MAR-2011 21:30:05---
PASSWORDS_LISTENER = 1DF5C2FD0FE9CFA2
#--------------------------------------------

可见,监听密码的设置信息可以正确写入到listener.ora文件中。

通过以上的验证步骤说明在空listener.ora文件中可以完成监听密码的调整和保存操作,进而证明在listener.ora文件存在的前提下NL-00051错误是由于乱码导致的。

5.小结
导致NL-00051错误的根本原因是:监听配置的修改无法成功写入到listener.ora文件。
检查方法:确认listener.ora文件可以正常使用
处理方法:若暂时无法找到原因,可以考虑使用neca工具对监听重新配置。

Good luck.

secooler
11.03.24

-- The End --

分享好友

分享这个小栈给你的朋友们,一起进步吧。

OCM联盟
创建时间:2019-12-27 14:04:54
OCM联盟(OCMU – Oracle Certified Master Union)是一群有着共同理想,共同志向的DBA的家。 ⚠️该小栈仅限ocm成员入驻!审核制! Oracle Certified Master (OCM) -Oracle认证大师,是Oracle认证的别,是对数据库从业人员的技术、知识和操作技能的别的认可。Oracle OCM是解决困难的技术难题和复杂的系统故障的佳Oracle专家人选,也是IT行业衡量IT专家和经理人的高专业程度及经验的基准。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • 侯圣文@secooler
    栈主

小栈成员

查看更多
  • gaokeke123
  • ?
  • 山中老狐狸
  • 飘絮絮絮丶
戳我,来吐槽~