Desativar o versionamento de sistema numa tabela temporal versionada pelo sistema

Aplica-se a: SQL Server 2016 (13.x) e versões posteriores Base de Dados SQL do Azure Azure SQL Managed InstanceBase de dados SQL no Microsoft Fabric

Talvez você queira interromper o controle de versão em sua tabela temporal temporária ou permanentemente. Você pode fazer isso definindo a cláusula SYSTEM_VERSIONING como OFF.

Definir SYSTEM_VERSIONING = OFF

Pare de versionar o sistema se quiser realizar operações de manutenção específicas numa tabela temporal ou se já não precisar de uma tabela versionada. Esta operação dá-lhe duas tabelas independentes:

  • Tabela atual com uma definição de período
  • Tabela de histórico como uma tabela regular

Remarks

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

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

Quando defines SYSTEM_VERSIONING = OFF e não eliminas o SYSTEM_TIME período, o sistema continua a atualizar as colunas do período para cada operação de inserção e atualização. As exclusões na tabela atual são permanentes.

Você deve soltar o período de SYSTEM_TIME para excluir as colunas de período. Para remover as colunas de período, use ALTER TABLE <table> DROP <column>;. Para mais informações, veja Alterar o esquema de uma tabela temporal versionada pelo 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 podes definir SYSTEM_VERSIONING = OFF se tiveres outros objetos criados com SCHEMABINDING que usem extensões temporais de consulta, como referenciar SYSTEM_TIME. Essa restrição impede que esses objetos falhem se você definir SYSTEM_VERSIONING = OFF.

Remover permanentemente 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);

Opcionalmente, remove o ponto se quiseres reverter a tabela temporal para uma tabela não temporal.

ALTER TABLE dbo.Department
    DROP PERIOD FOR SYSTEM_TIME;

Remover temporariamente SYSTEM_VERSIONING

As seguintes operações exigem que defina a versão do sistema para OFF:

  • Remoção de dados desnecessários do histórico (DELETE ou TRUNCATE)
  • Remoção de dados da tabela atual sem versionamento (DELETE, TRUNCATE)
  • A partição SWITCH OUT da tabela atual
  • Particionar a partição SWITCH IN na tabela de histórico

Este exemplo interrompe temporariamente SYSTEM_VERSIONING para permitir que você execute operações de manutenção específicas. Se você interromper temporariamente o controle de versão como 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.

Quando reativares o controlo de versões do sistema, especifica o argumento HISTORY_TABLE. Se não o fizeres, o sistema cria uma nova tabela de histórico e associa-a à tabela atual. A tabela de histórico original pode continuar a existir como tabela normal, mas já não está 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 TRANSACTION;