Estou configurando um sistema de prova de conceito que possui um back-end do SQL Server 2017.
O sistema usa tabelas temporais para registrar configurações de ativos e rastrear alterações ao longo do tempo.
Eu tenho uma tabela de dados que está vinculada à tabela de histórico, vamos chamá-la de dbo.MSSQL_TemporaryHistoryFor_12345678900.
Por enquanto, tudo bem. Eu tenho dois problemas:
Hoje, desativei o controle de versão na tabela para poder adicionar uma coluna computada. Isso foi feito e ativado novamente sem erros.
Agora, acho que não consigo consultar nenhum dado histórico antes da alteração. Novos dados estão sendo adicionados ao histórico, mas não há nada de antemão.
Olhando para dentro do SSMS, agora posso ver que existem várias tabelas de histórico, todas com o mesmo nome, mas com um sufixo hexadecimal, por exemplo, dbo.MSSQL_TemporaryHistoryFor_12345678900_A0B1C2D3. Eles não estão vinculados abaixo da tabela de dados principal. Eles estão flutuando por conta própria dentro do banco de dados. Quando consultei sys.tables, elas não são mostradas como tabelas de histórico e não estão vinculadas à tabela de dados principal.
Essas tabelas contêm os dados históricos que estão faltando.
As perguntas que tenho são, portanto:
- O que essas tabelas adicionais representam?
- Como eles foram criados?
- Existe alguma maneira de vinculá-los de alguma forma à cadeia principal de histórico para que eu possa recuperar meus relatórios históricos?
É muito frustrante, portanto qualquer ajuda que você puder fornecer será recebida com gratidão. Obrigado.
Respostas:
Você precisa fornecer o nome da tabela de histórico para manter a continuidade dos dados ao ativar e desativar a versão do sistema. Esse comportamento é mencionado na documentação para ALTER TABLE :
Aqui está uma demonstração. Vou criar a tabela de exemplo da documentação:
Isso resulta em uma tabela de histórico denominada
MSSQL_TemporalHistoryFor_1253579504
. Agora vou desativar e habilitar a versão do sistema:E eu estou na sua situação exata:
Agora vou limpar tudo:
Em seguida, crie a tabela com um nome de tabela de histórico específico:
Em seguida, ative e desative o controle de versão do sistema, mas continue especificando o nome da tabela de histórico:
Nota: em sua situação específica, você poderá usar esta sintaxe para "reconectar" uma tabela de histórico perdida à sua tabela base
Sem mesas extras:
O takeaway
Sempre especifique um nome de tabela de histórico explicitamente ao criar tabelas temporais ou ativar a versão do sistema.
Os documentos da Microsoft agora chamam isso especificamente na página Parando a versão do sistema em uma tabela temporal com versão do sistema :
fonte