Oracle – Control de transacciones

Written by lopezatienza on 23/12/2008 – 16:38 -

CONTROL DE TRANSACCIONES

DEFINICION: Conjunto de operaciones dependientes unas de otras que se realizan en la BD. Para que la transacción se ejecute, han de realizarse todas y cada una de las partes u operaciones que la componen; En el caso de que alguna falle se dará por fallida toda la transacción.

 

El usuario puede definir el comienzo y el fin de una transacción.

 

EN ORACLE:

.- Comienza la transacción con la 1º orden SQL de la sesión de usuario o con la 1º orden posterior a la finalización de la transacción anterior.

.- Finaliza cuando se ejecuta un comando de control de transacción (commit o rollback) , una orden de definición de datos (DDL) o cuando finaliza la sesión.

 

Una vez concluida la transacción esta no se puede deshacer.

 

COMANDOS DE CONTROL DE TRANSACION

.-COMMIT: Da por concluida la transacción haciendo definitivos los cambios efectuados, liberando las filas bloqueadas. Solo después de que se ejecute un commit los demás usuarios tendrán acceso a los datos modificados.

 

.- ROLLBACK: Da por concluida la transacción deshaciendo los cambios efectuados y liberando las filas bloqueadas.

 

.-ROLLBACK IMPLICITOS: Cuando  un programa falla y no se controla la excepción que produjo el fallo. Se deshacen todas las operaciones excepto aquellas que dentro del programa hayan sido confirmadas.

 

.-SAVEPOINT <PUNTO DE SALVAGUARDA>: Se usa con “rollback to” para marcar puntos de salvaguarda a la hora de procesar transacciones. Esto permitirá deshacer parte de una transacción.

 

.-ROLLBACK TO <PUNTO DE SALVAGUARDA>: Deshace el trabajo realizado sobre la BD después del punto de salvaguarda. No obstante tampoco confirma el trabajo hecho hasta el punto de salvaguarda. La transacción en realidad no se confirma o rechaza hasta que aparece un commit o un rollback.

 

 

I1

I2

SAVEPOINT P1

I3

I4

SAVEPOINT P2

I5

I6

ROLLBACK TO P1

COMMIT/ROLLBACK

 

Los ámbitos de p1, p2 dependen del a transacción.

 

 

·         TRANSACCIÓN AUTONOMA

 

Son las que  se pueden confirmar o rechazar con independencia de lo que ocurre en la transacción en curso. Y viceversa, lo que ocurra con la transacción en curso no afecta a la autónoma.

Se usan en pequeños programas o bloques.

Se declaran en la sesión declarativa como:

         PRAGMA AUTONOMOUS_TRANSACTION; (se crea la transacción autónoma)

…………………………….

Commit / rollback;

 

UPDATE

UPDATE

 

F(X)à pragma autonomous_transaction i1 i2 i3 i4 commit;

 

Rollback

UPDATE

UPDATE

 

·         TRANSACIONES DE SOLO LECTURA

 

Se usan para garantizar la consistencia de los datos recuperados entre distintas consultas frente a posibles cambios que puedan ocurrir entre ellas.

 

El comienzo de una transacción de solo lectura se establece con SET TRANSACTION READ ONLY. Todas las consultas que se ejecuten después solamente verán aquellos cambios confirmados antes del comienzo de la transacción. (Como si hiciéramos una fotografía de la BD). Se confirma o rechaza con commit o rollback.

 

Antes del una transacción read only hay que hacer un rollback o commit o algo que finalice la transacción actual.

 

 

Muestro un ejemplo práctico:

 

insert into COMFORT values ('WALPOLE', '22-APR-01',50.1, 24.8, 0);

 

savepoint A;

 

insert into COMFORT values ('WALPOLE', '27-MAY-01',63.7, 33.8, 0);

 

savepoint B;

 

insert into COMFORT values ('WALPOLE', '07-AUG-01',83.0, 43.8, 0);

 

Now, select the data from COMFORT for Walpole:

 

select * from COMFORT where City = 'WALPOLE';

 

CITY                    SAMPLEDAT        NOON        MIDNIGHT        PRECIPITATION

WALPOLE        21-MAR-01            56.7        43.8            0
WALPOLE        22-JUN-01            56.7        43.8            0
WALPOLE        22-JUN-01            56.7        43.8            0
WALPOLE        23-SEP-01            86.3        72.1
WALPOLE        22-DEC-01            -7.2        -1.2            3.9
WALPOLE        22-APR-01            50.1        24.8            0
WALPOLE        27-MAY-01            63.7        33.8            0
WALPOLE        07-AUG-01            83        43.8            0

 

The output shows the five former records plus the three new rows we’ve added. Now roll back just the last insert:

 

rollback to savepoint B;

 

If you now query COMFORT, you’ll see that the last insert has been rolled back, but the others are still there:

 

select * from COMFORT where City = 'WALPOLE';

CITY                    SAMPLEDAT        NOON        MIDNIGHT        PRECIPITATION

WALPOLE        21-MAR-01            56.7        43.8            0
WALPOLE        22-JUN-01            56.7        43.8            0
WALPOLE        22-JUN-01            56.7        43.8            0
WALPOLE        23-SEP-01            86.3        72.1
WALPOLE        22-DEC-01            -7.2        -1.2            3.9
WALPOLE        22-APR-01            50.1        24.8            0
WALPOLE        27-MAY-01            63.7        33.8            0

The last two records are still not committed; you need to execute a commit command or another command to force a commit to occur. You can still roll back the second insert (to savepoint A) or roll back all of the inserts (via a rollback command).

 

Referencia del ejemplo práctico: "Oracle9i: The Complete Reference"

 

 


Autor: Antonio Lopez Atienza


Tags:
Posted in Oracle | 2 Comments »

2 Comments to “Oracle – Control de transacciones”

  1. Adrian Says:

    Disculpa las molestias, pero me preguntaba si de casualidad no tienes un ejemplo de esta informacion pero ya implementado, debido a que entiendo la informacion, mas no se como ponerla en practica en oracle.
    muchas gracias

  2. lopezatienza Says:

    Hola disculpa la tardanza.

    He añadido un ejemplo práctico al final del post.

    Un saludo 😉

Leave a Comment

 

RSS
MCC D5E