2010-11-16 82 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不会删除数据,但只会取消分配页面。这意味着如果您仍然可以阅读这些页面(使用查询或第三方工具),则可以恢复数据。但是,在这些页面被覆盖之前,您需要快速行动。

删除:如果数据库处于完全恢复模式,则所有事务都记录在事务日志中。如果您可以读取事务日志,理论上可以计算出所有受影响行的先前值,然后恢复数据。

恢复方法: