Désactiver le versionnage du système sur une table temporelle versionnée par le système

S’applique à : SQL Server 2016 (13.x) et versions ultérieures Azure SQL DatabaseAzure SQL Managed InstanceSQL database in Microsoft Fabric

Vous souhaiterez peut-être arrêter temporairement ou définitivement la gestion des versions de votre table temporelle. Pour ce faire, définissez la clause SYSTEM_VERSIONING sur OFF.

Définir SYSTEM_VERSIONING = OFF

Arrêtez le versionnement système si vous souhaitez effectuer des opérations de maintenance spécifiques sur une table temporelle ou si vous n’avez plus besoin d’une table versionnée. Cette opération vous donne 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

Remarks

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

Aucune donnée n’est perdue dans la table temporelle lorsque vous définissez la période SYSTEM_VERSIONING = OFF ou supprimez la période SYSTEM_TIME.

Lorsque vous définissez SYSTEM_VERSIONING = OFF et ne supprimez pas la SYSTEM_TIME période, le système continue de 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 vous avez d’autres objets créés avec SCHEMABINDING qui utilisent des extensions de requête temporelle, par exemple en référençant 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);

Éventuellement, supprimez le point si vous souhaitez revenir à une table temporelle non temporelle.

ALTER TABLE dbo.Department
    DROP PERIOD FOR SYSTEM_TIME;

Supprimer temporairement SYSTEM_VERSIONING

Les opérations suivantes nécessitent de définir le versionnement système à OFF:

  • Suppression des données superflues de l’historique (DELETE ou TRUNCATE)
  • Suppression des données de la table courante sans versionnement (DELETE, TRUNCATE)
  • Partitionner SWITCH OUT depuis la table actuelle
  • Partitionnez 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.

Lorsque vous réactivez le système de version, spécifiez l’argument HISTORY_TABLE . Si ce n’est pas le cas, le système crée une nouvelle table d’historique et l’associe à la table actuelle. La table d’historique originale peut toujours exister comme table normale, mais elle n’est plus 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 TRANSACTION;