You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ORA-12541: TNS无监听程序错误求助——cx_Oracle连接Oracle数据库失败

解决ORA-12541: TNS:no listener错误的步骤

嘿,这个错误我碰到过好多次了,别着急,咱们一步步来排查解决:

1. 先确认Oracle监听器是否正在运行

这是最常见的触发原因——监听器没启动的话,数据库根本接收不到连接请求。

  • Windows系统:
    按下Win+R输入services.msc打开「服务」面板,找到名称类似OracleOraDB[你的版本号]Home1TNSListener的服务,查看它的状态是否为「正在运行」。如果没启动,右键点击选择「启动」即可。

  • Linux/macOS系统:
    打开终端执行命令,先检查监听器状态:

    lsnrctl status
    

    如果提示监听器未运行,或者显示「The listener supports no services」,就执行启动命令:

    lsnrctl start
    

2. 修正你的连接字符串

你当前用的localhost/test可能缺少了默认端口信息(Oracle监听器默认端口是1521),试试修改连接字符串,明确指定端口:

username = "labdb"
password = "labdb"
# 添加上默认端口1521
databaseName = "localhost:1521/test"
connection = cx_Oracle.connect(username, password, databaseName)

或者用更清晰的DSN方式构建连接,可读性更强:

import cx_Oracle

username = "labdb"
password = "labdb"
# 明确指定主机、端口和服务名
dsn = cx_Oracle.makedsn("localhost", 1521, service_name="test")
connection = cx_Oracle.connect(username, password, dsn)

3. 排查防火墙是否拦截了数据库端口

如果你的本地防火墙(Windows Defender防火墙、Linux iptables等)处于开启状态,可能会阻止1521端口的通信。需要在防火墙规则里添加允许Oracle监听器端口(默认1521)的入站和出站规则。

4. 确认Oracle数据库实例是否已启动

有时候监听器运行正常,但数据库实例本身没启动,也会报这个错误。你可以用SQL*Plus登录检查:

sqlplus / as sysdba

登录成功后执行启动命令:

startup

如果实例本来就处于运行状态,会提示「ORA-01081: cannot start already-running ORACLE - shut it down first」,说明实例没问题。

按上面的步骤排查下来,基本就能解决这个问题啦!

内容的提问来源于stack exchange,提问作者Gianmarco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 13:22:42