Arrêt du versioning du système sur une table temporelle avec contrôle de version par le système

S’applique à : SQL Server 2016 (13.x) et versions ultérieures Azure SQL DatabaseAzure SQL Managed Instance

Vous pouvez interrompre le contrôle des versions sur votre table temporelle temporairement ou définitivement. Pour ce faire, vous pouvez affecter à la clause SYSTEM_VERSIONING la valeur OFF.

Configuration de SYSTEM_VERSIONING = OFF

Arrêtez le versioning par le système si vous souhaitez effectuer des opérations de maintenance sur une table temporelle ou si vous n’avez plus besoin d’une table versionnée. Avec cette opération, vous obtenez deux tables indépendantes :

  • La table actuelle avec une définition de la période

  • Une table historique sous la forme d’une table normale

Remarques importantes

  • La table d’historique arrête la capture des mises à jour pendant SYSTEM_VERSIONING = OFF.
  • Aucune perte de données ne se produit sur la table temporelle lorsque vous définissez SYSTEM_VERSIONING = OFF ou que vous supprimez la période de SYSTEM_TIME .
  • Quand vous définissez SYSTEM_VERSIONING = OFF sans supprimer la période SYSTEM_TIME, le système continue à mettre à jour les colonnes de période pour chaque opération d’insertion et de mise à jour. Les suppressions effectuées dans la table actuelle sont définitives.
  • Supprimez la période SYSTEM_TIME pour supprimer les colonnes de période.
  • Quand vous définissez SYSTEM_VERSIONING = OFF, tous les utilisateurs disposant des autorisations suffisantes peuvent modifier le schéma et le contenu de la table d’historique, et même supprimer définitivement la table d’historique.
  • Vous ne pouvez pas définir SYSTEM_VERSIONING = OFF si d’autres objets ont été créés avec SCHEMABINDING à l’aide d’extensions de requête temporelles (telles que le référencement de SYSTEM_TIME). Cette restriction empêche l’échec de ces objets si vous définissez SYSTEM_VERSIONING = OFF.

Supprimer définitivement SYSTEM_VERSIONING

Cet exemple supprime définitivement SYSTEM_VERSIONING ainsi que les colonnes de période. La suppression des colonnes de période est facultative.

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;

Supprimer temporairement SYSTEM_VERSIONING

Voici la liste des opérations qui nécessitent la définition du contrôle de version par le système avec la valeur OFF:

  • Suppression des données superflues de l’historique (DELETE ou TRUNCATE)
  • Suppression des données de la table actuelle sans contrôle de version (DELETE, TRUNCATE)
  • Partition SWITCH OUT de la table actuelle
  • Partition SWITCH IN dans la table d’historique

Cet exemple arrête temporairement SYSTEM_VERSIONING pour que vous puissiez effectuer des opérations de maintenance spécifiques. Si vous arrêtez le contrôle de version temporairement à des fins de maintenance de tables, nous vous recommandons vivement d’effectuer cette opération dans une transaction pour préserver la cohérence des données.

Notes

Quand vous réactivez le versioning par le système, n’oubliez pas de spécifier l’argument HISTORY_TABLE. Sinon, une nouvelle table d’historique sera générée et associée à la table actuelle. La table d’historique initiale peut être conservée comme une table standard, mais elle ne sera pas associée à la table actuelle.

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 ;

Étapes suivantes