DP-900: como dominar transacções ACID em Azure SQL Database
Neste guia vou ensinar a competência de transacções e propriedades ACID em bases de dados relacionais no Azure — um tema frequente no DP-900 e essencial na prática para garantir integridade dos dados. Vais ver o que é cada propriedade ACID, como executar transacções em Azure SQL Database e um exemplo prático em T-SQL.
O que precisas de saber
ACID é um conjunto de propriedades que descrevem o comportamento de transacções em sistemas relacionais:
- Atomicidade: uma transacção é «tudo ou nada» — ou todas as alterações são aplicadas, ou nenhuma é aplicada.
- Consistência: a transacção leva a base de dados de um estado consistente para outro estado consistente (regras de integridade são mantidas).
- Isolamento: as transacções concorrentes não interferem de forma incontrolada entre si; o resultado é como se fossem executadas em série, dependendo do nível de isolamento.
- Durabilidade: uma vez confirmada (COMMIT), a alteração permanece mesmo que haja falha do sistema.
No Azure, serviços como Azure SQL Database (PaaS) e SQL Server em VMs suportam transacções ACID. A forma como geres as transacções em T-SQL é a mesma; o serviço Azure trata da disponibilidade, durabilidade e recuperação.
Como funciona
Na prática, controlas transacções com comandos T-SQL: BEGIN TRAN, COMMIT e ROLLBACK. Usa TRY...CATCH para gerir erros e garantir ROLLBACK em caso de falha. Exemplo típico: transferir saldo entre duas contas — operação que deve 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 padrão assegura atomicidade (ou a transferência completa ou nada), consistência (verificação do saldo), isolamento (outras transacções não verão estados intermédios, dependendo do nível de isolamento) e durabilidade (COMMIT torna a operação persistente).
Na prática — níveis de isolamento
O isolamento controla fenómenos como leitura suja, leitura não repetível e phantom reads. Os níveis comuns no SQL Server / Azure SQL Database são:
- READ UNCOMMITTED — permite leituras sujas (mais rápido, menos seguro).
- READ COMMITTED — padrão: evita leituras sujas.
- REPEATABLE READ — evita leituras não repetíveis.
- SERIALIZABLE — maior isolamento; impede phantom reads; pode reduzir a concorrência.
- SNAPSHOT — isolamento baseado em versões; evita muitos bloqueios e evita leituras sujas/não repetíveis/phantoms, mas consome tempdb/recursos.
Escolher o nível correcto é um compromisso entre integridade e desempenho. Em Azure SQL Database, SNAPSHOT pode ser útil para cenários de leitura intensiva sem bloqueios.
Erros comuns
- Não usar ROLLBACK em blocos TRY...CATCH — pode deixar a transacção aberta e causar bloqueios e deadlocks.
- Escolher um nível de isolamento demasiado permissivo (READ UNCOMMITTED) para operações financeiras — arrisca leituras inconsistentes.
- Manter transacções longas — quanto mais tempo uma transacção estiver aberta, maior a probabilidade de bloqueios e conflito com outras transacções. Faz transacções curtas e atomizadas.
Como praticar
Para praticar esta competência, usa o ambiente gratuito do Azure (ou uma instância local de SQL Server) e executa exercícios de criação de tabelas, simulação de transferências e testes com diferentes níveis de isolamento. A Microsoft fornece um Practice Assessment OFICIAL e gratuito para DP-900 e uma study guide no Microsoft Learn — ambos gratuitos e recomendados para orientar a tua revisão. Usa-os para verificar o teu conhecimento e para identificar áreas onde precisas de mais prática.
Em resumo
- ACID define Atomicidade, Consistência, Isolamento e Durabilidade — são essenciais para confiabilidade das transacções.
- Controla transacções com BEGIN TRAN / COMMIT / ROLLBACK e usa TRY...CATCH para gerir erros.
- Escolhe o nível de isolamento adequado ao equilíbrio entre integridade e desempenho (READ COMMITTED, SNAPSHOT, SERIALIZABLE, ...).
- Pratica em Azure SQL Database e usa o Practice Assessment e a study guide oficiais da Microsoft para avaliar o progresso.