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
相关产品推荐
相关产品推荐

