Los enunciados COMMIT y ROLLBACK y los límites de transacción
Unidades de trabajo y savepoints
Una unidad de trabajo (UOW), también conocida como transacción, es una secuencia recuperable de operaciones dentro de un proceso de aplicación. El ejemplo clásico de una UOW es una transacción bancaria simple para transferir fondos de una cuanta a otra. Existe una inconsistencia (inmediatamente después la aplicación sustrae una cantidad de dinero de una cuenta). Cuando estos cambios se han confirmado, quedan disponibles para otras aplicaciones.
Una UOW inicia implícitamente cuando el primer enunciado SQL dentro de un proceso de aplicación se emite contra la base de datos. Todas las lecturas y escrituras subsiguientes hechas por el mismo proceso de aplicación son consideradas parte de la misma UOW. La aplicación termina el UOW usando un enunciado
COMMIT o un enunciado
ROLLBACK , cualquiera que sea apropiado. El enunciado COMMIT hace permanentes todos los cambios que suceden dentro de la UOW, mientras que el enunciado ROLLBACK revierte estos cambios.
Si la aplicación termina normalmente sin un enunciado
COMMIT ni uno
ROLLBACK , la UOW se confirma automáticamente. Si la aplicación termina anormalmente antes de que termine una UOW, esa unidad de trabajo es revertida automáticamente.
Un savepoint le permite revertir un subconjunto de acciones que constituyen una UOW, sin perder toda la transacción. Usted puede anidar savepoints y tener varios niveles de savepoint activos al mismo tiempo; esto le permite a su aplicación revertirse hacia un savepoint específico, según sea necesario. Suponga que usted tiene tres savepoints (A, B y C) definidos dentro de una UOW particular:
do some work; savepoint A; do some more work; savepoint B; do even more work; savepoint C; wrap it up; roll back to savepoint B; |
La retroacción al savepoint B libera automáticamente el savepoint C, pero los savepoints A y B permanecen activos.
Para más información sobre niveles de savepoint y para un ejemplo detallado que ilustra el soporte sobre savepoint del DB2, vea Recursos.
