4 de junio de 2001

Transacciones con SQL Server (I)

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