Приятной новой функцией Oracle 18c является то, что вы можете отменить определенный оператор SQL без использования методов диспетчера ресурсов. Например:
SQL> select banner_full from v$version;
BANNER_FULL
--------------------------------------------------------------------------------
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.1.0.0.0
SQL> select distinct sid from v$mystat;
SID
---------
477
SQL> begin loop null; end loop; end;
/
Эта команда создает бесконечный цикл. Теперь мне нужен SQL_ID оператора и SERIAL# сеанса, создавшего этот катаклизм:
SQL> select sql_text,sql_id from v$sql where sql_text like '%loop null; end loop%';
SQL_TEXT
--------------------------------------------------------------------------------
SQL_ID
-------------
begin loop null; end loop; end;
8gadd3yhtd150
select sql_text,sql_id from v$sql where sql_text like '%loop null; end loop%'
6vbb9d7zj9t5w
SQL> select serial# from v$session where sid=477;
SERIAL#
----------
10569
Теперь, зная эту информацию) я могу использовать новую функцию Оракл 18С:
SQL> alter system cancel sql '477,10569,8gadd3yhtd150';
System altered.
Сессия-нарушитель получает
ERROR at line 1:
ORA-01013: user requested cancel of current operation
Мы долго ждали подобного функционала, и вот это свершилось! 🙂
Вот еще пример работы с ALTER SYSTEM CANCEL SQL.