Oracle PL_SQL 设置执行超时

问题描述 投票:0回答:1

我正在使用 Oracle 12c Enterprise (12.1.0.2.0),并且有一个根据某些规则使用动态 SQL 创建查询的包。然后通过打开游标来执行动态 SQL 查询,并将游标返回给应用程序。 我还需要动态添加查询执行超时,以便根据生成的 SQL 类型,查询可能运行更长或更短的时间,因此在 JDBC 连接字符串/连接对象上设置此值不是解决方案。 在打开游标之前,我尝试使用“ALTER SESSION SET PLSQL_TIMEOUT”命令,但它失败,表明 PLSQL_TIMEOUT 无效(即使有记录)。 我已经搜索过提示但没有运气。 有谁知道如何限制这种特殊情况下的查询执行时间?有什么办法吗? 预先感谢!

oracle plsql oracle12c
1个回答
0
投票

据我所知,没有(简单)的方法可以做到这一点。

你可能

  • 创建一个日志表,其中包含有关您将要运行的查询的一些数据(用户名、开始时间、预期持续时间……)
    • 查询完成后更新该行(设置其结束时间列)
  • 创建一个经常运行的数据库作业,并检查所有尚未设置结束时间的行的当前时间是否大于[开始时间+预期持续时间]
    • 如果是这样,请终止该会话。这意味着您应该拥有适当的权限,因为您应该首先查询 v$session,然后

      alter system

      ,这不是许多用户被允许执行的操作

      SELECT sid, serial# FROM v$session WHERE USERNAME = 'THAT_USER';
      然后(使用您在上面收集的信息)

      ALTER SYSTEM KILL SESSION 'sid, serial#';
      
      
© www.soinside.com 2019 - 2024. All rights reserved.