【LISTENER】修改監聽密碼導致NL-00051錯誤的分析與總結

secooler發表於2011-03-24
今天遇到了一個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.問題處理
使用netca工具建立監聽即可,亦可透過手工建立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檔案可以正常使用
處理方法:若暫時無法找到原因,可考慮使用netca工具重建監聽來解決問題。

Good luck.

secooler
11.03.24

-- The End --

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-690388/,如需轉載,請註明出處,否則將追究法律責任。

相關文章