برای توقف اجرای دستور یک کاربر در اوراکل 11g، می توان از دستور kill session استفاده کرد که سبب خروج کاربر از بانک هم خواهد شد. از اوراکل 12cR2 این قابلیت بوجود امد تا بدون اخراج کاربر از بانک، صرفا دستور در حال اجرای ان کاربر را متوقف نمود.
شکل کلی دستور CANCEL SQL:
ALTER SYSTEM CANCEL SQL ‘SID, SERIAL, @INST_ID, SQL_ID’;
در صورت عدم تعیین inst_id در هنگام اجرای این دستور، instanceای که session در ان در حال اجرا است، به عنوان inst_id لحاظ خواهد شد. همچنین تعیین sql_id هم به صورت اختیاری می باشد.
در مثال زیر session 2 قصد توقف دستور اجرا شده توسط session 1 را دارد.
مشخصات session 1:
select p.SID,p.SERIAL# from v$session p where p.SID in (select sid from v$mystat where rownum<=1);
SID SERIAL#
———— ————
503 813
اجرای دستور بسیار طولانی توسط session 1:
SQL>select count(*) from tbl1;
Running…
توقف این دستور در حال اجرا توسط session 2:
ALTER SYSTEM CANCEL SQL ‘503,813’;
با اجرای این دستور توسط session 2، اجرای دستور توسط session 1 با خطای زیر متوقف خواهد شد:
ORA-01013: user requested cancel of current operation