Parar o controle de versão de sistema em uma tabela temporal com controle de versão de sistema

Aplica-se a: SQL Server 2016 (13.x) e posterior Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure

Talvez você queira parar o controle de versão em sua tabela temporal de forma temporária ou permanente. Faça isso definindo a cláusulaSYSTEM_VERSIONING como OFF.

Defina 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

Comentários

A tabela de histórico para de capturar as atualizações durante o SYSTEM_VERSIONING = OFF.

Nenhuma perda de dados ocorre na tabela temporal quando você define SYSTEM_VERSIONING = OFF ou descarta o período SYSTEM_TIME.

Quando você define SYSTEM_VERSIONING = OFF e não descarta 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.

O período SYSTEM_TIME deverá ser descartado para que as colunas de período possam ser excluídas. Para remover as colunas de período, use ALTER TABLE <table> DROP <column>;. Para obter mais informações, consulte Alterar o esquema de uma tabela temporal com controle de versão do sistema.

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 há outros objetos criados com SCHEMABINDING usando extensões de consulta temporais, como ao referenciar 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 SYSTEM_VERSIONING e exclui as colunas de período. 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

A lista a seguir contém a lista de operações que exigem que o controle de versão do sistema seja definido como OFF:

  • Removendo dados desnecessários do histórico (DELETE ou TRUNCATE)
  • Removendo dados da tabela atual sem controle de versão (DELETE, TRUNCATE)
  • Partição SWITCH OUT da tabela atual
  • Partição SWITCH IN 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 você parar temporariamente o controle de versão como um pré-requisito para a manutenção da tabela, é altamente recomendável fazer essa alteração dentro de uma transação para manter a consistência dos dados.

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 mais associada à tabela atual.

BEGIN TRANSACTION;

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;