Las transacciones se registran en la tabla dba_locks:
SQL> select * from dba_locks;
SESSION_ID LOCK_TYPE MODE_HELD MODE_REQUESTED LOCK_ID1 LOCK_ID2 LAST_CONVERT BLOCKING_OTHERS
---------- -------------------------- ---------------------------------------- ---------------------------------------- ---------------------------------------- ---------------------------------------- ------------ ----------------------------------------
552 Media Recovery Share None 201 0 4418031 Not Blocking
530 DML Row-X (SX) None 12723 0 7170 Not Blocking
530 Transaction Exclusive None 196634 19744 7170 Not Blocking
Donde la columna LOCK_TYPE la que indica el tipo de bloqueo, siendo el que nos interesa el del tipo "transaction"
Para identificar a que corresponde la transaccion pendiente, revisar los siguientes post del blog:
http://eloraculodelpinguino.blogspot.com/2011/01/oracle-identificar-la-query-que-se-esta.html
http://eloraculodelpinguino.blogspot.com/2011/01/oracle-identificar-proceso-oracle.html
Para identificar la sesion completa se toma el valor de la columna SESSION_ID y se busca en la tabla v$session:
SQL> select sid,serial#,username,program from v$session where sid=530;
SID SERIAL# USERNAME PROGRAM
---------- ---------- ------------------------------ ------------------------------------------------
530 1648 TAMP sqlplus@cch (TNS V1-V3)
Una vez identificados el SID y el serial# se termina con la sesión:
SQL> alter system kill session '530,1648';
System altered.
De esa forma se puede consultar nuevamente en la tabla dba_locks donde el registro de la transacción ya debe haber desaparecido.
Buenas explicación, muchas gracias
ResponderEliminarmuy buena explicación gracias!
ResponderEliminar