Condividi tramite


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

Si applica a:SQL Server 2016 (13.x) e versioni successiveAzure SQL DatabaseIstanza gestita di SQL di AzureDatabase SQL 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

Interrompere la versionamento di sistema se si desidera eseguire specifiche operazioni di manutenzione su una tabella temporale o se non è più necessaria una tabella con versionamento. 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 = OFF tabella 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.

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 è 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 temporaneamente 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)
  • 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 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;