среда, 8 августа 2012 г.

Отключение сессий в Oracle

Отключить конкретную сессию Oracle:

1) Выполнить запрос SELECT и посмотреть текущие сессии.

select t.SID, t.SERIAL#, t.osuser as "User", t.MACHINE as "PC", t.PROGRAM as "Program"
from v$session t
--where (NLS_LOWER(t.PROGRAM) = 'cashreg.exe') -- посмотреть сессии от программы cashreg.exe
--where status='ACTIVE' and osuser!='SYSTEM' -- посмотреть пользовательские сессии
--where username = 'схема' -- посмотреть сессии к схеме (пользователь)
order by 4 asc;


2) Заменить 'SID,Serial#' на 'SID,Serial#' полученных из запроса SELECT


ALTER SYSTEM KILL SESSION 'SID,Serial#' IMMEDIATE;

Убиваются не сразу, нужно подождать несколько секунд.



Убийство всех сессий к схеме Oracle

/* 
This script terminates all connections to the user schema. Username must be specified in the script before execution.
The sessions may exist in the "KILLED" state while the transactions roll back

*/

define USERNAME = SCOTT

begin 
for i in (select SID, SERIAL# from V$SESSION where USERNAME = upper('&&USERNAME')) loop 
execute immediate 'alter system kill session '''||i.SID||','||i.SERIAL#||''' immediate';
end loop;
end;
/