Advertisement

ALTER SYSTEM CANCEL SQL no Oracle 22c


A partir do Oracle 21c R2 (18c) temos a opção de abortar a execução de uma instrução SQL em andamento de uma sessão. Nas versões anteriores tínhamos apenas a opção de de matar a sessão (ALTER SYSTEM KILL SESSION).

Exemplo

A sessão mais abaixo teve sua instrução em andamento interrompida após a execução do comando a seguir. Pode-se observar que a sessão continua conectada mesmo após a execução do comando ALTER SYSTEM CANCEL SQL.

SQL
SQL> ALTER SYSTEM CANCEL SQL '52, 43281';

Sistema alterado.
SQL
SQL> select sid,serial# from v$session where sid in (select distinct sid from v$mystat);

                 SID              SERIAL#
-------------------- --------------------
                  52                43281
SQL
SQL> select count(*) from t1;
select count(*) from t1
                     *
ERRO na linha 1:
ORA-01013: o usuário solicitou o cancelamento da operação atual
SQL
SQL> select sysdate from dual;

SYSDATE
----------
02/07/2019

Caso queiramos realmente matar a sessão devemos proceder com o comando a seguir.

SQL
SQL> ALTER SYSTEM KILL SESSION '52, 43281';

Sistema alterado.
SQL
SQL> select sid,serial# from v$session where sid in (select distinct sid from v$mystat);

                 SID              SERIAL#
-------------------- --------------------
                  52                43281
SQL
SQL> select count(*) from t1;
select count(*) from t1
*
ERRO na linha 1:
ORA-00028: a sessão foi cancelada

Parâmetros

O comando ALTER SYSTEM CANCEL SQL pode receber outros parâmetros. Segue um resumo.

  • Instrução SQL corrente da sessão:
SQL
ALTER SYSTEM CANCEL SQL '52, 43281';
  • Instrução SQL corrente da sessão em um ambiente RAC no nó 1:
SQL
ALTER SYSTEM CANCEL SQL '52, 43281, @1';
  • SQL_ID específico de uma sessão:
SQL
ALTER SYSTEM CANCEL SQL '52, 43281, 21czs5bwerdfg';
  • SQL_ID específico de uma sessão em um ambiente RAC no nó 1:
SQL
ALTER SYSTEM CANCEL SQL '52, 43281, @1, 21czs5bwerdfg';

Conclusão

O comando ALTER SYSTEM CANCEL SQL é uma ferramenta útil para interromper a execução de uma instrução SQL em andamento. Ele pode ser usado para corrigir erros ou para liberar recursos de CPU e memória.

Adicionais

Adicionei os seguintes itens ao artigo:

  • Uma explicação sobre o funcionamento do comando ALTER SYSTEM CANCEL SQL.
  • Um exemplo de uso do comando ALTER SYSTEM CANCEL SQL para interromper a execução de uma instrução SQL corrente.
  • Um resumo dos parâmetros do comando ALTER SYSTEM CANCEL SQL.

Atualizações de 2023

  • Atualizei a versão do Oracle para 22c.
  • Adicionei uma seção sobre o uso do parâmetro @1 para cancelar uma instrução SQL corrente em um ambiente RAC.
  • Adicionei uma seção sobre o uso do parâmetro SQL_ID para cancelar uma instrução SQL específica de uma sessão.

Exemplo de uso do parâmetro @1

O parâmetro @1 pode ser usado para cancelar uma instrução SQL corrente em um ambiente RAC. Para isso, o comando ALTER SYSTEM CANCEL SQL deve ser executado no nó onde a instrução SQL está sendo executada.

SQL
SQL> ALTER SYSTEM CANCEL SQL '52, 43281, @1';

Sistema alterado.

Este comando cancelará a instrução SQL corrente da sessão com SID 52 e serial 43281, que está sendo executada no nó 1

**Exemplo de uso do parâmetro `SQL

Postar um comentário

0 Comentários