En Oracle existen varias formas de Matar una sesión de usuario, Aquí va un ejemplo de un procedimiento que puede hacerlo, sirve para versiones 10g y anteriores, recibe como parametro el usuario a cancelar y elimina todas las sesiones
CREATE OR REPLACE PROCEDURE Matar_una_sesion ( Usuario in varchar2) AS
Sesion varchar2(20);
Serial varchar2(20);
Cursor_Sql integer;
Retorno integer;
Comando VARCHAR2(100);
CURSOR CurSes_usuario IS
select s.serial#, s.sid
from v$session s, v$process p
where s.paddr = p.addr
and s.username=upper(Usuario)
and s.username is not null;
BEGIN
OPEN CurSes_usuario;
LOOP
FETCH CurSes_usuario
INTO serial,sesion; /* traer sid, y serial del usuario a Matar */
EXIT WHEN CurSes_usuario%NOTFOUND;
begin
Comando := 'Alter System kill Session' || CHR(10) || CHR(39)||sesion||','||serial||CHR(39);
Cursor_Sql := dbms_sql.open_cursor;
dbms_sql.parse(Cursor_Sql,comando,dbms_sql.v7);
retorno := dbms_sql.execute(Cursor_Sql) ;
dbms_sql.close_cursor(Cursor_Sql);
EXCEPTION
WHEN OTHERS THEN
raise_application_error(-20001,'Error Al Ejecutar Comandos',TRUE);
IF dbms_sql.is_open(Cursor_Sql) THEN
dbms_sql.close_cursor(Cursor_Sql);
END IF;
end;
END LOOP;
End;
No hay comentarios:
Publicar un comentario