DP-900: cómo dominar transacciones ACID en Azure SQL Database
En esta guía voy a enseñar la competencia de transacciones y propiedades ACID en bases de datos relacionales en Azure —un tema frecuente en el DP-900 y esencial en la práctica para garantizar la integridad de los datos. Verás qué es cada propiedad ACID, cómo ejecutar transacciones en Azure SQL Database y un ejemplo práctico en T-SQL.
Lo que necesitas saber
ACID es un conjunto de propiedades que describen el comportamiento de las transacciones en sistemas relacionales:
- Atomicidad: una transacción es «todo o nada» — o todos los cambios se aplican, o ninguno se aplica.
- Consistencia: la transacción lleva la base de datos de un estado consistente a otro estado consistente (las reglas de integridad se mantienen).
- Aislamiento: las transacciones concurrentes no interfieren de forma descontrolada entre sí; el resultado es como si se ejecutaran en serie, dependiendo del nivel de aislamiento.
- Durabilidad: una vez confirmada (COMMIT), la modificación permanece incluso si hay una falla del sistema.
En Azure, servicios como Azure SQL Database (PaaS) y SQL Server en VMs soportan transacciones ACID. La forma en que gestionas las transacciones en T-SQL es la misma; el servicio Azure se encarga de la disponibilidad, durabilidad y recuperación.
Cómo funciona
En la práctica, controlas las transacciones con comandos T-SQL: BEGIN TRAN, COMMIT y ROLLBACK. Usa TRY...CATCH para gestionar errores y garantizar ROLLBACK en caso de fallo. Ejemplo típico: transferir saldo entre dos cuentas — operación que debe ser atómica.
-- Exemplo simplificado: transferir 100 da conta A para a conta B
BEGIN TRANSACTION;
BEGIN TRY
UPDATE Accounts SET Balance = Balance - 100 WHERE AccountId = 'A';
UPDATE Accounts SET Balance = Balance + 100 WHERE AccountId = 'B';
-- Verifica integridade simples
IF (SELECT Balance FROM Accounts WHERE AccountId = 'A') < 0
BEGIN
THROW 50000, 'Saldo insuficiente', 1;
END
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION;
-- Regista o erro (ex.: RAISERROR/PRINT/INSERT numa tabela de logs)
DECLARE @ErrMsg NVARCHAR(4000) = ERROR_MESSAGE();
PRINT @ErrMsg;
END CATCH;
Este patrón asegura atomicidad (o la transferencia completa o nada), consistencia (verificación del saldo), aislamiento (otras transacciones no verán estados intermedios, dependiendo del nivel de aislamiento) y durabilidad (COMMIT hace la operación persistente).
En la práctica — niveles de aislamiento
El aislamiento controla fenómenos como lectura sucia, lectura no repetible y phantom reads. Los niveles comunes en SQL Server / Azure SQL Database son:
- READ UNCOMMITTED — permite lecturas sucias (más rápido, menos seguro).
- READ COMMITTED — por defecto: evita lecturas sucias.
- REPEATABLE READ — evita lecturas no repetibles.
- SERIALIZABLE — mayor aislamiento; impide phantom reads; puede reducir la concurrencia.
- SNAPSHOT — aislamiento basado en versiones; evita muchos bloqueos y evita lecturas sucias/no repetibles/phantoms, pero consume tempdb/recursos.
Elegir el nivel correcto es un compromiso entre integridad y rendimiento. En Azure SQL Database, SNAPSHOT puede ser útil para escenarios de lectura intensiva sin bloqueos.
Errores comunes
- No usar ROLLBACK en bloques TRY...CATCH — puede dejar la transacción abierta y causar bloqueos y deadlocks.
- Elegir un nivel de aislamiento demasiado permisivo (READ UNCOMMITTED) para operaciones financieras — arriesga lecturas inconsistentes.
- Mantener transacciones largas — cuanto más tiempo esté abierta una transacción, mayor la probabilidad de bloqueos y conflicto con otras transacciones. Haz transacciones cortas y atomizadas.
Cómo practicar
Para practicar esta competencia, usa el entorno gratuito de Azure (o una instancia local de SQL Server) y ejecuta ejercicios de creación de tablas, simulación de transferencias y pruebas con diferentes niveles de aislamiento. Microsoft proporciona un Practice Assessment OFICIAL y gratuito para DP-900 y una study guide en Microsoft Learn — ambos gratuitos y recomendados para orientar tu repaso. Úsalos para verificar tu conocimiento y para identificar áreas donde necesitas más práctica.
En resumen
- ACID define Atomicidad, Consistencia, Aislamiento y Durabilidad — son esenciales para la fiabilidad de las transacciones.
- Controla transacciones con BEGIN TRAN / COMMIT / ROLLBACK y usa TRY...CATCH para gestionar errores.
- Elige el nivel de aislamiento adecuado al equilibrio entre integridad y rendimiento (READ COMMITTED, SNAPSHOT, SERIALIZABLE, ...).
- Practica en Azure SQL Database y usa el Practice Assessment y la study guide oficiales de Microsoft para evaluar el progreso.