piątek, 10 grudnia 2010

Wycinanie sesji użytkownika w Oracle

Czasem bywa tak, że któryś użytkownik nadmiernie obciąża nam system, jakieś zapytanie się zapętli, albo z różnych innych przyczyn chcemy rozłączyć użytkownika.
Do tego celu potrzebne nam będą informacje o SIDzie i SERIALu sesji usera którego chcemy wyciąć. Te informacje możemy uzyskać z dynamicznego słownika v$session:


Kodzik:

select * from v$session;


W tym słowniku mamy naprawdę sporo informacji o aktualnie podłączonych sesjach. Zaczynając od nazw podłączonych użyszkodników, przez nazwę hosta z którego jest podłączony aż po nazwę programu z jakiego korzysta skończywszy. Nas interesują dwie kolumny: SID oraz SERIAL#. Użytkownik którego chcę się pozbyć ma wartości odpowiednio 22,29. Mogę go teraz ubić na trzy różne sposoby:

ALTER SYSTEM KILL SESSION '22,29'

Najzwyczajniej w świecie ubija proces, wycofuje wszystkie transakcje. Od razu przerywa sesję użytkownika cokolwiek by ten nie robił. Kasuje też blokady na tabelach jeśli takowy użytkownik jakieś założył.

ALTER SYSTEM DISCONNECT SESSION '22,29' POST_TRANSACTION;


To jest takie delikatniejsze wypraszanie delikwenta. Pozwala mu zakończyć trwające transakcje, czeka na ROLLBACK lub COMMIT po czym mówi "dziękuję, dobranoc. Nie ma takiego łączenia!"

Jest jeszcze

ALTER SYSTEM DISCONNECT SESSION '22,29' IMMEDIATE; 

który jest odpowiednikiem KILL SESSION, działa w sumie bardzo podobnie. Użyszkodnik dostaje trochę inny komunikat.

Brak komentarzy:

Prześlij komentarz