ALTER SYSTEM CANCEL SQL : отменяем SQL команды в Oracle 18c

ALTER SYSTEM CANCEL SQL в Oracle Database 18cSQL команда ALTER SYSTEM CANCEL  была введена в Oracle Database 18c для отмены инструкции SQL в сеансе, что является альтернативой убийству "непослушной" сессии (kill). Если вам в конечном итоге придется убить сеанс, это обсуждается здесь.

 

Синтаксис команды

Основной синтаксис SQL оператора ALTER SYSTEM CANCEL  показан ниже:

ALTER SYSTEM CANCEL SQL 'SID, SERIAL[, @INST_ID][, SQL_ID]';

Если INST_ID опущен, предполагается, что вы имеете в виду текущий экземпляр. Если SQL_ID опущен, предполагается, что вы имеете в виду SQL, который в настоящее время выполняется в указанном сеансе. Некоторые из вариантов показаны ниже:

-- Current SQL in session on this instance.
ALTER SYSTEM CANCEL SQL '738, 64419';

-- Current SQL in session on instance with INST_ID = 1.
ALTER SYSTEM CANCEL SQL '738, 64419, @1';

-- Specified SQL in session on this instance.
ALTER SYSTEM CANCEL SQL '738, 64419, 84djy3bnatbvq';

-- Specified SQL in session on instance with INST_ID = 1.
ALTER SYSTEM CANCEL SQL '738, 64419, @1, 84djy3bnatbvq';

Все четыре части информации можно получить из представления GV$SESSION, как будет показано ниже.

 

Как определить сессию, подлежащую отмене?

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

Определите "зависшую" сессию и SQL, используя представление GV$SESSION. Следующий запрос присоединяется к представлению GV$PROCESS, чтобы получить столбец SPID, который не является действительно необходимым для этой команды:

SET LINESIZE 150
COLUMN spid FORMAT A10
COLUMN username FORMAT A30
COLUMN program FORMAT A45

SELECT s.inst_id,
       s.sid,
       s.serial#,
       s.sql_id,
       p.spid,
       s.username,
       s.program
FROM   gv$session s
       JOIN gv$process p ON p.addr = s.paddr AND p.inst_id = s.inst_id
WHERE  s.type != 'BACKGROUND';

Значения SID, SERIAL#, INST_ID и SQL_ID соответствующего сеанса могут быть заменены командами из предыдущих разделов.

Вас заинтересует / Intresting for you:

Триггеры INSTEAD OF в PL/SQL н...
Триггеры INSTEAD OF в PL/SQL н... 13602 просмотров Дэн Wed, 17 Oct 2018, 11:16:17
Курсорные переменные и REF CUR...
Курсорные переменные и REF CUR... 28495 просмотров Максим Николенко Wed, 20 May 2020, 08:33:13
Триггеры AFTER SUSPEND в PL/SQ...
Триггеры AFTER SUSPEND в PL/SQ... 2885 просмотров Doctor Wed, 17 Oct 2018, 13:19:33
Литералы типа INTERVAL в PL/SQ...
Литералы типа INTERVAL в PL/SQ... 2710 просмотров Денис Sun, 17 Jun 2018, 09:04:50
Войдите чтобы комментировать

apv аватар
apv ответил в теме #10185 2 года 4 мес. назад
Благодарю за статью!
1dz аватар
1dz ответил в теме #10125 2 года 7 мес. назад
Хороший пример. Применение ALTER SYSTEM CANCEL предельно понятно теперь!