Ich habe ein Proof-of-Concept-System eingerichtet, das über ein SQL Server 2017-Backend verfügt.
Das System verwendet Zeittabellen, um Asset-Konfigurationen aufzuzeichnen und Änderungen im Zeitverlauf zu verfolgen.
Ich habe eine Datentabelle, die mit der Verlaufstabelle verknüpft ist. Nennen wir sie dbo.MSSQL_TemporaryHistoryFor_12345678900.
So weit, ist es gut. Ich habe zwei Probleme:
Heute habe ich die Versionierung für die Tabelle deaktiviert, damit ich eine berechnete Spalte hinzufügen kann. Dies wurde durchgeführt und ohne Fehler wieder eingeschaltet.
Jetzt stelle ich fest, dass ich vor der Änderung keine historischen Daten abfragen kann. Neue Daten werden zum Verlauf hinzugefügt, aber es gibt vorher nichts.
Wenn ich in SSMS schaue, sehe ich jetzt, dass es mehrere Verlaufstabellen gibt, alle mit demselben Namen, aber mit einem Hex-Suffix, z. B. dbo.MSSQL_TemporaryHistoryFor_12345678900_A0B1C2D3. Sie sind nicht unter der Hauptdatentabelle verknüpft. Sie schweben einfach alleine in der Datenbank herum. Wenn ich sys.tables abgefragt habe, werden diese nicht als Verlaufstabellen angezeigt und sind nicht mit der Hauptdatentabelle verknüpft.
Diese Tabellen enthalten die fehlenden historischen Daten.
Die Fragen, die ich habe, sind daher:
- Was bedeuten diese zusätzlichen Tabellen?
- Wie wurden sie geschaffen?
- Gibt es eine Möglichkeit, diese irgendwie wieder in die Hauptverlaufskette einzubinden, damit ich meine historischen Berichte zurückerhalten kann?
Es ist sehr frustrierend, dass jede Hilfe, die Sie leisten können, dankbar aufgenommen wird. Vielen Dank.
Antworten:
Sie müssen den Namen der Verlaufstabelle angeben, um die Datenkontinuität beim Ein- und Ausschalten der Systemversionierung zu gewährleisten. Dieses Verhalten wird in der Dokumentation zu ALTER TABLE erwähnt :
Hier ist eine Demo. Ich werde die Beispieltabelle aus der Dokumentation erstellen:
Dies führt zu einer Verlaufstabelle mit dem Namen
MSSQL_TemporalHistoryFor_1253579504
. Jetzt werde ich die Systemversionierung deaktivieren und aktivieren:Und ich bin in Ihrer genauen Situation:
Jetzt werde ich alles aufräumen:
Erstellen Sie dann die Tabelle mit einem bestimmten Namen der Verlaufstabelle:
Schalten Sie dann die Systemversionierung aus und wieder ein, geben Sie jedoch weiterhin den Namen der Verlaufstabelle an:
Hinweis: In Ihrer speziellen Situation sollten Sie in der Lage sein, diese Syntax zu verwenden, um eine verlorene Verlaufstabelle wieder an Ihre Basistabelle anzuhängen
Keine zusätzlichen Tabellen:
Das wegnehmen
Geben Sie beim Erstellen von Zeittabellen oder Aktivieren der Systemversionierung immer explizit einen Namen für die Verlaufstabelle an.
In den MS-Dokumenten wird dies jetzt speziell auf der Seite Stoppen der Systemversionierung auf einer systemversionierten Zeittabelle aufgerufen :
quelle