Como você continua recebendo páginas de resultados, suponho que você iniciou a sessão no SQL*Plus. Se sim, a coisa mais fácil a fazer é bash ctrl + quebrar muitas, muitas vezes até parar.
A(s) maneira(s) mais complicada(s) e mais genérica(s) eu detalho abaixo em ordem crescente de ferocidade/maldade. O primeiro provavelmente funcionará para você, mas se não funcionar, você pode continuar descendo a lista.
A maioria delas não é recomendada e pode ter consequências não intencionais.
1. Nível Oracle - Mate o processo no banco de dados
De acordo com a resposta de ObiWanKenobi e a documentação ALTER SESSION
alter system kill session 'sid,serial#';
Para encontrar o
sid
, ID da sessão e o serial#
, número de série, execute a seguinte consulta - resumida do OracleBase - e encontre sua sessão:select s.sid, s.serial#, p.spid, s.username, s.schemaname
, s.program, s.terminal, s.osuser
from v$session s
join v$process p
on s.paddr = p.addr
where s.type != 'BACKGROUND'
Se você estiver executando um RAC, precisará alterar um pouco isso para levar em consideração as várias instâncias,
inst_id
é o que os identifica:select s.inst_id, s.sid, s.serial#, p.spid, s.username
, s.schemaname, s.program, s.terminal, s.osuser
from Gv$session s
join Gv$process p
on s.paddr = p.addr
and s.inst_id = p.inst_id
where s.type != 'BACKGROUND'
Essa consulta também funcionaria se você não estiver executando um RAC.
Se você estiver usando uma ferramenta como o PL/SQL Developer, a janela de sessões também o ajudará a encontrá-la.
Para um "kill" um pouco mais forte, você pode especificar a palavra-chave IMMEDIATE, que instrui o banco de dados a não esperar a conclusão da transação:
alter system kill session 'sid,serial#' immediate;
2. Nível do SO - Emitir um SIGTERM
kill pid
Isso pressupõe que você esteja usando Linux ou outra variante *nix. Um SIGTERM é um sinal de término do sistema operacional para o processo específico solicitando que ele pare de executar. Ele tenta deixar o processo terminar normalmente.
Fazer isso errado pode resultar no encerramento de processos essenciais do SO, portanto, tenha cuidado ao digitar.
Você pode encontrar o
pid
, process id, executando a consulta a seguir, que também fornecerá informações úteis, como o terminal do qual o processo está sendo executado e o nome de usuário que o está executando, para que você possa garantir a escolha correta. select p.*
from v$process p
left outer join v$session s
on p.addr = s.paddr
where s.sid = ?
and s.serial# = ?
Mais uma vez, se você estiver executando um RAC, precisará alterar um pouco para:
select p.*
from Gv$process p
left outer join Gv$session s
on p.addr = s.paddr
where s.sid = ?
and s.serial# = ?
Alterando o
where
cláusula para where s.status = 'KILLED'
irá ajudá-lo a encontrar processos já mortos que ainda estão "em execução". 3. SO - Emitir um SIGKILL
kill -9 pid
Usando o mesmo
pid
você pegou em 2, um SIGKILL é um sinal do sistema operacional para um processo específico que faz com que o processo termine imediatamente. Mais uma vez, tenha cuidado ao digitar. Isso raramente deve ser necessário. Se você estiver fazendo DML ou DDL, isso interromperá o processamento de qualquer reversão e pode dificultar a recuperação do banco de dados para um estado consistente em caso de falha.
Todas as opções restantes matarão todas as sessões e resultarão em seu banco de dados - e no caso do servidor 6 e 7 também - ficar indisponível. Eles só devem ser usados se for absolutamente necessário...
4. Oráculo - Desligue o banco de dados
shutdown immediate
Na verdade, isso é mais educado do que um SIGKILL , embora obviamente ele atue em todos os processos no banco de dados e não em seu processo específico. É sempre bom ser educado com seu banco de dados.
O encerramento do banco de dados só deve ser feito com o consentimento do seu DBA, se você tiver um. É bom contar também para as pessoas que usam o banco de dados.
Ele fecha o banco de dados, encerrando todas as sessões e faz um
rollback
em todas as transações não confirmadas. Pode demorar um pouco se você tiver grandes transações não confirmadas que precisam ser revertidas. 5. Oráculo - Desligue o banco de dados (a maneira menos agradável)
shutdown abort
Isso é aproximadamente o mesmo que um SIGKILL , embora mais uma vez em todos os processos no banco de dados. É um sinal para o banco de dados parar tudo imediatamente e morrer - um acidente grave. Ele encerra todas as sessões e não reverte; por isso pode significar que o banco de dados demora mais para
startup
novamente. Apesar da linguagem incendiária, um shutdown abort
não é puro mal e normalmente pode ser usado com segurança. Como antes, informe primeiro as pessoas relevantes.
6. SO - Reinicie o servidor
reboot
Obviamente, isso não apenas interrompe o banco de dados, mas também o servidor, portanto, use com cautela e com o consentimento de seus administradores de sistema, além dos DBAs, desenvolvedores, clientes e usuários.
7. SO - A última etapa
A reinicialização não funcionou... Uma vez que você tenha alcançado este estágio, é melhor esperar que esteja usando uma VM. Acabamos deletando...