SQL 2008R2 误删除数据恢复方法(一)

时间:2024-05-20 18:06:29

原文出处:http://blog.****.net/dba_huangzj/article/details/8491327

本来想记录一下利用recovery for sql  server 这个软件恢复误删除的数据,但测试了几次不成功SQL 2008R2 误删除数据恢复方法(一),就先转载这位大神的方法,太崇拜他SQL 2008R2 误删除数据恢复方法(一),拿自己的测试库按照他的方法走了一遍。

1)查看数据当前的还原模式是否为FULL,查看方法,也可以图形的方式看

SELECT recovery_model,recovery_model_desc  
FROM sys.databases  
WHERE name ='Zy_createdb_test'

2)有最近的一个完整备份,一般数据库都会每天制定一个维护计划,如果没有,赶紧制定,等出问题的时候别怪老板开除你SQL 2008R2 误删除数据恢复方法(一),根据黄大神的步骤操作如下

SQL 2008R2 误删除数据恢复方法(一)

delete table 后再查询数据是没有的,5000多行数据已经被删除

SQL 2008R2 误删除数据恢复方法(一)

3)查询当前连接数据的spid都有哪些,如果有把他们kill 掉,如果只发现一个spid,那可能是自己连接查询的spid,这个你kill 不掉,关闭当前连接查询窗口就可以了,

select * from sys.sysprocesses where dbid=DB_ID('Zy_createdb_test')


4)对数据库进行事务日志备份

SQL 2008R2 误删除数据恢复方法(一)

SQL 2008R2 误删除数据恢复方法(一)

这时数据库属于还原模式,任何人是无法连接的

SQL 2008R2 误删除数据恢复方法(一)


也可以利用脚本:(我没有试)

USE Master  
GO  
BACKUP LOG Zy_createdb_test TO  DISK = N'E:\Zy_createdb_test.bak' WITH  NO_TRUNCATE , NOFORMAT, NOINIT, 
NAME = N'20170614', SKIP, NOREWIND, NOUNLOAD,  NORECOVERY , COMPRESSION,  STATS = 10, CHECKSUM  
GO  
declare @backupSetId as int  
select @backupSetId = position from msdb..backupset 
 where database_name=N'Zy_createdb_test'  
 and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'Zy_createdb_test' )  
if @backupSetId is null begin raiserror(N'验证失败。找不到数据库“AdventureWorks”的备份信息。', 16, 1) end  
RESTORE VERIFYONLY FROM  DISK = N'E:\Zy_createdb_test.bak' WITH  FILE = @backupSetId,  NOUNLOAD,  NOREWIND  
GO 

5)右键数据库,选择还原“文件及文件组“,选择最近的完整备份文件,第二次还原再选日志备份文件。

SQL 2008R2 误删除数据恢复方法(一)

SQL 2008R2 误删除数据恢复方法(一)

6)再还原日志文件

SQL 2008R2 误删除数据恢复方法(一)


SQL 2008R2 误删除数据恢复方法(一)

7)还原成功

SQL 2008R2 误删除数据恢复方法(一)

8)再去查询数据,已经还原回来了。

SQL 2008R2 误删除数据恢复方法(一)


总结:

1)还原模式为FULL 时有个缺点,日志文件会不断增大,最终撑满硬盘,如果不维护好,会导致系统不工作,因为磁盘空间不足。