【问题标题】:Unable to cancel a query in DB2无法取消 DB2 中的查询
【发布时间】:2016-11-16 00:16:53
【问题描述】:

我在 DB2 中有以下存储过程:

CREATE OR REPLACE PROCEDURE CANCEL_ACTIVITY (IN application_handle INTEGER)
  LANGUAGE SQL
BEGIN
  DECLARE UOW_ID INTEGER;
  DECLARE ACTIVITY_ID  INTEGER;

  FOR v AS cur1 CURSOR FOR
    SELECT UOW_ID, ACTIVITY_ID FROM TABLE(SYSPROC.MON_GET_ACTIVITY(application_handle, -1))
  DO
    CALL WLM_CANCEL_ACTIVITY(application_handle, v.uow_id, v.activity_id);
  END FOR ;
END

使用以下查询,我可以找到我的连接 ID:

SELECT MON_GET_APPLICATION_HANDLE() from SYSIBM.SYSDUMMY1

这将返回一个类似36547 的值。因此,我将刚刚创建的过程称为:

CALL CANCEL_ACTIVITY(36547);

结果,我得到以下信息:

但是,如果我再次执行获取连接 ID 的查询,连接 ID 似乎并没有消失。我仍然得到 36547 返回的值。

我很困惑这个查询取消是否有效。在执行代码的不同环境中,我遇到了一系列不同类型的错误。

当我将它作为 SQL 查询运行时,我得到了上述错误代码/响应。在我的网页中执行我的代码时,出现以下错误:

Cannot cancel queries: Java::ComIbmDb2JccAm::SqlDataException: DB2 SQL Error: SQLCODE=-802, SQLSTATE=22003, SQLERRMC=null, DRIVER=4.16.53

我很好奇我做错了什么?

【问题讨论】:

    标签: stored-procedures db2


    【解决方案1】:

    我建议阅读 DB2 文档中的Canceling Activies。取消活动不是关闭连接,而是有选择地中止查询或其他正在运行的任务:

    如果一个活动消耗了太多资源,或者正在运行 很长,你可以取消它。取消活动比强迫更温和 提交活动的应用程序。取消的活动 向用户返回 SQL4725N,但不结束连接或 影响任何其他用户活动。强制应用程序同时结束 连接和用户活动。

    在您的程序中,您正在寻找应用程序句柄、uow 和特定的活动 ID。你有没有看过你要取消的活动是/正在做什么?您可以使用WLM_CAPTURE_ACTIVITY_IN_PROGRESS 首先转储有关该活动的信息,以便调试您的场景。

    【讨论】:

    • 嗨@data_henrik——感谢您的解释。这是取消活动的完整查询吗? CALL WLM_CANCEL_ACTIVITY (1, 2, 5)
    • 是的,应用句柄/UOW 标识符/活动 ID。
    • 等等,如果你检查我的程序,这就是我正在做的,不是吗?我用CALL WLM_CANCEL_ACTIVITY(..)
    • 您正在传递一个应用句柄,但取消了一个特定的活动。您究竟希望取消什么...?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    相关资源
    最近更新 更多