Arresto del controllo delle versioni in una tabella temporale con controllo delle versioni di sistema

Si applica a: SQL Server 2016 (13.x) e versioni successive Database SQL di Azure Istanza gestita di SQL di Azure

È possibile arrestare il controllo delle versioni di sistema in una tabella temporale in modo temporaneo o permanente. È possibile farlo impostando la condizione SYSTEM_VERSIONING su OFF.

Impostare SYSTEM_VERSIONING = OFF

Arrestare il controllo delle versioni di sistema per eseguire specifiche operazioni di manutenzione su una tabella temporale o se la tabella con controllo delle versioni non è più necessaria. Con questa operazione si ottengono due tabelle indipendenti:

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

Osservazioni:

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

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

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

Rimuovere il periodo SYSTEM_TIME per eliminare le colonne periodo. Per rimuovere le colonne periodo, usare ALTER TABLE <table> DROP <column>;. Per altre informazioni, si veda Modificare lo schema di una tabella temporale con controllo delle versioni 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 è possibile impostare SYSTEM_VERSIONING = OFF se sono presenti altri oggetti creati con SCHEMABINDING tramite estensione 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);

-- Optionally, DROP PERIOD if you want to revert temporal table to a non-temporal
ALTER TABLE dbo.Department
DROP PERIOD FOR SYSTEM_TIME;

Rimuovere in modo temporaneo SYSTEM_VERSIONING

L'elenco seguente include le operazioni per cui è richiesto che il controllo delle versioni di sistema sia impostato su OFF:

  • Rimozione dei dati non necessari dalla cronologia (DELETE o TRUNCATE)
  • Rimozione dei dati dalla tabella corrente senza il controllo delle versioni (DELETE, TRUNCATE)
  • Partizione SWITCH OUT dalla tabella corrente
  • Partizione 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 si riattiva il controllo delle versioni di sistema, non dimenticare di specificare l'argomento HISTORY_TABLE. Se non si esegue questa operazione, verrà creata una nuova tabella cronologica che verrà associata alla tabella corrente. La tabella cronologica originale può continuare a esistere come una normale tabella, ma non sarà più associata alla tabella corrente.

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;