J'ai mis en place un système de preuve de concept doté d'un serveur principal SQL Server 2017.
Le système utilise des tableaux temporels pour enregistrer les configurations des actifs et suivre les changements au fil du temps.
J'ai une table de données qui est liée à la table d'historique, appelons-la dbo.MSSQL_TemporaryHistoryFor_12345678900.
Jusqu'ici tout va bien. J'ai deux problèmes:
Aujourd'hui, j'ai désactivé le contrôle de version sur la table afin de pouvoir ajouter une colonne calculée. Cela a été fait et réactivé sans erreur.
Maintenant, je constate que je ne peux pas interroger les données historiques d'avant le changement. De nouvelles données sont ajoutées à l'historique, mais il n'y a rien d'avance.
En regardant dans SSMS, je peux maintenant voir qu'il y a plusieurs tables d'historique, toutes avec le même nom mais avec un suffixe hexadécimal, par exemple dbo.MSSQL_TemporaryHistoryFor_12345678900_A0B1C2D3. Ils ne sont pas liés sous le tableau de données principal. Ils flottent tout seuls dans la base de données. Lorsque j'ai interrogé sys.tables, ceux-ci ne sont pas affichés en tant que tables d'historique et ne sont pas liés à la table de données principale.
Ces tableaux contiennent les données historiques manquantes.
Les questions que je me pose sont donc:
- Que représentent ces tableaux supplémentaires?
- Comment ont-ils été créés?
- Existe-t-il un moyen de les relier d'une manière ou d'une autre à la chaîne historique principale afin que je puisse récupérer mes rapports historiques?
C'est très frustrant, donc toute aide que vous pourriez fournir serait reçue avec gratitude. Merci.
Réponses:
Vous devez fournir le nom de la table d'historique afin de maintenir la continuité des données lors de l'activation et la désactivation de la version du système. Ce comportement est mentionné dans la documentation d' ALTER TABLE :
Voici une démo. Je vais créer l'exemple de table à partir de la documentation:
Il en résulte une table d'historique nommée
MSSQL_TemporalHistoryFor_1253579504
. Je vais maintenant désactiver et activer la gestion des versions du système:Et je suis dans votre situation exacte:
Maintenant, je vais tout nettoyer:
Créez ensuite la table avec un nom de table d'historique spécifique:
Activez puis désactivez la version du système, mais continuez à spécifier le nom de la table d'historique:
Remarque: dans votre situation spécifique, vous devriez pouvoir utiliser cette syntaxe pour "rattacher" une table d'historique perdue à votre table de base
Pas de tables supplémentaires:
À emporter
Spécifiez toujours un nom de table d'historique de manière explicite lors de la création de tables temporelles ou de l'activation du contrôle de version du système.
Les documents MS appellent désormais cela spécifiquement sur la page Arrêt du versionnement du système sur une table temporelle versionnée par le système :
la source