Partage via


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 Database Azure SQL Managed Instance

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

Configurer 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

Notes

La table d’historique cesse de capturer les mises à jour pendant SYSTEM_VERSIONING = OFF.

Aucune perte de données ne se produit sur la SYSTEM_VERSIONING = OFFtable temporaire quand vous définissez SYSTEM_TIME ou supprimez la période.

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.

Vous devez abandonner la période SYSTEM_TIME pour supprimer les colonnes de périodes. Pour supprimer les colonnes de période, utilisez ALTER TABLE <table> DROP <column>;. Pour en savoir plus, reportez-vous à Modifier le schéma d’une table temporelle à version contrôlée par le système.

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

La liste suivante contient la liste des opérations qui requièrent que la valeur de la version du système soit définie sur 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 à partir 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.

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 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;