1. 引言
作为一名数据库管理员,不可避免地会遇到一些意外情况,比如误删了一个重要的表或者数据库。虽然操作时一定要小心谨慎,但是也不排除有人因为疏忽而误删了数据。当这种情况发生时,最好的解决方法是从回收站中找回被删除的数据。本文将介绍在MSSQL数据库中如何找回被误删除的数据,避免悔删不及的痛苦。
2. MSSQL数据库删除数据的原理
在MSSQL数据库中,删除数据时并不是直接把数据从磁盘上删除,而是将数据移到回收站。 回收站实际上就是一个系统表,即“sys.fn_get_audit_file()”函数的输出。以后版本的MSSQL中更改为使用“fn_dump_dblog()”函数来查找被删除的事务。
在这些方法中,"fn_dump_dblog"是一种很方便的方式来查找,它能够显示与事务和日志相关的信息。
3. 找回MSSQL数据库中的被误删除数据
3.1 创建数据库备份
创建备份是找回误删数据前必须做的一步,以防在找回过程中出现被覆盖的情况。备份时最好选择完整备份。
BACKUP DATABASE [数据库名] TO DISK = N'备份路径'
备份路径最好保存在另一个磁盘上,可以避免误操作删除备份的情况。
3.2 创建实例和数据库
在找回数据前,需要先创建一个实例和相应的数据库。创建方法如下:
打开SQL Server Management Studio
右键单击“服务器 ” +“ 其他操作”+“ 新建查询 ”
创建新查询窗口,输入以下sql代码:
use master
exec sp_attach_single_file_db @dbname='测试数据库',@physname='C:\Program Files\Microsoft SQL Server\MSSQL14.\MSSQL\DATA\测试数据库.mdf'
exec sp_attach_single_file_db @dbname='测试数据库',@physname='C:\Program Files\Microsoft SQL Server\MSSQL14.\MSSQL\DATA\测试数据库_log.ldf'
这里以C盘的“测试数据库.mdf”和“测试数据库_log.ldf”为例。将这两个文件的实际文件路径更改为所需的路径即可。
3.3 查找删除的数据
使用“fn_dump_dblog”函数查找被删除的数据,代码如下:
SELECT *
FROM fn_dump_dblog (NULL, NULL, 'BACKUP WITH NOINIT', 0, GETDATE() - 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
WHERE Operation = 'LOP_DELETE_ROWS' AND AllocUnitName LIKE '%目标表名%'
ORDER BY [Current LSN] DESC
其中,“目标表名”为误删的表的名称。
查找到被删除的数据后,需要使用“INSERT INTO”语句将数据插入到备份中的表中,代码如下:
INSERT INTO [目标表名] ([字段1], [字段2], ...) VALUES ([值1], [值2], ...)
将查询结果中的字段名和值更改为正确的字段名和值即可。
4. 结论
找回误删除的数据是一项高风险的操作,需要备份好数据和数据库,以防数据被覆盖。在找回数据过程中,命令行操作复杂,需要耐心和细心。本文所介绍的方法应该可以帮助大家找回误删的数据。希望大家在操作时一定要谨慎,避免出现这种情况。