Oracle Listener的TNS-12502错误

本文探讨了Oracle数据库中常见的TNS-12502错误,分析了其产生的原因,并提供了排查及解决方法。通过实际案例演示如何定位问题所在。

每隔几秒钟listener日志中就出现一次该错误的记录,即使是在没有人使用的情况下也是如此,不过并没有发现客户端机器不能正常连接数据库的情况。

   Oracle关于TNS-12502错误的解释:

Error: ORA-12502 / TNS-12502

Text: TNS:listener received no CONNECT_DATA from client

Cause: No CONNECT_DATA was passed to the listener.

Action: Check that the service name resolved from TNSNAMES.ORA has the CONNECT_DATA component of the connect descriptor.

根据Oracle的说法分析,只有在TNSNAMES.ORA文件中不包含CONNECT_DATA时才会出现此问题。 但实际上当我们通过一些网络工具或HA工具等监测listener端口的时候,日志中就可能会记录该错误。以下是一个模拟的示例,在客户端通过telnet数据库服务器的1521端口测试连通性:

C:>telnet 172.16.30.11 1521

此时在日志中就会记录如下信息:

TNS-12502: TNS:listener received no CONNECT_DATA from client

10-NOV-2009 13:11:03 * 12502

TNS-12502: TNS:listener received no CONNECT_DATA from client

10-NOV-2009 13:11:13 * 12502

TNS-12502: TNS:listener received no CONNECT_DATA from client

10-NOV-2009 13:11:22 * 12502

TNS-12502: TNS:listener received no CONNECT_DATA from client

假如客户端都很正常的话,此类错误可以忽略不计,因为它并未影响到具体的应用。

你当前运行的命令是: ```cmd lsnrctl stop ``` 输出如下: ``` Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) TNS-12541: TNS:no listener TNS-12560: TNS:protocol adapter error TNS-00511: No listener 64-bit Windows Error: 2: No such file or directory Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=LAPTOP-QQT6B8QU)(PORT=1521))) TNS-12541: TNS:no listener TNS-12560: TNS:protocol adapter error TNS-00511: No listener 64-bit Windows Error: 61: Unknown error ``` --- ## 🔍 错误分析 这个输出说明: - **监听器当前没有运行**,所以你无法通过 `lsnrctl stop` 停止它。 - Oracle Net Services 试图连接本地监听器(使用 IPC 和 TCP),但都失败了,因为监听器没有启动。 --- ## ✅ 正确流程:启动监听器前的检查 你目前的问题是监听器没有运行,所以你不能执行 `stop`。你应该先尝试启动监听器: ```cmd lsnrctl start ``` 然后再查看监听器状态: ```cmd lsnrctl status ``` --- ## ✅ 常见问题排查流程 ### ✅ 1. 确保以管理员身份运行 CMD Oracle 监听器需要访问底层网络资源,必须使用管理员权限运行命令提示符。 - 右键点击“命令提示符” → 选择“以管理员身份运行” --- ### ✅ 2. 检查监听器是否已运行 ```cmd lsnrctl status ``` 如果输出 `TNS-12541: No listener`,说明监听器未运行。 --- ### ✅ 3. 启动监听器 ```cmd lsnrctl start ``` 你应该看到如下输出表示启动成功: ``` Starting tnslsnr: please wait... TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Production System parameter file is C:\oracle\product\11.2.0\dbhome_1\network\admin\listener.ora Log messages written to C:\oracle\product\11.2.0\dbhome_1\log\diag\tnslsnr\...\listener\alert\log.xml Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc))) Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=LAPTOP-QQT6B8QU)(PORT=1521))) Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) STATUS of the LISTENER ------------------------ ... The command completed successfully ``` --- ### ✅ 4. 查看监听器日志 监听器日志通常位于: ``` %ORACLE_HOME%\log\diag\tnslsnr\<主机名>\listener\alert\log.xml ``` 你可以查看日志以进一步排查启动失败的原因。 --- ### ✅ 5. 检查端口是否被占用(如启动失败) ```cmd netstat -ano | findstr :1521 ``` 如果输出类似: ``` TCP 0.0.0.0:1521 0.0.0.0:0 LISTENING 1234 ``` 说明端口被占用,可以用以下命令终止进程: ```cmd taskkill /F /PID 1234 ``` --- ## ✅ 示例:正确操作流程 ```cmd C:\Users\张潍>lsnrctl status Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) TNS-12541: TNS:no listener ... C:\Users\张潍>lsnrctl start Starting tnslsnr: please wait... ... The command completed successfully C:\Users\张潍>lsnrctl status STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Production Start Date 27-AUG-2025 15:40:00 Uptime 0 days 0 hr. 0 min. 10 sec ... ``` --- ## ✅ 总结 | 命令 | 用途 | |------|------| | `lsnrctl stop` | 停止监听器(监听器必须已经运行) | | `lsnrctl start` | 启动监听器 | | `lsnrctl status` | 查看监听器状态 | | `netstat -ano` | 查看端口占用情况 | | `taskkill /F /PID` | 杀掉占用端口的进程 | --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值