Jak stále dostáváte stránky s výsledky, předpokládám, že jste relaci zahájili v SQL*Plus. Pokud ano, je snadné provést bash ctrl + přestávka mnohokrát, dokud se nezastaví.
Složitější a obecnější způsob (způsoby) podrobně uvádím níže v pořadí zvyšující se zuřivost / zlo. První z nich bude pravděpodobně fungovat pro vás, ale pokud ne, můžete pokračovat v pohybu v seznamu.
Většina z nich se nedoporučuje a může mít nezamýšlené následky.
1. Úroveň Oracle - Zabijte proces v databázi
Podle odpovědi ObiWanKenobiho a dokumentace ALTER SESSION
alter system kill session 'sid,serial#';
Chcete-li najít sid
, ID relace a serial#
, sériové číslo, spusťte následující dotaz – shrnutý z OracleBase – a najděte svou relaci:
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'
Pokud provozujete RAC, musíte toto mírně změnit, aby se zohlednilo více instancí, inst_id
je to, co je identifikuje:
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'
Tento dotaz by také fungoval, pokud nepoužíváte RAC.
Pokud používáte nástroj, jako je PL/SQL Developer, pak vám jej pomůže najít také okno relace.
Pro trochu silnější "zabití" můžete zadat klíčové slovo IMMEDIATE, které dá databázi pokyn, aby nečekala na dokončení transakce:
alter system kill session 'sid,serial#' immediate;
2. Úroveň operačního systému – Vydejte SIGTERM
kill pid
To předpokládá, že používáte Linux nebo jinou variantu *nix. SIGTERM je signál ukončení z operačního systému do konkrétního procesu, který jej žádá o zastavení běhu. Snaží se nechat proces řádně ukončit.
Pokud to uděláte špatně, může to vést k ukončení základních procesů operačního systému, takže buďte při psaní opatrní.
Můžete najít pid
, ID procesu, spuštěním následujícího dotazu, který vám také sdělí užitečné informace, jako je terminál, ze kterého proces běží, a uživatelské jméno, které jej spouští, abyste se mohli ujistit, že vyberete to správné.
select p.*
from v$process p
left outer join v$session s
on p.addr = s.paddr
where s.sid = ?
and s.serial# = ?
Ještě jednou, pokud provozujete RAC, musíte to mírně změnit na:
select p.*
from Gv$process p
left outer join Gv$session s
on p.addr = s.paddr
where s.sid = ?
and s.serial# = ?
Změna where
klauzule na where s.status = 'KILLED'
vám pomůže najít již zabitý proces, který stále "běží".
3. OS - Vydejte SIGKILL
kill -9 pid
Pomocí stejného pid
jste si vyzvedli za 2, SIGKILL je signál z operačního systému do určitého procesu, který způsobí okamžité ukončení procesu. Opět buďte opatrní při psaní.
To by mělo být nutné jen zřídka. Pokud jste prováděli DML nebo DDL, zastaví se zpracování jakéhokoli vrácení zpět a může znesnadňují obnovu databáze do konzistentního stavu v případě selhání.
Všechny zbývající možnosti ukončí všechny relace a povedou k tomu, že se vaše databáze – av případě serveru 6 a 7 – stane nedostupnou. Měly by být používány pouze v případě, že je to naprosto nezbytné...
4. Oracle - Vypněte databázi
shutdown immediate
To je ve skutečnosti zdvořilejší než SIGKILL , i když zjevně působí na všechny procesy v databázi spíše než na váš konkrétní proces. Je to vždy je dobré být ke své databázi zdvořilý.
Vypnutí databáze by mělo být provedeno pouze se souhlasem vašeho DBA, pokud jej máte. Je hezké to říct i lidem, kteří databázi používají.
Uzavře databázi, ukončí všechny relace a provede rollback
na všechny neprovedené transakce. Pokud máte velké nepotvrzené transakce, které je třeba vrátit zpět, může to chvíli trvat.
5. Oracle - Vypněte databázi (méně pěkný způsob)
shutdown abort
To je přibližně stejné jako SIGKILL , i když ještě jednou na všechny procesy v databázi. Je to signál pro databázi, aby vše okamžitě zastavila a zemřela – tvrdý pád. Ukončí všechny relace a neprovede žádné vrácení zpět; z tohoto důvodu to může znamenat, že startup
databáze trvá déle znovu. Navzdory pobuřujícímu jazyku se shutdown abort
není čisté zlo a lze jej normálně bezpečně používat.
Stejně jako dříve informujte nejprve příslušné osoby.
6. OS - Restartujte server
reboot
Je zřejmé, že to zastaví nejen databázi, ale i server, takže používejte opatrně a se souhlasem vašich systémových administrátorů, správců databází, vývojářů, klientů a uživatelů.
7. OS - Poslední fáze
Nefungoval mi restart... Jakmile dosáhnete této fáze, raději doufejte, že používáte VM. Nakonec jsme to smazali...