infra: SIGESA – ORACLE Bloqueo por sesiones

  • Si se indica que SIGESA esta lento podría se rculpa de la sesiones activas
  • Para esto abrimos la CONSOLADB
  • Luego ubicamos el programa toad for Oracle
  • Esto nos abre la ventana donde podemos seleccionar la conexion que desamos para nuestro caso SIGESA-PROD
  • Así
  • Ahora debemos abrir menu -> Database -> Monitor -> Session Browser
  • esto nos muestra las cantidad de sesiones activas por base de datos
  • para liberarlas clic derecho kill sessions
  • Confirmamos
  • Luego de esto verificar que no hay bloqueos
  • Para conocer si ORACLE se encuentra bloqueado por sessiones mal cerradas debemo ejecutar el siguiente script dentro de TOAD para conocer cuantas sesiones están activas
 
--GENERICA SESIONES INACTIVAS

SET SERVEROUTPUT ON;

BEGIN

  FOR r IN (

            SELECT

                decode(l.type, 'TM', 'TABLE', 'TX', 'Record(s)')               type_lock,

                decode(l.request, 0, 'NO', 'YES')                             wait,

                s.osuser                                                   osuser_locker,

                s.process                                                  process_locker,

                s.username                                                 dbuser_locker,

                o.object_name                                              object_name,

                o.object_type                                              object_type,

                s.status,

                concat(' ', s.program)                                      program,

                o.owner                                                    owner,

                s.sid,

                s.serial#,

                s.machine

            FROM

                v$lock       l,

                dba_objects  o,

                v$session    s

            WHERE

                    l.id1 = o.object_id

                AND s.sid = l.sid

                AND l.type IN ('TM','TX')

    ) 

  LOOP

  begin

      EXECUTE IMMEDIATE 'alter system kill session ''' || r.sid  || ',' || r.serial# || ''' immediate' ;

      dbms_output.put_line('sid:'||r.sid||' serial='||r.serial#)        ;

      --update sobterm set sobterm_crn_oneup = 41879 where sobterm_term_code = '202410';

      EXCEPTION WHEN OTHERS THEN

             dbms_output.put_line('ya maracad para borrar sid:'||r.sid||' serial='||r.serial#)        ;

  end;

  END LOOP;

END;

/
 
set serveroutpu on;

--borrar por máquina o fecha o estado

BEGIN

  FOR r IN (

            select SERIAL#,SID,MACHINE,logon_time,USER,STATUS from gv$session 

            where  TO_CHAR(logon_time,'DD/MM/YYYY') < TO_CHAR(SYSDATE,'DD/MM/YYYY') 

            AND MACHINE NOT IN ('x7m','MOLTAR','ZORAK')

            --AND MACHINE like '%Admision%'

            --AND MACHINE like '%INBPROD%'

            AND STATUS='INACTIVE'

            AND logon_time < TO_CHAR(SYSDATE,'DD/MM/YYYY')

) 

  LOOP

  begin

      EXECUTE IMMEDIATE 'alter system kill session ''' || r.sid  || ',' || r.serial# || ''' immediate' ;

      dbms_output.put_line('sid:'||r.sid||' serial='||r.serial#)        ;

      EXCEPTION WHEN OTHERS THEN

             dbms_output.put_line('ya maracad para borrar sid:'||r.sid||' serial='||r.serial#)        ;

  end;

  END LOOP;

END;

/
 
 
 
 
 
SELECT decode(L.TYPE,'TM','TABLE','TX','Record(s)') TIPO_BLOQUEO,

       decode(L.REQUEST,0,'NO','YES') ESPERA,

       S.SECONDS_IN_WAIT SEGUNDOS_EN_ESPERA,

       decode(l.LMODE,0,'none',1,'null (NULL)',2,'row-S (SS)',3,'row-X (SX)',4,'share (S)',5,'S/Row-X (SSX)',6,'exclusive (X)') MODO_BLOQUEO,

       S.OSUSER USUARIO_SIST_OPERAT,

       S.USERNAME USUARIO_BD,

       S.PROCESS PROCESS_LOCKER,

       S.MACHINE MAQUINA,

       O.OBJECT_NAME OBJETO_BLOQUEADO,

       O.OBJECT_TYPE OBJETO_TIPO,

       concat(' ',s.PROGRAM) PROGRAMA,

       O.OWNER PROPIETARIO,

       S.SID,

       S.SERIAL#

  FROM v$lock L,

       dba_objects O,

       v$session S

WHERE L.ID1 = O.OBJECT_ID

   AND S.SID = L.SID

   AND L.TYPE in ('TM','TX') ;