Dozvola za ubijanje (sesija)
Thursday, 11.03.2010 – DejanNe proÄ‘e skoro nijedan dan, a da me barem jedan programer ne gnjavi da mu ubijem zablokiranu sesiju. PoÅ¡to nemam baÅ¡ vremena da se cimam i oko toga, odluÄio sam da svakom programeru dozvolim ubijanje vlastitih sesija.
Takođe ne volim otkrivati toplu vodu, pa sam za ovaj problem malo proguglao i našao sasvim zadovoljavajuće rješenje od Toma Kyte-a, a ono izgleda ovako:
1. svakom programeru dodijeliti privilegiju, da može selektovati potrebne podatke iz v_$session (sid, serial#):
grant select on v_$session to programer;
2. Ako već nemate nekog “poweruser” korisnika (“non-SYS user with a DBA role“), onda kreirajte jednog, pa s tim korisniÄkim nalogom kreirajte jednu proceduru, koja će ubijati željenu sesiju:
create or replace procedure poweruser.kill_session( p_sid in number, p_serial# in number) is ignore pls_integer; BEGIN select count(*) into ignore from V$session where username = USER and sid = p_sid and serial# = p_serial#; if ( ignore = 1 ) then execute immediate ' alter system kill session ''' || to_char(p_sid,'999999')||','|| to_char(p_serial#,'999999')||''''; else raise_application_error( -20001, 'You do not own session ''' || p_sid || ',' || p_serial# || '''' ); end if; END; /
3. dozvolite izvršavanje te procedure svim programerima:
grant execute on kill_session to programer;
To je to – nema viÅ¡e svakodnevnog cimanja u vezi ubijanja sesija.
One Response to “Dozvola za ubijanje (sesija)”
I ja sam uradio neÅ¡to sliÄno. Za razliku od tvog reÅ¡enja, dodao sam informaciju o aplikaciji u client_info polje u v$session. Aplikacije sam napravio tako da na poÄetku setuju client_info, pa kod sledećeg ulaska u aplikaciju, ako postoji proces koji ima odgovarajući podatak u client_info, sistem nudi da se ubije prethodno napravljeni proces.
By Djordje on Mar 11, 2010