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"
Tags: Oracle
Posted in Oracle | 2 Comments »
noviembre 5th, 2010 at 03:02
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
noviembre 9th, 2010 at 18:52
Hola disculpa la tardanza.
He añadido un ejemplo práctico al final del post.
Un saludo 😉