2012-03-28 19 views
1

Ich wollte wissen, was passiert, wenn ich Abfrageausführung während des Abschneidens abbrechen, sind die Datensätze gelöscht? Und gibt es eine Möglichkeit, sie wiederherzustellen? Truncate wurde am Tisch aktiviert, die 1,5 Millionen Datensätze enthielt Aus einer kleinen Suche in Google verstehe ich, dass die Antwort nein ist, aber ich wollte sicher sein. Ich verwende SQL Server 2005Abbrechen der Abfrage beim Abschneiden

+1

Wenn das Abschneiden Teil einer Transaktion ist, die nicht festgeschrieben ist, kann das Abbrechen der Abfrageausführung dazu führen, dass die Datensätze wiederhergestellt werden. –

+1

Wenn es Ihnen tatsächlich gelingt, das Programm abzubrechen und keine explizite Transaktion durchzuführen, wird es als Teil einer Auto-Commit-Transaktion zurückgesetzt. Wahrscheinlich unwahrscheinlich, obwohl als truncate ist ziemlich schnell und verzögerte truncate kann für große Tabellen verwendet werden. –

+0

Es war kein Teil der Transaktion. Als ich nach der Kündigung gezählt habe, hatte es nur 300.000 Datensätze. Ich denke, der Rest ist für immer weg ... – Cat

Antwort

3

Truncate die Zuordnung der Seiten, die einer Tabelle zugeordnet sind.

Dies ist immer noch atomar, in dem Sie abbrechen können und es Rollback haben. Sie können auch eine TRUNCATE in eine explizite Transaktion einschließen und einen Rollback durchführen.

Sobald Sie die Transaktion festschreiben, sind die Datensätze jedoch weg. Im Gegensatz zu DELETE gibt es keinen Eintrag im Transaktionslog des Datensatzinhalts, da die Aktion minimal protokolliert wird.

+0

Danke, ich werde beim nächsten Mal vorsichtiger sein ... sehr unglücklich – Cat

+0

Schritt 0: Volle Backups – datagod

+0

Sie haben Recht, es war total zufällig – Cat

0

Gute Erklärung auf this Link

Wie ich verstehe, wenn Sie eine Transaktionssteuerung, sowohl DELETE und TRUNCATE kann rückgängig gemacht werden.

Der Unterschied ist, ohne eine Transaktion, wenn Sie eine DELETE können Sie Ihre Daten wiederherstellen mit einer Wiederherstellung des Protokolls zum Beispiel, was Sie tun können nicht auf einer TRUNCATE, weil die Löschung wird row-by protokolliert werden -row und das Abschneiden, wie @JNK hervorhob, wird minimal protokolliert.

Verwandte Themen