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 diIstanza 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 clausola SYSTEM_VERSIONING su OFF.

Impostazione di 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

Note importanti

  • La tabella cronologica arresta l'acquisizione degli aggiornamenti durante SYSTEM_VERSIONING = OFF.
  • Non si verifica alcuna perdita di dati nella tabella temporale quando si imposta SYSTEM_VERSIONING = OFF o si elimina il periodo SYSTEM_TIME.
  • 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 del periodo.
  • 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 del 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)
  • SWITCH OUT della partizione dalla tabella corrente
  • SWITCH IN della partizione 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 operazione all'interno di una transazione per mantenere la coerenza dei dati.

Nota

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 verrà associata alla tabella corrente.

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 ;

Passaggi successivi