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

Python应用连接Oracle Autonomous Database 23ai遇DPY-4011错误

Oracle 23ai 数据库PC端Python连接失败问题

问题背景

Python应用原本可正常连接Oracle Autonomous Database 23c,迁移至23ai后出现如下差异:

  • Mac端仍能正常运行
  • PC端无法连接,运行测试代码时报错:DPY-4011: the database or network closed the connection

已完成的配置验证:

  • 数据库已设置Mutual TLS (mTLS) authentication: Not required(无需钱包即可连接的正确配置)
  • 通过Oracle Cloud的「Add my IP Address」功能将PC的IP加入访问控制列表(ACL)
  • PC端可通过SQL Developer正常连接目标数据库

测试代码

import os
import oracledb

def check_oracle_connection():
    try:
        # 加载环境变量
        username = os.getenv('ORACLE_AUTO_USERNAME')
        password = os.getenv('ORACLE_AUTO_PASSWORD')
        dsn = os.getenv('ORACLE_AUTO_DSN')

        # 检查环境变量是否已设置
        if not username or not password or not dsn:
            raise EnvironmentError("Oracle凭证的一个或多个环境变量未设置")

        # 建立数据库连接
        connection = oracledb.connect(user=username, password=password, dsn=dsn)

        # 创建游标对象
        cursor = connection.cursor()

        # 执行测试查询
        cursor.execute("SELECT 'hello world' FROM dual")
        result = cursor.fetchone()

        # 打印查询结果
        print(result[0])
    
    except oracledb.DatabaseError as e:
        # 打印数据库错误信息
        print("连接Oracle时发生错误:", e)

    except EnvironmentError as e:
        # 打印环境变量错误信息
        print(e)

    finally:
        try:
            # 关闭游标和连接
            cursor.close()
            connection.close()
            print("Oracle连接已关闭")
        except:
            pass

check_oracle_connection()

网络测试结果

执行命令 ping adb.us-phoenix-1.oraclecloud.com 得到如下输出:

Pinging adb.us-phoenix-1.oci.oraclecloud.com [192.29.105.116] with 32 bytes of data:
Request timed out.

排查与解决建议

  • 确认DSN格式正确性:23ai无钱包连接需使用TCPS协议,DSN格式应为(description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.us-phoenix-1.oraclecloud.com))(connect_data=(service_name=你的数据库服务名))(security=(ssl_server_dn_match=no))),需替换为实际数据库服务名,注意即使关闭mTLS,23ai仍需使用1522端口
  • 检查PC端防火墙与代理:SQL Developer能连接可能是代理配置差异,需确认Python环境未使用全局代理,或已将Oracle域名加入代理白名单;同时检查Windows防火墙是否拦截了oracledb的出站请求
  • 验证环境变量准确性:打印ORACLE_AUTO_DSN的值,确认服务名、主机地址与SQL Developer中使用的完全一致
  • 升级oracledb版本:旧版本oracledb可能对23ai的连接逻辑支持不足,执行pip install --upgrade oracledb更新至最新稳定版
  • 测试端口连通性:Oracle Cloud通常屏蔽ICMP请求,ping超时为正常现象,重点测试TCP 1522端口是否可通,可使用命令Test-NetConnection adb.us-phoenix-1.oraclecloud.com -Port 1522(Windows)验证

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 18:27:31