9 Stimmen

Welchen eingebauten Mechanismus hat SQL Server, um Flashback-Abfragen durchzuführen?

Glauben Sie, das sagt alles?

0 Stimmen

Nun, da Sql Server MVCC hat sollte es trivial tho sein, richtig?

7voto

Daniel Punkte 61

Ich weiß, diese Frage ist schon ziemlich alt, aber mit SQL Server 2016 Temporal Tables ist eine Funktion: https://docs.microsoft.com/en-us/sql/relational-databases/tables/temporal-tables

Vielleicht kann es anderen helfen, falls sie auf dieses Thema stoßen (Suche nach einer ähnlichen Funktion wie Oracle Flashback)

Wenn temporale Tabellen aktiviert sind, können Sie die Tabelle AS OF eines bestimmten Zeitstempels abfragen und die Zeilen so abrufen, wie sie zu diesem bestimmten Zeitstempel waren, genau wie Sie es von Oracle gewohnt sind:

(SELECT * FROM EMPLOYEE AS OF TIMESTAMP ('13-SEP-04 8:50:58','DD-MON-YY HH24: MI: SS')

Die äquivalente Abfrage in SQL Server für eine Tabelle mit SYSTEM_VERSIONING=ON wird sein:

SELECT * FROM EMPLOYEE FOR SYSTEM_TIME AS OF '2004-09-01 08:50:58'

Um SYSTEM_VERSIONING für eine bestehende Tabelle mit Zeilen zu aktivieren, können Sie das folgende Skript verwenden :

ALTER TABLE [dbo].[TABLE] ADD [SysStartTime] datetime2(0) GENERATED ALWAYS AS ROW START HIDDEN NOT NULL CONSTRAINT DF_Inventory_SysStartTime DEFAULT '1900-01-01 00:00:00', [SysEndTime] datetime2(0) GENERATED ALWAYS AS ROW END HIDDEN NOT NULL CONSTRAINT DF_Inventory_SysEndTime DEFAULT '9999-12-31 23:59:59', PERIOD FOR SYSTEM_TIME ([SysStartTime], [SysEndTime])  

ALTER TABLE [dbo].[TABLE] SET (SYSTEM_VERSIONING = ON); 

Nachdem Sie SYSTEM_VERSIONING aktiviert haben, wird die Tabelle History unter der Tabelle angezeigt, in der Sie die Versionierung aktiviert haben:

enter image description here

So entfernen Sie SYSTEM_VERSIONING aus einer Tabelle:

ALTER TABLE [dbo].[TABLE] SET (SYSTEM_VERSIONING = OFF);  

ALTER TABLE [dbo].[TABLE] DROP PERIOD FOR SYSTEM_TIME;  

ALTER TABLE [dbo].[TABLE] DROP COLUMN [SysStartTime], [SysEndTime]; 

Weitere Informationen finden Sie unter dem folgenden Link (oder in der offiziellen Microsoft-Dokumentation, auf die bereits verwiesen wurde): http://www.sqlservercentral.com/articles/SQL+Server+2016/147087/

6voto

MyItchyChin Punkte 13335

Keine. SQL Server verfügt nicht über eine entsprechende Funktion.


UPDATE : Ab SQL Server 2016 sind diese Informationen veraltet. Siehe die Kommentare und Antworten unten.

0 Stimmen

Jetzt, wo es MVCC hat, ist es wirklich überraschend, dass es das nicht tut.

1 Stimmen

Falsch - siehe Daniels réponse unten - und schauen Sie sich ce .

2 Stimmen

@Vérace - Daniels Antwort ist für SQL 2016, diese Frage wurde 2009 gestellt. Zum Zeitpunkt, als die Frage gestellt/beantwortet wurde, war sie also korrekt.

2voto

Remus Rusanu Punkte 280155

Das nächstliegende Äquivalent ist wahrscheinlich Datenbank-Snapshots . Sie können einen Datenbank-Snapshot zum gewünschten Zeitpunkt erstellen und dann einen Bericht über diesen Snapshot erstellen. Im Gegensatz zu Flashbacks müssen die Zeitpunkte, zu denen die SQL Server-Snapshots erstellt werden, vorher festgelegt werden.

1voto

Iman Punkte 433

Auf SQL Server 2008 können Sie Change Data Capture verwenden. Mit dieser Funktion können Sie viel mehr tun als mit Oracle Flash Back. (Es gibt eine Speicherprozedur zum Zurücksetzen von Datenbanken auf SQL Server 2008, wenn Sie möchten, kann ich Ihnen diese zur Verfügung stellen)

0 Stimmen

Können Sie bitte eine gespeicherte Prozedur bereitstellen?

0voto

Ja, wir können die Datenerfassung ändern y Verfolgung von Änderungen Funktionen, die in die Mechanismen von SQL Server eingebaut sind und sehr viel ähnlich wie Flashback in Oracle.

Wenn Sie die Funktionen der Änderungsdatenerfassung auf eine Datenbanktabelle anwenden, wird eine Spiegelung der verfolgten Tabelle mit derselben Spaltenstruktur wie die Originaltabelle erstellt, jedoch mit zusätzlichen Spalten, die die Metadaten enthalten, die zur Zusammenfassung der Art der Änderung in der Datenbanktabellenzeile verwendet werden. Der SQL Server-DBA kann dann die Aktivität für die protokollierte Tabelle mithilfe dieser neuen Audittabellen leicht überwachen.

Verfolgung von Änderungen ist eine leichtgewichtige Lösung, die einen effizienten Mechanismus zur Verfolgung von Änderungen für Anwendungen bietet. Um Anwendungen in die Lage zu versetzen, Änderungen an Daten in einer Datenbank abzufragen und auf Informationen zuzugreifen, die mit den Änderungen in Zusammenhang stehen, mussten Anwendungsentwickler in der Regel benutzerdefinierte Mechanismen zur Änderungsverfolgung implementieren. Die Erstellung dieser Mechanismen war in der Regel mit viel Arbeit verbunden und umfasste häufig eine Kombination aus Triggern, Zeitstempelspalten, neuen Tabellen zum Speichern von Nachverfolgungsinformationen und benutzerdefinierten Bereinigungsprozessen.

Verschiedene Arten von Anwendungen haben unterschiedliche Anforderungen an den Umfang der Informationen, die sie über die Änderungen benötigen. Anwendungen können die Änderungsverfolgung nutzen, um die folgenden Fragen zu den Änderungen zu beantworten, die an einer Benutzertabelle vorgenommen wurden:

Welche Zeilen haben sich in einer Benutzertabelle geändert?

Nur die Tatsache, dass sich eine Zeile geändert hat, ist erforderlich, nicht aber, wie oft sich die Zeile geändert hat oder welche Werte zwischenzeitlich geändert wurden.

Die neuesten Daten können direkt von der Tabelle, die verfolgt wird, abgerufen werden.

Hat sich eine Reihe geändert?

Die Tatsache, dass eine Zeile geändert wurde, und die Informationen über die Änderung müssen zu dem Zeitpunkt, zu dem die Änderung vorgenommen wurde, in derselben Transaktion verfügbar und aufgezeichnet sein.

Weitere Informationen über die Verwendung von Change Data Capture (CDC) und Change Tracking in SQL Server finden Sie unter Pinal Dave's Post .

enter image description here

Verfolgung von Änderungen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X