RollBack

En tecnologías de base de datos, un rollback es una operación que devuelve a la base de datos a algún estado previo. Los Rollbacks son importantes para la integridad de la base de datos, a causa de que significan que la base de datos puede ser restaurada a una copia limpia incluso después de que se han realizado operaciones erróneas. Son cruciales para la recuperación de crashes de un servidor de base de datos; realizando rollback (devuelto) cualquier transacción que estuviera activa en el tiempo del crash, la base de datos es restaurada a un estado consistente.


Invocación
Esta sentencia se puede incorporar a un programa de aplicación o emitir mediante el uso de sentencias de SQL dinámico. Se trata de una sentencia ejecutable que puede prepararse de forma dinámica.

Autorización
No se necesita.

Descripción
La unidad de trabajo en la que se ejecuta la sentencia ROLLBACK se termina y se inicia una nueva unidad de trabajo. Se restituyen todos los cambios realizados en la base de datos durante la unidad de trabajo.

Sin embargo, las sentencias siguientes no están bajo el control de la transacción y los cambios que realicen serán independientes de la emisión de la sentencia ROLLBACK:

SET CONNECTION
SET ENCRYPTION PASSWORD
SET EVENT MONITOR STATE
SET PASSTHRU (aunque la sentencia SET PASSTHRU no está bajo el control de la transacción, la sesión PASSTHRU que la sentencia inicia está bajo el control de la transacción.)
SET SERVER OPTION
Una sentencia SET que establece un registro especial actualizable.

Notas

Cuando se ejecuta un ROLLBACK de la unidad de trabajo se liberan todos los bloqueos mantenidos. Se cierran todos los cursores abiertos. Se liberan todos los localizadores de LOB.
La ejecución de la sentencia ROLLBACK no afecta a las sentencias SET que cambian los valores del registro especial ni a la sentencia RELEASE. 

Si el programa finaliza de forma anómala, la unidad de trabajo se retrotrae implícitamente.
El almacenamiento en antememoria de sentencias se ve afectado por la operación de retrotracción.
El efecto que una sentencia ROLLBACK TO SAVEPOINT tiene sobre los cursores depende de las sentencias contenidas en el punto de salvaguarda.
Si el punto de salvaguarda contiene un DDL del cual depende un cursor, el cursor se marca como no válido. Los intentos para utilizar ese cursor dan lugar a un error (SQLSTATE 57007).
En otro caso: 

Si se hace referencia al cursor en el punto de salvaguarda, el cursor permanece abierto y se coloca delante de la primera fila lógica de la tabla de resultados. (FETCH debe realizarse antes de emitirse una sentencia UPDATE o DELETE con posición.)
En otro caso, el cursor no queda afectado por ROLLBACK TO SAVEPOINT (permanece abierto y posicionado).
Las sentencias de SQL dinámico preparadas en un paquete vinculado con la opción KEEPDYNAMIC YES se conservan en el contexto SQL después de una sentencia ROLLBACK. La sentencia se puede volver a preparar de forma implícita, como resultado de operaciones DDL que se retrotraen dentro de la unidad de trabajo.

Las sentencias de SQL dinámico preparadas en un paquete vinculado con KEEPDYNAMIC NO se elimina del contexto SQL tras una operación de retrotracción. La sentencia debe volver a prepararse antes de que se pueda ejecutar en una transacción nueva.
Las sentencias de SQL dinámico siguientes pueden estar activas durante la operación ROLLBACK:
ROLLBACK, sentencia
Sentencias CALL en las que se ha ejecutado la sentencia ROLLBACK 

Una operación ROLLBACK TO SAVEPOINT descartará las tablas temporales creadas que se hayan creado en el punto de salvaguarda. Si una tabla temporal creada se modifica en el punto de salvaguarda y esa tabla se ha definido como no anotada cronológicamente, todas las filas de la tabla se suprimen. 

Una operación ROLLBACK TO SAVEPOINT descartará las tablas temporales declaradas que se hayan declarado en el punto de salvaguarda. Si una tabla temporal declarada se modifica en el punto de salvaguarda y esa tabla se ha definido como no anotada cronológicamente, todas las filas de la tabla se suprimen.

  • Después de una sentencia ROLLBACK TO SAVEPOINT se conservan todos los bloqueos.
  • Después de una operación ROLLBACK TO SAVEPOINT se conservan todos los localizadores de LOB.

No hay comentarios:

Publicar un comentario