Com o lançamento do SQL Server 2022, Azure SQL Database e Azure SQL Managed Instance, os administradores e desenvolvedores de banco de dados ganharam uma poderosa funcionalidade: operações resumable (resumable operations) para o comando ALTER TABLE ... ADD CONSTRAINT.
Essa novidade amplia as possibilidades de manutenção em tabelas grandes e melhora em muito a resiliência em ambientes de missão crítica.
O que são operações resumable?
As operações resumable permitem que comandos longos e pesados, como a criação ou reconstrução de índices e a partir de agora, a adição de constraints, sejam pausados, retomados ou continuados em caso de falhas. Isso oferece mais flexibilidade em ambientes que exigem alta disponibilidade e pouco tempo de manutenção.
Os índices resumable já estavam disponíveis para:
- Criação e reconstrução de índices online (
CREATE INDEX/ALTER INDEX) - Compatível com SQL Server 2019, Azure SQL Database e Managed Instance
E agora foi estendido para:
ALTER TABLE ADD CONSTRAINTcom chavesPRIMARY KEYeUNIQUE KEY- Exclusivo no SQL Server 2022 em diante
Como funciona na prática?
A operação de ALTER TABLE ADD CONSTRAINT pode demorar horas em tabelas grandes, e antes, qualquer falha exigia reiniciar todo o processo. Com a nova funcionalidade, é possível:
- Pausar e retomar a operação dentro de janelas de manutenção.
- Continuar após falhas como quedas de conexão, failover ou falta de espaço em disco.
- Evitar sobrecarga nos logs de transação, mesmo com pouco espaço disponível.
Requisitos necessários
- O comando deve ser executado com a opção
ONLINE = ON - Só se aplica a
PRIMARY KEYeUNIQUE KEY - Não há suporte para
FOREIGN KEY
Exemplo de uso
ALTER TABLE dbo.Clientes
ADD CONSTRAINT PK_Clientes PRIMARY KEY CLUSTERED (ID)
WITH (ONLINE = ON, RESUMABLE = ON, MAX_DURATION = 60);
ONLINE = ON: mantém a tabela disponível durante a operação.RESUMABLE = ON: ativa a operação recomeçável.MAX_DURATION = 60: pausa a operação automaticamente após 60 minutos.
Como pausar, retomar ou cancelar a operação
Para pausar, retomar ou cancelar a operação resumable, use os comandos do ALTER INDEX como no exemplo abaixo:
-- Pausar
ALTER INDEX PK_Clientes ON dbo.Clientes PAUSE;
-- Retomar
ALTER INDEX PK_Clientes ON dbo.Clientes RESUME;
-- Abortar
ALTER INDEX PK_Clientes ON dbo.Clientes ABORT;
Considerações finais
Essa novidade representa um grande avanço para quem administra bases de dados VLDB (Very Large Databases), especialmente em ambientes que não podem se dar ao luxo de longas janelas de indisponibilidade. As operações resumable trazem resiliência, flexibilidade e melhor aproveitamento dos recursos do servidor.
Quer mais dicas de T-SQL ou boas práticas para ambientes de alta disponibilidade? Deixe um comentário ou entre em contato!