SQL Server Temp Table
Temporal Tables, também conhecida como System-Versioned, é a nova feature incluída no SQL Server 2016 para armazenamento de dados históricos. Todas as alterações realizadas pelos usuários na tabela atual são armazenadas de maneira simples e prática em outra tabela com a finalidade de manter o versionamento das informações. Temporal Tables podem ser utilizadas em diversos cenários, dentre os quais podemos destacar a auditoria de dados, onde é possível realizar uma análise detalhada em um determinado período no tempo, recuperação de dados excluídos ou modificados acidentalmente pelo usuário e versionamento de dados em um ambiente de Data Warehouse (ETL).
Armazenar informações atuais e históricas é um processo relevante dentro do mundo corporativo, pois permitem uma análise mais detalhada dos acontecimentos ao longo do tempo. Este artigo tem a finalidade de mostrar como funciona a nova feature denominada Temporal Tables, suas principais características, limitações e exemplos práticos que podem auxiliar o DBA e desenvolvedores na análise de dados.
Temporal Tables é um novo tipo de tabela de usuário e está disponível em todas as versões do SQL Server 2016. Sua finalidade é manter o histórico completo de alterações de dados em tabelas específicas, permitindo uma análise e acompanhamento dos dados ao longo do tempo. É conhecida também como system-versioned, pois o período de validade de cada linha é gerenciado pelo mecanismo de banco de dados.
Temporal Tables é recurso nativo do SQL Server 2016 e não requer qualquer configuração adicional na instância ou no banco de dados. A implementação é realizada através de duas tabelas: uma para manter os dados atuais e outra para armazenar as modificações na tabela histórica. Durante a criação da estrutura da tabela, obrigatoriamente temos que especificar uma chave primária (Primary Key) e as colunas de início e fim do período com o tipo de dados datetime2 para que seja possível manter o versionamento e a validade de cada linha, além de uma cláusula adicional para habilitar a funcionalidade. Uma vez habilitada, o gerenciamento é feito pelo próprio SQL Server.
Quando um usuário de aplicação realiza qualquer modificação na tabela que armazena os dados atuais, automaticamente a versão anterior da linha é gravada na tabela histórica para futuras consultas, conforme podemos observar na Figura 1.
Alguns pré-requisitos devem ser atendidos para que seja possível utilizar a Temporal Tables:
- a tabela atual deve conter a chave primária (PK);
- uma coluna com o tipo de dados DATETIME2 e com a cláusula GENERATED ALWAYS AS ROW START para identificar a data de início da validade do registro;
- uma coluna com o tipo de dados DATETIME2 e com a cláusula GENERATED ALWAYS AS ROW END para identificar a data de término da validade do registro;
- a tabela deverá ser especificada com a cláusula SYSTEM_VERSIONING igual a ON para permitir a utilização da tabela histórica.
Cenários recomendados
Alguns cenários são recomendados para o uso de Temporal Tables, o que pode trazer benefícios e agilidade para as atividades desenvolvidas na empresa:
- Auditoria sobre os dados modificados na tabela através de análises minuciosas e detalhadas de diversos períodos ao longo do tempo;
- Recuperação de dados que foram modificados ou excluídos acidentalmente pelo usuário sem a necessidade de restauração de backups, que dependendo do ambiente e tamanho da base de dados, pode ser um processo demorado até que o objetivo seja alcançado;
- Auxiliar o versionamento de dados em um ambiente de Data Warehouse (ETL).
Existem algumas limitações e restrições em Temporal Tables quando SYSTEM_VERSIONING estiver ON:
- Tabela atual e histórica:
- Não é possível utilizar os comandos DDL para exclusão, adição ou exclusão de colunas;
- Não é possível utilizar FILETABLE e FILESTREAM;
- Excluir os dados através do comando TRUNCATE TABLE não é permitido;
- Linked Server não é suportado nas consultas aos dados de Temporal Tables.
- Somente tabela histórica:
- Não é possível a utilização de constraints (Primary Key, Foreign Keys, Default, etc.);
- Dados históricos não podem ser modificados;
- Não é possível a utilização de INSTEAD OF Triggers na tabela histórica.
Entretanto, as seguintes operações são permitidas em Temporal Tables:
- Criação de índices e reconstrução (Rebuild) de índices;
- Criação de estatísticas.
Gerenciamento da retenção de dados de tabelas históricas
O gerenciamento do período de retenção de dados históricos utilizando a Temporal Table deve ser planejado e implementado de acordo com as regras de negócio de cada aplicação. Após determinar o ...
Confira outros conteúdos:
Perguntas frequentes
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.