|
Typickým příkladem je situace, kdy vývojář spustí v databázi nějaký nevyladěný dotaz a ten začne neúměrně spotřebovávat zdroje v databázi. Nejčastěji se jedná o CPU. Vy to zjistíte například přes databázovou konzoli. V takovém případě je nejjednodušší dané připojení "killnout" pomocí příkazu:
ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE; nebo ve verzi 11g je i další příkaz ALTER SYSTEM DISCONNECT SESSION 'sid,serial#' IMMEDIATE;
Přesto se může stát, že dané připojení stále visí v databázi a to i přestože je označené jako KILLED. Tohle je obvyklé, je-li potřeba provést ROLLBACK, ale trvá-li daný rollback nepřiměřeně dlouho je jasné, že nemáte na výběr a musíte session odstranit na úrovni operačního systému. V unixech vám k tomu dopomůže příkaz kill.
1) Nejdříve však musíte dané připojení jednoznačně identifikovat.
SQL> SET LINESIZE 100 COLUMN spid FORMAT A10 COLUMN username FORMAT A10 COLUMN program FORMAT A45
SELECT s.inst_id, s.sid, s.serial#, p.spid, s.username, s.program FROM gv$session s JOIN gv$process p ON p.addr = s.paddr AND p.inst_id = s.inst_id WHERE s.type != 'BACKGROUND' and sid=287;
INST_ID SID SERIAL# SPID USERNAME PROGRAM ---------- ---------- ---------- ---------- ---------- --------------------------------------------- 1 287 25938 18146 TEST SQL Developer
SQL> select username, status from v$session where status='KILLED';
USERNAME STATUS ---------- -------- TEST KILLED
2) Odstranění procesu z OS
oracle@test:~> ps -ef | grep 18146 oracle 18146 1 95 Mar15 ? 21:31:08 oracleprod (LOCAL=NO) oracle 18418 14337 0 07:54 pts/0 00:00:00 grep 18146
oracle@test:~> kill -9 18146
3) Kontrola, že je session opravdu odstraněná
SQL> select username, status from v$session where status='KILLED';
no rows selected
SQL> SQL> SET LINESIZE 100 COLUMN spid FORMAT A10 COLUMN username FORMAT A10 COLUMN program FORMAT A45
SELECT s.inst_id, s.sid, s.serial#, p.spid, s.username, s.program FROM gv$session s JOIN gv$process p ON p.addr = s.paddr AND p.inst_id = s.inst_id WHERE s.type != 'BACKGROUND' and sid=287;
no rows selected
|