重装Oracle后VSCode连接报错ORA-12541: TNS:no listener求助
Oracle连接报错ORA-12541及TNS监听问题解决
问题描述
此前在VSCode中运行Python脚本可正常连接本地Oracle数据库并写入数据,格式化机器重装Oracle数据库及实例客户端后,连接失败,报错:
Traceback (most recent call last): File "c:\Users\ChiNedu\Documents\python\Oracle\oracle.py", line 10, in <module> cnx = cx_Oracle.connect(conStr) cx_Oracle.DatabaseError: ORA-12541: TNS:no listener
执行lsnrctl stat命令返回:
LSNRCTL for 64-bit Windows: Version 19.0.0.0.0 - Production on 09-FEB-2023 17:33:46 Copyright (c) 1991, 2019, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=DESKTOP-QPAJR53)(PORT=1521))) TNS-12545: Connect failed because target host or object does not exist TNS-12560: TNS:protocol adapter error TNS-00515: Connect failed because target host or object does not exist 64-bit Windows Error: 1001: Unknown error 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
尝试修改HOST NAME,但找不到%ORACLE_HOME%/network/admin目录。
解决步骤
1. 检查并启动Oracle监听服务
- 按下Win+R输入
services.msc打开服务管理器 - 找到名称包含
TNSListener的服务(例如OracleOraDB19Home1TNSListener,名称随Oracle版本略有差异) - 若服务未启动,右键选择启动;若已启动,尝试重启服务
2. 配置ORACLE_HOME环境变量
- 打开命令提示符,执行以下命令查看当前ORACLE_HOME路径:
echo %ORACLE_HOME% - 若返回为空,手动配置环境变量:
- 右键此电脑→属性→高级系统设置→环境变量
- 在系统变量区点击新建,变量名填
ORACLE_HOME,变量值填Oracle安装根目录(示例:C:\app\你的用户名\product\19.0.0\dbhome_1,需根据实际安装路径调整) - 编辑系统变量中的
Path,添加%ORACLE_HOME%\bin
3. 创建并配置network/admin目录及文件
- 若
%ORACLE_HOME%\network\admin目录不存在,手动创建该路径 - 在admin目录下创建
tnsnames.ora和listener.ora文件:- listener.ora示例内容:
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) ) ADMIN_RESTRICTIONS_LISTENER = ON - tnsnames.ora示例内容(替换
ORCL为你的数据库实例名):ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL) ) )
- listener.ora示例内容:
4. 重启监听并验证状态
- 在命令提示符执行以下命令重启监听:
lsnrctl stop lsnrctl start - 再次执行
lsnrctl stat,若返回正常的监听状态信息则配置生效
5. 调整Python连接字符串
- 将连接字符串中的HOST改为
localhost或127.0.0.1,避免主机名解析问题,示例:conStr = "用户名/密码@localhost:1521/ORCL"
内容的提问来源于stack exchange,提问作者Miracle
相关产品推荐
相关产品推荐

