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> ALTER SYSTEM CANCEL SQL '52, 43281';
Sistema alterado.
SQL> select sid,serial# from v$session where sid in (select distinct sid from v$mystat);
SID SERIAL#
-------------------- --------------------
52 43281
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> select sysdate from dual;
SYSDATE
----------
02/07/2019
Caso queiramos realmente matar a sessão devemos proceder com o comando a seguir.
SQL> ALTER SYSTEM KILL SESSION '52, 43281';
Sistema alterado.
SQL> select sid,serial# from v$session where sid in (select distinct sid from v$mystat);
SID SERIAL#
-------------------- --------------------
52 43281
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:
ALTER SYSTEM CANCEL SQL '52, 43281';
- Instrução SQL corrente da sessão em um ambiente RAC no nó 1:
ALTER SYSTEM CANCEL SQL '52, 43281, @1';
- SQL_ID especÃfico de uma sessão:
ALTER SYSTEM CANCEL SQL '52, 43281, 21czs5bwerdfg';
- SQL_ID especÃfico de uma sessão em um ambiente RAC no nó 1:
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> 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
0 Comentários