Tabela Temporal no SQL Server – Parte 3: Boas Práticas e Limitações

Depois de criar sua Tabela Temporal (Parte 1) e aprender a consultar o histórico de dados com FOR SYSTEM_TIME (Parte 2), é hora de aprofundar a análise com boas práticas, limitações importantes e dicas para uso em ambientes de produção.

Mesmo sendo um recurso robusto e nativo, as Temporal Tables exigem planejamento e conhecimento para não virar uma armadilha de performance e crescimento descontrolado.


⚙️ Como desabilitar o versionamento (temporariamente)

Durante operações de carga ou manutenção, pode ser útil pausar o versionamento para evitar acúmulo desnecessário de histórico.

ALTER TABLE dbo.Cliente 
SET (SYSTEM_VERSIONING = OFF);

E para ativar novamente:

ALTER TABLE dbo.Cliente
SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.Cliente_Hist));

Atenção: ao desligar e religar o versionamento, as versões de linha entre os dois momentos não serão rastreadas.

🧹 Cuidando do crescimento da tabela de histórico

  • A tabela de histórico pode crescer rapidamente. Para isso:

    ⚠️ Evite DELETEs massivos ou UPDATEs frequentes em tabelas versionadas

  • 🧹 Implemente uma rotina de purga automática das versões mais antigas:

O SQL Server 2016 não possui processo automático para limpeza periódica da tabela histórico, esperamos ter em versões futuras. Para evitar com que a tabela histórico fique muito grande, prejudicando o desempenho e ocupando muito espaço, é necessário agendar rotina de limpeza.

BEGIN TRAN
       -- Desabilita Temporal Table em Cliente
       ALTER TABLE dbo.ClienteTemporal SET (SYSTEM_VERSIONING = OFF)

       -- Exclui as linhas
       DELETE FROM dbo.ClienteTemporal WHERE SysStartTime < '20150101'

       -- Habilita Temporal Table em Cliente
       ALTER TABLE dbo.ClienteTemporal SET (SYSTEM_VERSIONING = ON
       (HISTORY_TABLE  = dbo.ClienteTemporal_Hist, DATA_CONSISTENCY_CHECK = OFF))
COMMIT

🔒 Segurança e Controle

  • Proteja a tabela de histórico com permissões específicas

  • Garanta que apenas usuários autorizados possam consultar dados históricos sensíveis

  • Use views para limitar o acesso a colunas sensíveis no histórico


🧪 Considerações Técnicas

  • Índices na tabela de histórico podem melhorar queries, mas aumentam o custo de manutenção

  • A tabela versionada deve ter chave primária

  • Temporal Tables não suportam colunas LOB (TEXT, NTEXT, IMAGE)


🧠 Quando usar (e quando não usar)

✅ Use Temporal Tables quando:

  • Precisa de rastreabilidade e auditoria nativa

  • Deseja consultar o estado dos dados no tempo

  • Precisa de histórico automático, sem triggers ou código adicional

❌ Evite usar quando:

  • Você realiza cargas massivas com UPDATEs frequentes

  • O histórico precisa ser controlado com lógica de negócio customizada

  • O volume de alterações é muito alto e sem valor para auditoria


As Tabelas Temporais são um recurso valioso, mas precisam de estratégia para uso eficiente em produção. Com as práticas corretas, elas oferecem uma solução nativa, segura e altamente confiável para controle de versões no SQL Server.


Fui, mas volto com mais SQL Server em breve!

✍️ Sobre o autor
O Prof. Landry é especialista em Microsoft SQL Server desde 1999, Microsoft Trainer, Professor Universitário e criador do canal SQL Server Expert no YouTube, com conteúdo técnico semanal para DBAs e profissionais de dados.

🚀 Quer aprender mais sobre SQL Server?
👉 Me acompanhe no LinkedIn e inscreva-se no canal para não perder nenhuma dica prática!

0
Subscribe to my newsletter

Read articles from SQL Server Expert directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

SQL Server Expert
SQL Server Expert

O Prof. Landry Duailibe é especialista em Microsoft SQL Server desde 1999, Microsoft Certified Trainer, professor universitário e criador do canal SQL Server Expert no YouTube, onde compartilha conteúdo técnico semanal para DBAs e profissionais de dados. Já ajudou milhares de alunos a evoluírem suas habilidades com SQL Server e conquistarem melhores oportunidades na área de dados.