with vencido specified retry resource recurso ora ocupado obtenido nowait necessary increase expired especificado error ddl_lock_timeout con busy and acquire 11g sql oracle unix ora-00054

vencido - sql error 54 61000]: ora 00054 resource busy and acquire with nowait specified or timeout expired



ORA-00054: recurso ocupado y adquisición con NOWAIT especificado (5)

Cuando eliminó la sesión, la sesión se suspende por un tiempo en estado "KILLED" mientras que Oracle la limpia.

Si es absolutamente necesario, también puede cancelar el proceso del sistema operativo (busque v$process.spid ), lo que liberaría cualquier bloqueo al que estuviera sujeto.

Vea this para información más detallada.

Maté un script que estaba en medio de actualizar una tabla. Ahora, cuando vuelvo a ejecutar el guión que estoy recibiendo,

ORA-00054: recurso ocupado y adquisición con NOWAIT especificado

Supongo que la mesa está cerrada. ¿Cómo desbloqueo la mesa? Gracias por adelantado.


Dependiendo de su situación, la tabla que se está bloqueando puede ser parte de una operación normal y no desea simplemente cancelar la transacción de bloqueo. Lo que quiere hacer es hacer que su declaración espere el otro recurso. Oracle 11g tiene tiempos de espera DDL que pueden configurarse para hacer frente a esto.

Si está tratando con 10g, tiene que ser más creativo y escribir algunos PL / SQL para manejar el reintento. Mire Cómo moverse ORA-00054 en Oracle 10g. Esto vuelve a ejecutar su declaración cuando se produce una excepción resource_busy.


Gracias por el usuario de información ''user712934''

También puede buscar información sobre el sql, nombre de usuario, máquina, puerto y acceder al 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;


Tendrá que esperar. La sesión que fue eliminada estaba en medio de una transacción y actualizó muchos registros. Estos registros tienen que ser revertidos y algún proceso de fondo se está encargando de eso. Mientras tanto, no puede modificar los registros que fueron tocados.


paso 1:

select object_name, s.sid, s.serial#, p.spid from v$locked_object l, dba_objects o, v$session s, v$process p where l.object_id = o.object_id and l.session_id = s.sid and s.paddr = p.addr;

paso 2:

alter system kill session `''sid,serial#'';--sid` and `serial#` get from step 1

Más información: http://www.oracle-base.com/articles/misc/killing-oracle-sessions.php