lunes, 6 de mayo de 2013

Transacciones Pendientes

Hallé este ejemplo aquí: http://laurentschneider.com/wordpress/2010/10/how-to-check-if-i-have-a-pending-transaction.html

Era escrito en inglés y por eso decidí hacer una traducción española.

Creé el ejemplo en Oracle 10 en mi propio ordenador en Linux. Cuando instalaba Oracle en la máquina, también añadí el idioma español. Esta vez los mensajes, por ejemplo Sesion modificada son en español lo que me gusta.
¿Cómo puedo verificar si tenga una transacción pendiente? Éste es sencillo. Hay que mirar si dbms_transaction.step_id sea null:

SQL> alter session set nls_language = 'SPANISH';

Sesion modificada.

SQL> create table t (col1 number);

Tabla creada.

SQL> select dbms_transaction.step_id from dual;

        STEP_ID
---------------


SQL> 


… o tal vez: 

SQL> select
  2  nvl(to_char(dbms_transaction.step_id), 'NULL')
  3  as step_id from dual;

STEP_ID
----------------------------------------
NULL

SQL>

En este momento (arriba), no tengo ninguna transacción pendiente y dbms_transaction.step_id es  vacío.
Tras hacer un INSERT en una tabla (abajo), un valor aparece en dbms_transaction.step_id:

 SQL> insert into t values (1);

1 fila creada.

SQL> select dbms_transaction.step_id from dual;

        STEP_ID
---------------
202312287467529

SQL>


Si hago un COMMIT, la transacción pendiente termina y el valor desaparece de dbms_transaction.step_id:

SQL> commit;

Confirmacion terminada.

SQL> select dbms_transaction.step_id from dual;

        STEP_ID
---------------



SQL>

También se puede acabar una transacción pendiente con un ROLLBACK y el valor en dbms_transaction_step_id desaparece otra vez:

SQL> insert into t values (2);

1 fila creada.

SQL> select dbms_transaction.step_id from dual;

        STEP_ID
---------------
236397147896370

SQL> rollback;

Rollback terminado.

SQL> select dbms_transaction.step_id from dual;

        STEP_ID
---------------


SQL>

No hay comentarios:

Publicar un comentario