Interrompendo o controle de versão do sistema em uma tabela temporal com controle de versão do sistema

Aplica-se a: SQL Server 2016 (13.x) e versões posteriores Banco de Dados SQL do AzureInstância Gerenciada de SQL do Azure

É aconselhável parar o controle de versão em sua tabela temporal temporariamente ou permanentemente. Você pode fazer isso configurando a cláusula SYSTEM_VERSIONING como OFF.

Falha ao definir SYSTEM_VERSIONING = OFF

Pare o controle de versão do sistema se quiser realizar operações de manutenção específicas em uma tabela temporal ou se não precisar mais de uma tabela com controle de versão. Como resultado dessa operação, você obterá duas tabelas independentes:

  • A tabela atual com a definição do período

  • Tabela de histórico como uma tabela normal

Observações importantes

  • A tabela de histórico interrompe a captura das atualizações durante SYSTEM_VERSIONING = OFF.
  • Nenhuma perda de dados ocorre na tabela temporal quando você define SYSTEM_VERSIONING = OFF ou remove o período de SYSTEM_TIME .
  • Quando você define SYSTEM_VERSIONING = OFF e não remove o período SYSTEM_TIME, o sistema continua a atualizar as colunas de período de cada operação de inserção e atualização. As exclusões na tabela atual são permanentes.
  • Remova o período SYSTEM_TIME para excluir as colunas de período.
  • Quando você define SYSTEM_VERSIONING = OFF, todos os usuários com permissões suficientes podem modificar o esquema e o conteúdo da tabela de histórico ou até mesmo excluir permanentemente a tabela de histórico.
  • Não é possível definir SYSTEM_VERSIONING = OFF quando você tem outros objetos criados com SCHEMABINDING usando extensões de consulta temporais, como ao referenciar o SYSTEM_TIME. Essa restrição impede que esses objetos falhem quando você define SYSTEM_VERSIONING = OFF.

Remover permanentemente o SYSTEM_VERSIONING

Este exemplo remove permanentemente o SYSTEM_VERSIONING e exclui as colunas de período completamente. A remoção das colunas de período é opcional.

ALTER TABLE dbo.Department SET (SYSTEM_VERSIONING = OFF);
/*Optionally, DROP PERIOD if you want to revert temporal table to a non-temporal*/
ALTER TABLE dbo.Department
DROP PERIOD FOR SYSTEM_TIME;

Remover temporariamente o SYSTEM_VERSIONING

Esta é a lista de operações que requer que a versão do sistema seja definida como OFF:

  • Removendo dados desnecessários do histórico (DELETE ou TRUNCATE)
  • Removendo dados da tabela atual sem controle de versão (DELETE, TRUNCATE)
  • Executar SWITCH OUT da partição da tabela atual
  • Executar SWITCH IN da partição na tabela de histórico

Este exemplo interrompe temporariamente o SYSTEM_VERSIONING para permitir que você execute operações de manutenção específicas. Se parar temporariamente o controle de versão como um pré-requisito para a manutenção da tabela, é altamente recomendável fazer isso dentro de uma transação para manter a consistência dos dados.

Observação

Ao ativar novamente o controle de versão do sistema, não se esqueça de especificar o argumento HISTORY_TABLE. Se isso não for feito, uma tabela de histórico será criada e será associada à tabela atual. A tabela de histórico original ainda poderá existir como uma tabela normal, mas não será associada à tabela atual.

BEGIN TRAN
ALTER TABLE dbo.Department SET (SYSTEM_VERSIONING = OFF);
TRUNCATE TABLE [History].[DepartmentHistory]
WITH (PARTITIONS (1,2))
ALTER TABLE dbo.Department SET
(
SYSTEM_VERSIONING = ON (HISTORY_TABLE = History.DepartmentHistory)
);
COMMIT ;

Próximas etapas