Interrompere il versionamento di sistema su una tabella temporale con versionamento di sistema

Si applica a: SQL Server 2016 (13.x) e versioni successive database SQL di Azure AzureSQL Managed InstanceSQL database in Microsoft Fabric

È possibile arrestare il versionamento nella tua tabella temporale in modo temporaneo o permanente. È possibile farlo impostando la condizione SYSTEM_VERSIONING su OFF.

Imposta SYSTEM_VERSIONING = OFF

Smetti di versionare il sistema se vuoi eseguire operazioni di manutenzione specifiche su una tabella temporale o non hai più bisogno di una tabella versionata. Questa operazione ti dà due tabelle indipendenti:

  • Tabella corrente con una definizione del periodo
  • Tabella cronologica sotto forma di tabella normale

Remarks

La tabella di cronologia interrompe l'acquisizione degli aggiornamenti durante SYSTEM_VERSIONING = OFF.

Non si verifica alcuna perdita di dati nella SYSTEM_VERSIONING = OFF tabella temporale quando si imposta SYSTEM_TIME o si elimina il periodo.

Quando imposti SYSTEM_VERSIONING = OFF e non elimini il periodo SYSTEM_TIME, il sistema continua ad aggiornare le colonne del periodo a ogni operazione di inserimento e aggiornamento. Le eliminazioni nella tabella corrente sono permanenti.

Devi eliminare il periodo SYSTEM_TIME per cancellare le colonne del periodo. Per rimuovere le colonne periodo, usare ALTER TABLE <table> DROP <column>;. Per ulteriori informazioni, consulta Modificare lo schema di una tabella temporale versionata di sistema.

Quando si imposta SYSTEM_VERSIONING = OFF, tutti gli utenti con autorizzazioni sufficienti possono modificare lo schema e il contenuto della tabella cronologica o anche eliminare definitivamente tale tabella.

Non puoi impostare SYSTEM_VERSIONING = OFF se hai altri oggetti creati con SCHEMABINDING che utilizzano estensioni di query temporali, ad esempio facendo riferimento a SYSTEM_TIME. Questa restrizione impedisce che questi oggetti generino errori se si imposta SYSTEM_VERSIONING = OFF.

Rimuovere in modo definitivo SYSTEM_VERSIONING

Questo esempio rimuove in modo definitivo SYSTEM_VERSIONING ed elimina le colonne periodo. La rimozione delle colonne del periodo è facoltativa.

ALTER TABLE dbo.Department
    SET (SYSTEM_VERSIONING = OFF);

Opzionalmente, elimina il punto se vuoi riportare la tabella temporale a una tabella non temporale.

ALTER TABLE dbo.Department
    DROP PERIOD FOR SYSTEM_TIME;

Rimuovere temporaneamente SYSTEM_VERSIONING

Le seguenti operazioni richiedono di impostare il controllo delle versioni del sistema su OFF:

  • Rimozione dei dati non necessari dalla cronologia (DELETE o TRUNCATE)
  • Rimuovere i dati dalla tabella corrente senza il controllo delle versioni (DELETE, TRUNCATE)
  • Separa la partizione SWITCH OUT dalla tabella corrente
  • Dividi SWITCH IN nella tabella cronologica

Questo esempio arresta temporaneamente SYSTEM_VERSIONING per consentire di eseguire operazioni di manutenzione specifiche. Se si arresta temporaneamente il controllo delle versioni come prerequisito per la manutenzione della tabella, si consiglia di eseguire questa modifica all'interno di una transazione per mantenere la coerenza dei dati.

Quando riattivi il controllo delle versioni del sistema, specifica l'argomento HISTORY_TABLE. Se non lo fai, il sistema crea una nuova tabella della storia e la associa alla tabella attuale. La tabella della storia originale può ancora esistere come tabella normale, ma non è più associata alla tabella attuale.

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;