2016-11-16 3 views
1

Я имею следующую хранимую процедуру в DB2:Невозможно отменить запрос в 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 

Используя следующий запрос, я могу найти свой идентификатор соединения:

SELECT MON_GET_APPLICATION_HANDLE() from SYSIBM.SYSDUMMY1 

Что бы вернуть значение, равное 36547. Поэтому я называю процедуру я только что созданный таким образом:

CALL CANCEL_ACTIVITY(36547); 

В результате, я получаю следующее:

enter image description here

Однако, если выполнить запрос, который получает идентификатор соединения снова, это не похоже, что идентификатор соединения ушел. Я все равно получаю возвращаемое значение 36547.

Я совершенно смущен, работает ли это отмена запроса. Я получаю ряд различных типов ошибок в разных средах, в которых я выполняю код.

Когда я запускаю его как SQL-запрос, я получаю вышеуказанный код ошибки/ответ. Когда мой код выполняется в моей веб-странице, я получаю следующее сообщение об ошибке:

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

Мне интересно то, что я делаю неправильно?

ответ

2

В документации по DB2 я бы рекомендовал прочитать Canceling Activies. Отменять деятельность не закрывает соединение, но выборочно прерывания запроса или другие текущие задач:

If an activity is consuming too many resources, or is running too long, you can cancel it. Canceling an activity is gentler than forcing the application that submitted the activity. A canceled activity returns SQL4725N to the user, but does not end the connection or affect any other user activity. Forcing the application ends both the connection and user activities.

В вашей процедуре вы ищете приложение ручку, UOW и конкретную деятельность личность. Вы посмотрели, что делает деятельность, которую вы собираетесь отменить? Вы можете использовать WLM_CAPTURE_ACTIVITY_IN_PROGRESS для первой дамп-информации об этом действии, чтобы вы могли отлаживать ваш сценарий.

+0

Hi @data_henrik - спасибо за объяснение. Это полный запрос для отмены активности? 'CALL WLM_CANCEL_ACTIVITY (1, 2, 5)' – theGreenCabbage

+0

Да, дескриптор приложения/идентификатор UU/идентификатор активности. –

+0

Подождите, если вы проверите мою процедуру, это то, что я делаю, нет? Я использую 'CALL WLM_CANCEL_ACTIVITY (..)' – theGreenCabbage

Смежные вопросы