2010-11-16 16 views
7

während gehen sql Server Interview Frage in Buch von Herrn. Shiv Prashad Koirala. Ich habe erfahren, dass die Daten auch nach dem Befehl truncate table wiederhergestellt werden können.Wie Sie Daten von abgeschnittenen Tabelle wiederherstellen

Bitte sagen Sie mir, wie können wir Daten wiederherstellen, wenn Daten mit dem Befehl 'löschen' gelöscht werden und wie Daten wiederhergestellt werden können, wenn Daten mit dem Befehl 'truncate' gelöscht werden.

Was ich weiß ist, dass, wenn wir löschen Befehl verwenden, um Einträge zu löschen der Eintrag in der Protokolldatei gemacht wird, aber ich weiß nicht, wie Sie die Daten wiederherstellen und wie ich gelesen habe, truncate Tabelle nicht Eingabe eines Protokolleintrags in der Datenbank dann, wie kann das auch wiedergewonnen werden.

Wenn Sie mir einen guten Link geben können, um es praktisch Schritt für Schritt zu tun, dann wird das eine große Hilfe für mich sein.

i haben SQL Server 2008

Dank

Antwort

5

Wenn Sie GESCHÄFTE in Ihrem Code verwenden, können TRUNCATE zurückgerollt werden. Wenn keine Transaktion verwendet wird und die TRUNCATE-Operation festgeschrieben wird, kann sie nicht aus der Protokolldatei abgerufen werden. TRUNCATE ist DDL-Operation und es ist keine Protokolldatei protokolliert.

DELETE und TRUNCATE können beide zurückgesetzt werden, wenn sie von TRANSACTION umgeben sind, wenn die aktuelle Sitzung nicht geschlossen ist. Wenn TRUNCATE im von TRANSACTION umgebenen Abfrageeditor geschrieben wird und die Sitzung geschlossen wird, kann sie nicht zurückgesetzt werden, aber DELETE kann zurückgesetzt werden.

USE tempdb 
GO 
-- Create Test Table 
CREATE TABLE TruncateTest (ID INT) 
INSERT INTO TruncateTest (ID) 
SELECT 1 
UNION ALL 
SELECT 2 
UNION ALL 
SELECT 3 
GO 
-- Check the data before truncate 
SELECT * FROM TruncateTest 
GO 
-- Begin Transaction 
BEGIN TRAN 
-- Truncate Table 
TRUNCATE TABLE TruncateTest 
GO 
-- Check the data after truncate 
SELECT * FROM TruncateTest 
GO 
-- Rollback Transaction 
ROLLBACK TRAN 
GO 
-- Check the data after Rollback 
SELECT * FROM TruncateTest 
GO 
-- Clean up 
DROP TABLE TruncateTest 
GO 
+0

Vielen Dank für solch eine sehr gute Schritt für Schritt Erklärung –

+0

TRUNCATE wird protokolliert und kann durch Wiederherstellung von Datenbank- oder Protokollsicherungen auf die gleiche Weise wie bei DELETE wiederhergestellt werden. – sqlvogel

+0

Wenn sich Ihre Datenbank im vollständigen Wiederherstellungsmodus befindet, können Sie die Daten wiederherstellen, indem Sie sie entweder kürzen, löschen oder löschen Schritt für Schritt abschließen Der Artikel ist hier http://code.abhayprince.com/article/How-to-Recover-Data-from- Truncated-Deleted-or-Dropped-Tabelle-in-SQL-Server-11 –

4

SQL Server den Eintrag (Seite # & Datei #) der abgeschnittenen Aufzeichnungen und diese Aufzeichnungen hält, können Sie leicht aus der unteren Abfrage durchsuchen. Sobald Sie die Seiten-ID & Datei-ID erhalten haben, können Sie sie auf der DBCC-PAGE ablegen, um den vollständigen Datensatz zu erhalten.

Unten gegeben ist der Link des Artikels, der erklärt, wie man abgeschnittene Datensätze von SQl-Server wiederherstellen. http://raresql.com/2012/04/08/how-to-recover-truncated-data-from-sql-server-without-backup/

5

Standardmäßig kann keines dieser beiden zurückgesetzt werden, aber es gibt spezielle Fälle, in denen dies möglich ist.

Truncate: Wenn truncate ausgeführt wird, löscht SQL Server keine Daten, sondern hebt nur die Zuordnung von Seiten auf. Dies bedeutet, dass Sie die Daten wiederherstellen können, wenn Sie diese Seiten weiterhin lesen können (mithilfe der Abfrage oder des Tools eines Drittanbieters). Sie müssen jedoch schnell handeln, bevor diese Seiten überschrieben werden.

Löschen: Wenn sich die Datenbank im vollständigen Wiederherstellungsmodus befindet, werden alle Transaktionen im Transaktionslog protokolliert. Wenn Sie das Transaktionslog lesen können, können Sie in der Theorie herausfinden, was die vorherigen Werte aller betroffenen Zeilen waren, und dann Daten wiederherstellen.

Recovery-Methoden:

  • Eine Methode ist die Verwendung von SQL-Abfragen, ähnlich der hier gepostet für truncate oder Funktionen wie fn_dblog mit Transaktionsprotokoll zu lesen.

  • Eine weitere Tools von Drittanbietern wie ApexSQL Log, SQL Log Rescue, ApexSQL Recover oder Quest Toad

Verwandte Themen