2016-05-13 5 views
0

Wir haben eine ziemlich große gespeicherte Proc, die zwei Personen in unserem System mit ähnlichen Namen zusammenführt. Es löscht und aktualisiert viele verschiedene Tabellen (etwa 10 oder so, alle sehr unterschiedliche Tabellen). Es ist alles in einer Transaktion verpackt und rollt zurück, wenn es natürlich fehlschlägt. Dies mag eine dumme Frage sein, aber ist es möglich, diese spezifische Transaktion zu einem späteren Zeitpunkt irgendwie zu speichern und zurückzusetzen, ohne dass sie in vielen "History" -Tabellen erstellt und eingefügt werden müssen, die genau verfolgen, was passiert ist? Ich möchte nicht die gesamte Datenbank wiederherstellen, sondern nur die Ergebnisse einer gespeicherten Prozedur und zu einem späteren Zeitpunkt.Rollback spezifische, ältere SQL-Transaktion

+0

Beachten Sie, dass ich die gesamte Tabelle auch nicht wiederherstellen möchte ... nur die Datensätze, die ursprünglich von der Transaktion betroffen waren. – Andy

Antwort

0

Es klingt, als ob Sie untersuchen möchten Change Data Capture.

Es wird immer noch Daten erfassen, wenn es sich ändert, und wenn Sie es nur für eine Ausführung oder für eine sehr kleine Menge von Daten tun, können andere Methoden besser sein.

+0

Danke, das werde ich definitiv lesen. Es klingt wie das, was ich auf den ersten Blick machen will, und wusste nie, dass das ein Feature war ... haha. :) – Andy

0

Sobald eine Transaktion festgeschrieben wurde, ist es nicht möglich, nur diese eine Transaktion zu einem späteren Zeitpunkt zurückzusetzen. Du bist im wörtlichen Sinne "engagiert". Sie können natürlich aus einer Sicherung wiederherstellen und jede Transaktion seit einem bestimmten Punkt zurücksetzen, aber das ist wahrscheinlich nicht das, wonach Sie suchen.

So machen Auditing-Tabellen über Ihre einzige Option. In einer anderen Antwort wurde darauf hingewiesen, dass Sie Data Change Capture verwenden können. Wenn Sie jedoch das große Geld für die Enterprise Edition nicht ausgeschieden haben, ist dies für Sie keine Option. Aber wenn Sie nur daran interessiert sind, diese spezielle Art von Änderung rückgängig zu machen, ist es wahrscheinlich am einfachsten, der Prozedur, die die Zusammenführung durchführt, etwas Code hinzuzufügen, um die Datensätze zu speichern, die erforderlich sind, um sie erneut zu teilen und eine Prozedur für die tatsächliche Aufteilung zu erstellen. Aber Sie müssen daran denken, dass Sie alle Änderungen an den "zusammengeführten" Daten vornehmen müssen, die Ihre Fähigkeit, die Aufteilung durchzuführen, beeinträchtigen könnten. Aus diesem Grund kann SQL das nicht automatisch für Sie erledigen. Es weiß nicht, wie Sie mit Änderungen an den Daten nach der ursprünglichen Transaktion umgehen möchten.

+0

Es scheint, ich habe nur Standard Edition, so CDC wird nicht für mich arbeiten. Es macht keinen Spaß, aber es sieht so aus, als ob Audiotabellen zu diesem Zeitpunkt meine einzige Option sind. Ich überlege, Schemakopien jeder Tabelle, die gelöscht/aktualisiert wird, zu machen, um später Änderungen rückgängig zu machen ... oder eine Tabelle, die Tabelle, Schlüssel, Feld, alte/neue Werte und durchgeführte Operationen enthält. Wie auch immer, ich habe von CDC erfahren und es ist nur für Enterprise Edition und Change Tracking, und wie das für mich nicht funktioniert. – Andy