Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

bloqueo

Estas en el tema de bloqueo en el foro de Oracle en Foros del Web. buenos dias, tengo un problema veran nuestra sala de servidores han tenido problemas con fallos de luz y algunos procedimientos que se habian venido ejecutando ...
  #1 (permalink)  
Antiguo 05/06/2008, 11:45
 
Fecha de Ingreso: diciembre-2004
Mensajes: 156
Antigüedad: 19 años, 3 meses
Puntos: 0
bloqueo

buenos dias, tengo un problema veran nuestra sala de servidores han tenido problemas con fallos de luz y algunos procedimientos que se habian venido ejecutando con normalidad en la actualidad han presentado problemas...no se ejecutan con normalidad pero al ejecutarlos en el editor sql se ejecuta bien--- no se que hacer y al destruir la session se pega el servidor que puede ser? no son privilegios...
  #2 (permalink)  
Antiguo 05/06/2008, 11:47
 
Fecha de Ingreso: diciembre-2004
Mensajes: 156
Antigüedad: 19 años, 3 meses
Puntos: 0
Respuesta: bloqueo

el error que aparece es este al momento de ejecutarlo ORA-04021: timeout occurred while waiting to lock object SP_INS_COSTO
  #3 (permalink)  
Antiguo 06/06/2008, 03:26
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Respuesta: bloqueo

Verifica que todos los paquetes dependientes ( incluido el ) estén compilados.

Ese error suele dar cuando intentas compilar un pl ( para implementar una modificacion, por ejemplo ) y en ese momento está siendo utilizado.
  #4 (permalink)  
Antiguo 06/06/2008, 08:11
 
Fecha de Ingreso: diciembre-2004
Mensajes: 156
Antigüedad: 19 años, 3 meses
Puntos: 0
Respuesta: bloqueo

bueno corri este query

SELECT oracle_username, os_user_name,locked_mode,object_name,object_type
FROM v$locked_object a, DBA_OBJECTS b
WHERE a.object_id=b.object_id

y me dicen que hay algunas tablas estan bloquedas para el usuario en diferentres niveles 2 o 3 como las desbloqueo?
  #5 (permalink)  
Antiguo 06/06/2008, 09:00
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 5 meses
Puntos: 85
Respuesta: bloqueo

Hola,

Te dejo una consulta con un poco mas de informacion, pero basicamente es la misma

http://www.oracle-base.com/dba/monit...ed_objects.sql

La vista V$LOCKED_OBJECTS es dinamica por lo tanto registros son variables, si hay un objeto que esta lockeado en forma persistente, debes identificar la sesion responsable y si corresponde, un kill.

Código:
alter system kill session 'sid,serial#';
Saludos
  #6 (permalink)  
Antiguo 06/06/2008, 12:52
 
Fecha de Ingreso: diciembre-2004
Mensajes: 156
Antigüedad: 19 años, 3 meses
Puntos: 0
Respuesta: bloqueo

no he podido resolver sigo viendolos pero el codigo que me enviaste me falta elseria ya que aparece el sid pero no da error
  #7 (permalink)  
Antiguo 06/06/2008, 18:50
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 5 meses
Puntos: 85
Respuesta: bloqueo

Hola,

Para obtener el resto de la informacion tienes la vista V$SESSION, ahi encontraras el serial#.

Saludos
  #8 (permalink)  
Antiguo 09/06/2008, 01:38
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Respuesta: bloqueo

Prueba esta :

select logon_time,p.spid,SID,S.SERIAL#,s.lockwait,s.modul e,s.program
, s.osuser, n.owner ||'.'||n.object_name, s.status
from v$session s , v$process p , v$locked_object l , all_objects n
where s.sid = l.session_id
and l.object_id = n.object_id
and p.addr=s.paddr

Si el LOCKWAIT está relleno , ese objeto está bloqueado .Ahí tienes el SID y el SERIAL# para hacer el KILL SESSION y si se queda pillao en STATUS = KILLED, el P.SPID es el identificador del proceso del sistema operativo para que puedas hacer un KILL-9 en UNIX o matarlo en windows

Esta otra query te identifica el usuario que está sufriendo el bloqueo y el que lo está provocando, muy util.


SELECT /*+ CHOOSE */
BS.USERNAME "BLOCKING_USER",
BS.USERNAME "DB_USER",
BS.OSUSER "BLOCKING_OSUSER",
WS.USERNAME "WAITING_USER",
WS.OSUSER "WAITING_OSUSER",
BS.SID "SID",
WS.SID "WSID",
BS.SQL_ADDRESS "ADDRESS",
BS.SQL_HASH_VALUE "SQL_HASH",
BS.PROGRAM "BLOCKING_APP",
WS.PROGRAM "WAITING_APP",
BS.MACHINE "BLOCKING_MACHINE",
WS.MACHINE "WAITING_MACHINE",
BS.OSUSER "BLOCKING_OS_USER",
WS.OSUSER "WAITING_OS_USER",
BS.SERIAL# "SERIAL",
DECODE(wk.TYPE,
'MR', 'Media Recovery',
'RT', 'Redo Thread',
'UN', 'USER Name',
'TX', 'Transaction',
'TM', 'DML',
'UL', 'PL/SQL USER LOCK',
'DX', 'Distributed Xaction',
'CF', 'Control FILE',
'IS', 'Instance State',
'FS', 'FILE SET',
'IR', 'Instance Recovery',
'ST', 'Disk SPACE Transaction',
'TS', 'Temp Segment',
'IV', 'Library Cache Invalidation',
'LS', 'LOG START OR Switch',
'RW', 'ROW Wait',
'SQ', 'Sequence Number',
'TE', 'Extend TABLE',
'TT', 'Temp TABLE',
wk.TYPE) lock_type,
DECODE(hk.lmode,
0, 'None',
1, 'NULL',
2, 'ROW-S (SS)',
3, 'ROW-X (SX)',
4, 'SHARE',
5, 'S/ROW-X (SSX)',
6, 'EXCLUSIVE',
TO_CHAR(hk.lmode)) mode_held,
DECODE(wk.request,
0, 'None',
1, 'NULL',
2, 'ROW-S (SS)',
3, 'ROW-X (SX)',
4, 'SHARE',
5, 'S/ROW-X (SSX)',
6, 'EXCLUSIVE',
TO_CHAR(wk.request)) mode_requested,
TO_CHAR(hk.id1) lock_id1,
TO_CHAR(hk.id2) lock_id2
FROM
v$lock hk, v$session bs,
v$lock wk, v$session ws
WHERE
hk.block = 1
AND hk.lmode != 0
AND hk.lmode != 1
AND wk.request != 0
AND wk.TYPE (+) = hk.TYPE
AND wk.id1 (+) = hk.id1
AND wk.id2 (+) = hk.id2
AND hk.sid = bs.sid(+)
AND wk.sid = ws.sid(+)
ORDER BY 1
  #9 (permalink)  
Antiguo 09/06/2008, 08:09
 
Fecha de Ingreso: diciembre-2004
Mensajes: 156
Antigüedad: 19 años, 3 meses
Puntos: 0
Respuesta: bloqueo

hermano agradezco muchisimo el interes en mi caso y que me ayuden en este problema, pero aun continua, el query que me diste me arroja el lockwait vacio con el status killed, de igual forma mato la session, busco el proceso en el servidor para verlo segun el ultimo query q me diste y aun nada...no se que hacer...otra alternativa?

el error que da ora-00031 session marked for kill

cuando la destruyo

Última edición por arameo2010; 09/06/2008 a las 08:14 Razón: me falto algo
  #10 (permalink)  
Antiguo 09/06/2008, 08:35
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Respuesta: bloqueo

Ok.
Lo que tienes que hacer ahora, es hacer un KILL -9 al spid que sale en EL PRIMER QUERY.

El KILL-9 es en máquinas UNIX y tienes que hacerlo con permisos de ROOT, si es una maquina windows, presiona CTRL+ALT+SUPR y en el administrador de tareas, pestaña procesos, en la columna PID busca el SPID que te ha devuelto la primera consulta y lo cierras.

Si no sale el SPID ( algunas veces desaparece ) ese proceso suele desaparecer al reiniciar la máquina cliente que ha ejecutado dicho proceso.
  #11 (permalink)  
Antiguo 09/06/2008, 09:01
 
Fecha de Ingreso: diciembre-2004
Mensajes: 156
Antigüedad: 19 años, 3 meses
Puntos: 0
Respuesta: bloqueo

ok una pregunta...el segundo query ahy un campo que se llama blocking_machine alli me aparece el nombre de uno de nuestros sevidores el cual es el datawarehose lo reinicio? es ese el sevidor que me estagenerando error?
  #12 (permalink)  
Antiguo 10/06/2008, 00:50
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Respuesta: bloqueo

A ver, que lo miro.......
El blocking_machine es la maquina desde donde se ha lanzado la transacción que está forzando los bloqueos.
No necesitas reiniciarlo, si tienes el SPID simplemente calzate ese proceso a nivel de sistema operativo ( Unix-Linux-Windows ...... ). Si no tienes ese identificador o lo dejas hasta que oracle lo calze de manera definitiva ó intentas tirar la máquina. Siendo uno de los servers, no te lo recomiendo.................
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:26.