Dnes je: 21. května 2012

Ostatní

Autor knihy

Oracle Database 11g - Hotová řešení

Kdo je online

Právě připojeni - hostů: 26 

Přihlásit se




Odstranění neaktivního přípojení z databáze/operačního systému

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

 

Anketa

Využívají vaše databáze pro ukládání souborů ASM? (automatic storage management)
 

Certifikát Oracle Certifikát Oracle Certifikát Oracle Certifikát Oracle Certifikát Oracle Certifikát Oracle

Partnerské internetové stránky:
www.oracledba.cz www.asktom.cz www.tomas-solar.cz