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

DPY-3008错误排查:python-oracledb执行SQL报错Toad正常

解决python-oracledb执行SQL时DPY-3008错误的思路
  • 定位错误根源:错误中的2396对应Oracle原生错误ORA-02396,即会话超出最大空闲时间限制。python-oracledb的DPY-3008是因为无法处理Oracle返回的这类带内通知,而Toad的会话配置或处理逻辑避开了这个问题。

  • 检查会话资源限制:

    • 查询当前用户的会话资源配置,确认是否存在IDLE_TIME或CONNECT_TIME的限制:
      SELECT profile, resource_name, limit 
      FROM dba_profiles 
      WHERE resource_name IN ('IDLE_TIME', 'CONNECT_TIME') 
        AND profile = (SELECT profile FROM dba_users WHERE username = USER);
      
    • 若存在限制,要么优化查询缩短执行时间(比如添加索引、简化逻辑),要么联系DBA调整对应profile的资源阈值。
  • 调整python-oracledb连接参数:

    • 创建连接时关闭事件通知功能,避免触发带内通知处理:
      connection = oracledb.connect(
          user="your_username",
          password="your_password",
          dsn="your_dsn",
          events=False
      )
      
    • 调整查询预取行数,减少会话空闲时间:
      cursor.execute("your_target_query", prefetchrows=1000)
      
  • 临时放宽会话限制:

    • 若有权限,在执行目标查询前临时修改当前会话的空闲时间限制:
      ALTER SESSION SET IDLE_TIME = UNLIMITED;
      
    • 执行完查询后可恢复原配置(若需要)。
  • 升级python-oracledb版本:旧版本可能存在带内通知处理的bug,升级到最新版本尝试解决:

    pip install --upgrade python-oracledb
    
  • 对齐Toad的会话环境:

    • 在Toad中执行SELECT * FROM v$session WHERE sid = (SELECT sid FROM v$mystat WHERE rownum=1);获取会话参数,然后在Python脚本中设置相同参数:
      cursor.execute("ALTER SESSION SET PARAMETER_NAME = 'TOAD_PARAM_VALUE'")
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 14:15:01