原文出处:http://blog.****.net/dba_huangzj/article/details/8491327
本来想记录一下利用recovery for sql server 这个软件恢复误删除的数据,但测试了几次不成功,就先转载这位大神的方法,太崇拜他,拿自己的测试库按照他的方法走了一遍。
1)查看数据当前的还原模式是否为FULL,查看方法,也可以图形的方式看
SELECT recovery_model,recovery_model_desc
FROM sys.databases
WHERE name ='Zy_createdb_test'
2)有最近的一个完整备份,一般数据库都会每天制定一个维护计划,如果没有,赶紧制定,等出问题的时候别怪老板开除你,根据黄大神的步骤操作如下
delete table 后再查询数据是没有的,5000多行数据已经被删除
3)查询当前连接数据的spid都有哪些,如果有把他们kill 掉,如果只发现一个spid,那可能是自己连接查询的spid,这个你kill 不掉,关闭当前连接查询窗口就可以了,
select * from sys.sysprocesses where dbid=DB_ID('Zy_createdb_test')
4)对数据库进行事务日志备份
这时数据库属于还原模式,任何人是无法连接的
也可以利用脚本:(我没有试)
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)右键数据库,选择还原“文件及文件组“,选择最近的完整备份文件,第二次还原再选日志备份文件。
6)再还原日志文件
7)还原成功
8)再去查询数据,已经还原回来了。
总结:
1)还原模式为FULL 时有个缺点,日志文件会不断增大,最终撑满硬盘,如果不维护好,会导致系统不工作,因为磁盘空间不足。