2010-11-16 80 views
7

而在先生的書去,雖然SQL Server的面試問題中恢復數據。 shiv prashad koirala。我知道,即使在使用truncate table命令後,數據也可以恢復。如何從截斷的表

請告訴我怎樣才能恢復數據時,數據被刪除的使用「刪除」命令,以及如何能數據,如果數據是使用「截斷」命令來刪除的恢復。

我知道的是,當我們使用刪除命令刪除記錄它的條目是在日誌文件中,但我不知道如何從中恢復數據,並且當我讀取truncate table時不會輸入任何日誌條目在數據庫中,那麼如何恢復。

,如果你能給我什麼好處環節做到這一點幾乎一步一步比,這將是對我幫助很大。

我有SQL Server 2008的

感謝

回答

5

如果你在代碼中使用的交易,TRUNCATE可以回滾。如果沒有使用事務並且提交了TRUNCATE操作,則無法從日誌文件中檢索它。 TRUNCATE是DDL操作,它不記錄在日誌文件中。

DELETE和TRUNCATE時TRANSACTION包圍如果當前未關閉會話既可以回滾。如果TRUNCATE是寫在查詢編輯器通過交易包圍,如果會議是封閉的,它不能被回滾,但刪除可以回滾。

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

感謝這樣一個很好的一步一步的解釋 – 2010-11-16 11:06:31

+0

TRUNCATE被記錄,並且可以通過在DELETE,都以同樣的方式從數據庫還原或日誌備份「回滾」。 – sqlvogel 2011-07-22 10:20:13

+0

如果您的數據庫處於完全恢復模式,則可以通過截斷,刪除或刪除來恢復數據。 完整的分步說明文章位於http://code.abhayprince.com/article/How-to-Recover-Data-from-截刪除或 - 刪表式-SQL-Server的11 – 2014-12-28 05:47:07

4

SQL服務器保持的截斷記錄,這些記錄的條目(頁#&文件#),你可以很容易地從下面的查詢瀏覽。 一旦你的頁面ID &文件ID,你可以把它放在DBCC PAGE中檢索完整的記錄。

SELECT LTRIM(RTRIM(Replace([Description],'Deallocated',''))) AS [PAGE ID] 
,[Slot ID],[AllocUnitId] 
FROM sys.fn_dblog(NULL, NULL) 
WHERE  
AllocUnitId IN 
(Select [Allocation_unit_id] from sys.allocation_units allocunits 
INNER JOIN sys.partitions partitions ON (allocunits.type IN (1, 3) 
AND partitions.hobt_id = allocunits.container_id) OR (allocunits.type = 2 
AND partitions.partition_id = allocunits.container_id) 
Where object_id=object_ID('' + 'dbo.Student' + '')) 
AND Operation IN ('LOP_MODIFY_ROW') AND [Context] IN ('LCX_PFS') 
AND Description Like '%Deallocated%' 

下面給出了文章的鏈接,說明如何從SQl服務器恢復截斷記錄。 http://raresql.com/2012/04/08/how-to-recover-truncated-data-from-sql-server-without-backup/

5

通過這兩個默認沒有可以恢復,但也有特殊情況時,這是可能的。

截斷:執行truncate時,SQL Server不會刪除數據,但只會取消分配頁面。這意味着如果您仍然可以閱讀這些頁面(使用查詢或第三方工具),則可以恢復數據。但是,在這些頁面被覆蓋之前,您需要快速行動。

刪除:如果數據庫處於完全恢復模式,則所有事務都記錄在事務日誌中。如果您可以讀取事務日誌,理論上可以計算出所有受影響行的先前值,然後恢復數據。

恢復方法: