2011-09-21 8 views
8

de repente mis consultas de actualización no se están ejecutando. puedo hacer seleccionar consultas, pero cuando intento actualizar registra la base de datos cuelga infinitamente. Lo intenté incluso desde sql plus y no pasa nada.La base de datos Oracle cuelga infinitamente en consultas de actualización

+1

Por favor, ¿puede ser más explícito? No hay manera de que podamos * adivinar * qué está pasando en su sistema. ¿Que sabes? ¿Qué has revisado? ¿Cómo funciona su sistema, cuántos usuarios, etc.? ¿Cómo se ve la consulta de actualización? ¿Qué tipo de DML se ejecuta contra la misma tabla al mismo tiempo? –

+0

¿Puede cerrar sesión y volver a estar en OK? ¿Estás en modo ARCHIVELOG? ¿Tiene cambios no confirmados en otra sesión al ubicar su actualización actual? Un poco más de información sería útil .... – Ollie

Respuesta

23

Lo más probable es que tenga otra transacción abierta no confirmada para el mismo conjunto de registros, por lo que están bloqueados para esa transacción.

Y, lo más probable es que los bloqueó, ejecutando el mismo UPDATE en otra transacción.

Simplemente Commit/rollback sus transacciones, usted debe estar bien.

+2

Ahora ** esa ** respuesta es lo que yo llamo una suposición educada ;-) –

+3

Sí. Sí lo es. Cuando llevas un tiempo entrenando y entrenas a principiantes, obtienes ese tipo de vibración de "la fuerza es fuerte en mí" y conoces sus problemas antes de que puedan decirte todo. :) Pero no siempre tengo la razón, por supuesto. –

+0

Conozco ese ambiente. Va bien con "no hable más y observe" :) –

12

Esta consulta le mostrará quién está bloqueando su actualización. Ejecutar la actualización que se cuelga, a continuación, en otra sesión de ejecutar este:

select s1.username || '@' || s1.machine || 
    ' (SID=' || s1.sid || ') is blocking ' 
    || s2.username || '@' || s2.machine || ' (SID=' || s2.sid || ') ' AS blocking_status 
    from v$lock l1 join v$lock l2 on (l1.id1 = l2.id1 and l2.id2 = l2.id2) 
       JOIN v$session s1 ON (s1.sid = l1.sid) 
       JOIN v$session s2 ON (s2.sid = l2.sid) 
    WHERE l1.BLOCK=1 and l2.request > 0; 

EDIT:

atribuir adecuadamente esto, que parece que este cribbed un tiempo de vuelta de ORAFAQ.

+0

Tendré que marcarlo. ¡Muy agradable! –

+1

Lo uso mucho. Ojalá pudiera recordar dónde encontré ese. Posiblemente un especial de Tom Kyte. Actualización: creo que lo tengo aquí: http://orafaq.com/node/854 – DCookie

+0

¿Cómo podemos detener o eliminar la tarea resultante? – user3141985

Cuestiones relacionadas