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

使用Python连接Oracle服务器时出现连接被拒绝错误求助

解决Python oracledb连接Oracle时出现[WinError 10061]连接被拒绝的问题

环境信息

  • Python 3.12.6
  • Oracle SQL Developer Version 23.1.1.345

问题详情

编写Python脚本测试与Oracle服务器的连通性,脚本逻辑为获取数据库密码后输出连接成功提示,但执行时收到数据库主动拒绝连接的错误,不过通过Oracle SQL Developer可正常登录目标数据库。

测试脚本

import getpass
import oracledb

pw = getpass.getpass("Enter password: ")

connection = oracledb.connect(
    user="rep_dlp",
    password=pw,
    dsn="localhost/DEV_PROTECT")

print("Successfully connected to Oracle Database")

cursor = connection.cursor()

错误输出

D:\Reporting>python connect.py
Enter password:
Traceback (most recent call last):
  File "src\\oracledb\\impl/thin/connection.pyx", line 322, in oracledb.thin_impl.ThinConnImpl._connect_with_address
  File "src\\oracledb\\impl/thin/protocol.pyx", line 225, in oracledb.thin_impl.Protocol._connect_phase_one
  File "src\\oracledb\\impl/thin/protocol.pyx", line 362, in oracledb.thin_impl.Protocol._connect_tcp
  File "C:\Program Files\Python312\Lib\socket.py", line 865, in create_connection
    raise exceptions[0]
  File "C:\Program Files\Python312\Lib\socket.py", line 850, in create_connection
    sock.connect(sa)
ConnectionRefusedError: [WinError 10061] No connection could be made because the target machine actively refused it

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "D:\Reporting\connect.py", line 6, in <module>
    connection = oracledb.connect(
                 ^^^^^^^^^^^^^^^^^
  File "C:\Program Files\Python312\Lib\site-packages\oracledb\connection.py", line 1169, in connect
    return conn_class(dsn=dsn, pool=pool, params=params, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Program Files\Python312\Lib\site-packages\oracledb\connection.py", line 551, in __init__
    impl.connect(params_impl)
  File "src\\oracledb\\impl/thin/connection.pyx", line 424, in oracledb.thin_impl.ThinConnImpl.connect
  File "src\\oracledb\\impl/thin/connection.pyx", line 420, in oracledb.thin_impl.ThinConnImpl.connect
  File "src\\oracledb\\impl/thin/connection.pyx", line 380, in oracledb.thin_impl.ThinConnImpl._connect_with_params
  File "src\\oracledb\\impl/thin/connection.pyx", line 361, in oracledb.thin_impl.ThinConnImpl._connect_with_description
  File "src\\oracledb\\impl/thin/connection.pyx", line 327, in oracledb.thin_impl.ThinConnImpl._connect_with_address
  File "C:\Program Files\Python312\Lib\site-packages\oracledb\errors.py", line 195, in _raise_err
    raise error.exc_type(error) from cause
oracledb.exceptions.OperationalError: DPY-6005: cannot connect to database (CONNECTION_ID=ii7F2d6/yPjm22VqmzWk9g==).
[WinError 10061] No connection could be made because the target machine actively refused it

解决方法

1. 检查Oracle监听状态

SQL Developer可能使用本地IPC连接,而oracledb默认用TCP/IP连接,需确认监听是否正常:

  • 打开命令提示符,执行lsnrctl status查看监听是否启动,且是否监听localhost的1521端口(Oracle默认端口)。
  • 若监听未启动,执行lsnrctl start启动监听服务。

2. 修正DSN格式

当前DSN可能缺少端口或服务名不正确,尝试以下格式:

  • 指定端口:localhost:1521/DEV_PROTECT
  • 使用完整TNS格式:(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=DEV_PROTECT)))
  • 从SQL Developer连接属性中复制准确的主机名、端口、服务名,确保脚本参数完全匹配。

3. 切换oracledb连接模式

oracledb默认使用Thin模式,切换到Thick模式(需Oracle客户端支持)可能解决兼容性问题:
在脚本开头添加以下代码:

import oracledb
# 若Oracle客户端未在环境变量中,需指定路径,例如path="C:\\instantclient_21_10"
oracledb.init_oracle_client()

4. 检查防火墙设置

确认本地防火墙未阻止Python程序访问Oracle的1521端口,可临时关闭防火墙测试连接是否正常。

5. 验证服务名正确性

在SQL Developer中执行以下查询,获取当前连接的服务名,确保脚本中的DEV_PROTECT与结果一致(注意大小写敏感):

SELECT sys_context('userenv','service_name') FROM dual;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 00:30:18