Pasado algún tiempo me he dado cuenta de que tenemos ORA-00054 error al intentar problema SELECT ... FOR UPDATE NOWAIT, durante el gran número de actualizaciones simultáneas a la base de datos. Este desarrollo de nuestro sistema y que realmente no tiene ningún otro usuario, o al menos eso es lo que creemos.

Hemos sido a través de los registros de nuestra aplicación y parece que todo está en orden; sin hilos están tratando de actualizar la misma fila.

¿Cómo puedo configurar Oracle db para generar un registro en el que me lo haría saber el id de usuario que contiene el bloqueo cuando se produjo este error?

InformationsquelleAutor AppleGrew | 2012-04-30

3 Comentarios

  1. 7

    desde aquí: ORA-00054: recurso ocupado y adquirir con NOWAIT especificado

    También puede buscar el sql,el nombre de usuario de la máquina,puerto de la información y conseguir que el proceso real que mantiene la conexión

    SELECT O.OBJECT_NAME, S.SID, S.SERIAL#, P.SPID, S.PROGRAM,S.USERNAME,
    S.MACHINE,S.PORT , S.LOGON_TIME,SQ.SQL_FULLTEXT 
    FROM V$LOCKED_OBJECT L, DBA_OBJECTS O, V$SESSION S, 
    V$PROCESS P, V$SQL SQ 
    WHERE L.OBJECT_ID = O.OBJECT_ID 
    AND L.SESSION_ID = S.SID AND S.PADDR = P.ADDR 
    AND S.SQL_ADDRESS = SQ.ADDRESS;
    • Gracias. Sin embargo, en mi caso la causa fue la contención de la ley del isr. Tuvimos filas más pequeñas, por lo que muchos de ellos se empaquetan en un solo bloque. Encabezado de no reservar suficiente espacio para ITL entradas cuando todas las filas estaban cerradas simultáneamente.
  2. 3

    Quitar el NOWAIT, y monitor de DBA_BLOCKERS/DBA_WAITERS.

    • Por desgracia, eso no es una opción para mí, ya que el código que hace que se adentra en el interior del marco que utilizamos. También no tenemos el código fuente.
    • Usted puede ser capaz de modificar las instrucciones SQL con DBMS_ADVANCED_REWRITE: dioncho.wordpress.com/2009/03/06/…
    • Sería interesante saber si eso es posible en un SELECT … PARA ACTUALIZAR NOWAIT-estoy bastante seguro de que no podía anular la NOWAIT como que no forma parte de la sub-instrucción select que se especificarán en dbms_advanced_rewrite.
    • Tienes razón, no funciona con FOR UPDATE NOWAIT. Obtengo el error ORA-30389: the source statement is not compatible with the destination statement.

Dejar respuesta

Please enter your comment!
Please enter your name here