viernes, 13 de mayo de 2011

Matar sesiones de un usuario

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