Una parte importante del desarrollo de una aplicación
cliente / servidor es la gestión de transacciones, el rendimiento del servidor
y la consistencia de los datos depende en gran medida de cómo construyamos y
ejecutemos las transacciones.
Una transacción es una unidad lógica de trabajo sobre la
que agrupamos un conjunto de acciones que se ejecuta de forma ‘todo o
nada’.
Nivel de Aislamiento
SQL Server ofrece cuatro niveles de aislamiento, que
realizan y mantienen bloqueos durante la transacción. Como desarrolladores
debemos recordar que las transacciones deben de ser cortas y lo menos estrictas
posibles, aunque algunas veces nos resulte difícil conseguirlo.
READ
COMMITED
(Predeterminado) La transacción mantiene bloqueos
compartidos sobre los datos durante el tiempo que dura la lectura. No
existe bloqueo que impida a otra transacción modificar los datos una vez
leídos.
READ
UNCOMMITED
Este es el nivel menos restrictivo y permite la
lectura de datos no confirmados por otra transacción.
REPEATABLE READ
Activa y mantiene bloqueos según vamos leyendo
datos, de esta forma evita que sean modificados por otra transacción,
puede hacer que otras transacciones se bloqueen. Solo bloquea datos
existentes, no evita que se puedan añadir nuevas filas.
SERIALIZABLE
Impide que se realicen modificaciones en las tablas
que estamos leyendo, hasta que la transacción termina. Este es el nivel más
restrictivo.
Como se procesan las transacciones.
El procesamiento de transacciones se lleva a cabo de tres
formas en SQL Server:
AUTOCONFIRMACION
(Predeterminado) Cada instrucción de T-SQL crea su
propia transacción y se confirma cuando finaliza.
IMPLÍCITA
Algunos comandos SQL hacen que SQL Server de comienzo
a una transacción, que nosotros finalizaremos con el pertinente COMMIT
WORK o ROLLBACK WORK
EXPLICITA
Con este modo el desarrollador es el responsable de
controlar la transacción desde el programa, iniciándola (BEGIN TRAN) y
finalizarla (COMMIT WORK / ROLLBACK WORK
¿Y los Triggers?
Puede que alguna sentencia incluida en la transacción
dispare un Trigger, los Triggers ya operan dentro del ámbito de una transacción
ya sea explicita o implícita, por ello solo incluiremos la instrucción
ROLLBACK WORK dentro de ellos.
La próxima semana código de ejemplo.
Luis
Rey García
Advanced & Frontdata Systems
Advanced & Frontdata Systems