MSSQL删除表彻底恢复——教你一招

1. MSSQL删除表彻底恢复的情况

MSSQL删除表是一种常见操作,但在删除操作后有时会因为各种原因需要进行恢复。当然,若是只是删除了一些数据,可以使用备份文件 或者事务日志来恢复,但如果是误删整张表,那么就需要其他方法来进行恢复。因为MSSQL删除表的操作相对危险,所以在进行操作时需要谨慎处理。

2. SQL Server的删除原理

在了解MSSQL删除表的恢复方法前,需要先了解SQL Server的删除原理。在SQL Server中,删除的操作是将被删除的数据记录清除并本地记录日志。

但是,不同版本的SQL Server对删除日志的记录略有不同。对于较老版本的SQL Server,任何时间的删除都是可以恢复的。因为当删除操作发生时,会产生一个删除事务和一个回滚事务的日志。当出现了回滚事务时,删除过程中被删除的数据可以通过回滚来恢复。

而对于较新版本的SQL Server,则会默认生成带有MINILOGGING属性的日志。这种类型的日志不允许进行数据回滚,删除操作后是不可逆的。

3. MSSQL删除表的恢复方法

3.1 使用系统保留表

系统保留表是一种较为简单的恢复MSSQL删除表的方法。此方法仅限于 SQL Server 2000 及以上版本。系统保留表中记录了表的元数据信息,可以被用来恢复误删的数据表。下面是具体的操作步骤:

-- 查看系统保留表

SELECT * FROM sysobjects WHERE type = 'u'

-- 恢复表

SELECT * INTO new_table FROM [表名] WHERE 1 = 2

通过以上代码,可以先查询出系统保留表,然后利用SELECT * INTO语句将表数据恢复到一个新的数据表中,此方法仅适用于误删表中数据少且表结构简单的情况。

3.2 使用日志文件恢复

当你误删的表中的数据较多,而且需要保留或者表结构复杂的时候,此方法恢复效果更佳,但是操作上更加繁琐。具体操作步骤如下:

利用SQL Server Management Studio 或者其它管理工具打开SQL Server数据表。在对象资源管理器中展开要恢复数据的数据库。

右键点击数据库,选择“属性”。

选择“选项”,找到“恢复模式”并选择“完整恢复”或者“大容量日志恢复”。

打开新查询选项卡,键入以下 TRSANSACT-SQL 代码,以查看数据库 nametest 的日志信息:

USE [TestDB]

GO

SELECT * FROM fn_dblog (NULL,NULL)

WHERE [Transaction Name]='DROPOBJ'

AND [AllocUnitName] LIKE '%(YOUR_TABLE_NAME)%'

上面代码中,SELECT…FROM fn_dblog 用于查询SQL日志中的记录,WHERE 从句中的条件用于过滤出“删除名称为YOUR_TABLE_NAME的表”的记录。

    从查询结果中找到相关删除记录的事务ID(Transaction ID)。

    找到开头带 ‘LOP_BEGIN_XACT’ 的记录,记录其LSN号。

    找到结束带 ‘LOP_ABORT_XACT’ 的记录,记录其LSN号。

    在人工确认记录的情况下执行回滚指令,以回滚找到的事务: ROLLBACK TRANSACTION ‘TRANSACTION_ID’ WITH NO_WAIT

    成功回滚后,使用 SELECT * FROM YOUR_TABLE_NAME 进行数据恢复。

    4. 总结

    无论是误删除数据还是表,在MSSQL中都有不同的恢复方法。若只是删除数据,可以使用事务日志或者备份文件进行恢复。若是误删整张表,可以使用系统保留表或者日志文件恢复来进行数据的恢复。但在操作时需要谨慎处理。

数据库标签