今天凌晨接到某省的一个电话,数据库进行MC service guard的切换,但是切换过去后,发现侦听无法启动,启动时侦听报错信息为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
oracle@ha_dc02:/oracle/app/oracle/product/9.2.0/network/admin > lsnrctl start LSNRCTL for HPUX: Version 9.2.0.6.0 - Production on 04-SEP-2009 01:46:07 Copyright (c) 1991, 2002, Oracle Corporation. All rights reserved. Starting /oracle/app/oracle/product/9.2.0/bin/tnslsnr: please wait... TNSLSNR for HPUX: Version 9.2.0.6.0 - Production System parameter file is /oracle/app/oracle/product/9.2.0/network/admin/listener.ora Log messages written to /oracle/app/oracle/product/9.2.0/network/log/listener.log Error listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.203.41.11)(PORT=1521))) TNS-12532: TNS:invalid argument TNS-12560: TNS:protocol adapter error TNS-00502: Invalid argument Listener failed to start. See the error message(s) above... oracle@ha_dc02:/oracle/app/oracle/product/9.2.0/network/admin > |
检查配置,网络,都没有问题,浮动IP也是启动在10.203.41.11上,但是侦听就是起不来,检查/etc/hosts文件,也是没发现错误。
无奈之下只能开侦听的trace,呵呵,发现遇到侦听无法启动的问题,开trace是个很好的诊断方法。
在trace中发现:
[000001 04-SEP-2009 02:47:41:888] nttcon: entry
[000001 04-SEP-2009 02:47:41:888] nttcon: toc = 2
[000001 04-SEP-2009 02:47:41:888] nttcnp: entry
[000001 04-SEP-2009 02:47:41:889] ntvlin: entry
[000001 04-SEP-2009 02:47:41:889] ntvllt: entry
[000001 04-SEP-2009 02:47:41:889] ntvllt: Not successful in reading /oracle/app/oracle/product/9.2.0/network/admin/sqlnet.ora
[000001 04-SEP-2009 02:47:41:889] ntvllt: exit
[000001 04-SEP-2009 02:47:41:889] ntvlin: exit
[000001 04-SEP-2009 02:47:41:889] nttcnp: Validnode Table **NOT** used; err 0x1f6
[000001 04-SEP-2009 02:47:41:889] nttcnp: exit
[000001 04-SEP-2009 02:47:41:889] nttcon: exit
[000001 04-SEP-2009 02:47:41:889] nserror: entry
[000001 04-SEP-2009 02:47:41:890] nserror: nsres: id=0, op=65, ns=12532, ns2=12560; nt[0]=502, nt[1]=0, nt[2]=0; ora[0]=0, ora[1]=0, ora[2]=0
[000001 04-SEP-2009 02:47:41:890] nsopen: unable to open transport
[000001 04-SEP-2009 02:47:41:890] nsbfr: entry
看来是和sqlnet.ora文件有关系了,该文件在前段时间安全加固中加上了IP鉴权:
1 2 3 4 5 6 7 8 9 |
TCP.VALIDNODE_CHECKING=yes TCP.INVITED_NODES=(10.203.41.28, 10.203.41.31, 10.203.41.42, …… 10.203.42.193, 10.203.42.194, 10.203.42.195, 10.203.42.196) |
咋一看,是没什么问题,其实,在实际的操作过程中,之前操作的同事可能把格式写错了。呵呵,这样的问题谁都预料不到。我们应该写成:
这样就正常了。
我们可以在自己的机器上(oracle 10.2.0.1)做测试:
(一)当sqlnet.ora写成:
侦听启动正常:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
C:\Documents and Settings\Administrator>lsnrctl start LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 04-9月 -2009 04:36:36 Copyright (c) 1991, 2005, Oracle. All rights reserved. 启动tnslsnr: 请稍候... TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production 系统参数文件为d:\oracle\product\10.2.0\db_1\network\admin\listener.ora 写入d:\oracle\product\10.2.0\db_1\network\log\listener.log的日志信息 监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=HEJIANMIN)(PORT=1521))) 监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC0ipc))) 正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=HEJIANMIN)(PORT=1521))) LISTENER 的 STATUS ------------------------ 别名 LISTENER 版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production 启动日期 04-9月 -2009 04:36:40 正常运行时间 0 天 0 小时 0 分 3 秒 跟踪级别 off 安全性 ON: Local OS Authentication SNMP OFF 监听程序参数文件 d:\oracle\product\10.2.0\db_1\network\admin\listener.ora 监听程序日志文件 d:\oracle\product\10.2.0\db_1\network\log\listener.log 监听端点概要... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=HEJIANMIN)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC0ipc))) 服务摘要.. 服务 "CLRExtProc" 包含 1 个例程。 例程 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序... 服务 "PLSExtProc" 包含 1 个例程。 例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序... 命令执行成功 C:\Documents and Settings\Administrator> |
侦听启动报错:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
C:\Documents and Settings\Administrator>lsnrctl start LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 04-9月 -2009 04:37:24 Copyright (c) 1991, 2005, Oracle. All rights reserved. 启动tnslsnr: 请稍候... TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production 系统参数文件为d:\oracle\product\10.2.0\db_1\network\admin\listener.ora 写入d:\oracle\product\10.2.0\db_1\network\log\listener.log的日志信息 监听该对象时出错: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=HEJIANMIN)(PORT=1521))) TNS-12560: TNS: 协议适配器错误 TNS-00583: 有效节点检查: 无法对配置参数进行语法分析 监听程序未能启动。请参阅上面的错误消息... C:\Documents and Settings\Administrator> |
侦听启动正常:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
C:\Documents and Settings\Administrator>lsnrctl start LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 04-9月 -2009 04:41:55 Copyright (c) 1991, 2005, Oracle. All rights reserved. 启动tnslsnr: 请稍候... TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production 系统参数文件为d:\oracle\product\10.2.0\db_1\network\admin\listener.ora 写入d:\oracle\product\10.2.0\db_1\network\log\listener.log的日志信息 监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=HEJIANMIN)(PORT=1521))) 监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC0ipc))) 正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=HEJIANMIN)(PORT=1521))) LISTENER 的 STATUS ------------------------ 别名 LISTENER 版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production 启动日期 04-9月 -2009 04:41:56 正常运行时间 0 天 0 小时 0 分 1 秒 跟踪级别 off 安全性 ON: Local OS Authentication SNMP OFF 监听程序参数文件 d:\oracle\product\10.2.0\db_1\network\admin\listener.ora 监听程序日志文件 d:\oracle\product\10.2.0\db_1\network\log\listener.log 监听端点概要... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=HEJIANMIN)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC0ipc))) 服务摘要.. 服务 "CLRExtProc" 包含 1 个例程。 例程 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序... 服务 "PLSExtProc" 包含 1 个例程。 例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序... 命令执行成功 C:\Documents and Settings\Administrator> |
4条评论
刚才写了一堆,没了….
这个问题变态啊,你应该给Oracle提一下,不过9i不支持了,估计11i里应该改正了吧
这次不好意思了哈,到了深圳请你吃饭!
re Rill:-_-!!是11g ……..(啊~~啊~~~天上一只乌鸦飞过)
这问题我也遇到过.呵呵
嗯…文本格式的问题会害死很多人的,当然包括linux下与windows下的文本编码都会让不熟的人痛苦好久.