此文章讲述了如何数据库如何进行恢复操作,比如在重要数据库中执行了删除(DELETE)或者修改(UPDATE)语句后面还没加条件(WHERE),导致数据库中所有的语句都没了或者删了,上万条数据想一条条从新添加都添加不了,所以就可以用到此文章的内容(注意:恢复之前数据库的恢复模式就要是完整,在此之前必须有一次数据库的完整备份,要保证数据库的日志不丢失)
注意:此文章仅供学习使用,如果是企业的数据库损毁或丢失文件此文章仅供参考。
一、设置数据库恢复模式
1、选择所需恢复的数据库点击属性
2、打开后点击选项一栏,将恢复模式调整为完整
也可用语句进行查询
SELECT recovery_model,recovery_model_desc
FROM sys.databases
WHERE name ='gb'
注意:确保数据库的恢复模式最起码不能为【简单】
对于任何重要的环境(客户正式使用环境,生产环境),都强烈建议使用【完整恢复模式】,虽然另外两种(大容量日志(BULK_LOGGED)、简单(SIMPLE))的日志会比完整恢复模式所产生的日志文件要小,但是一旦出现问题,日志占用空间大小的问题就不算是问题了,并且只要管理的妥当,完整恢复模式的日志也不会太大。
二、至少做一次完整备份
至少做过一次完整备份。因为所有类型的备份都基于完整备份,如果没有至少一次完整备份,什么都是多余的,所以最好创建完一个新数据库后,最少做一次完整备份
查询备份情况语句
SELECT database_name,recovery_model,name
FROM msdb.dbo.backupset
三、做一次日志尾部备份
就是备份发生错误之后数据表的事务日志备份
四、开始恢复
数据错误操作一旦发生,第一时间就要保证数据库不允许其他的用户来进行操作了。防止错误数据越来越多
这里可以在登录时用本地用户登录,并在数据库属性中选项一栏里,找到限制访问将其改成单用户(SINGLE_USER)这样用其他用户登录的就不能操作了
如果发现备份不了可以使用下面语句查看,并把spid杀掉
-- 查询
SELECT * FROM sys.sysprocesses WHERE dbid=DB_ID('zjsoft0001')
-- 杀掉spid
KILL spid
1、做一次日志备份,选择【备份日志尾部】
如何备份不了尾部日志的话就先备份一次完整数据库再进行尾部日志备份
此时,数据库会处于【正在还原】的状态
2、进行还原文件和文件组zjsoft0009,先要还原完整备份,选择此次错以前并里此次错误最近的完整数据库备份,注意:还原时要在选项中把恢复状态勾选上[不对数据库执行任何操作,不回滚未提交的事务。可以还原其他事务日志(A)。(RESTORE WITH NORECOVERY)]
3、接着还原日志文件,这是最重要的一步
在数据库还原选项时选择还原事务日志,打开后选择此数据库的日志文件并把时间点选择出现错误数据之前,并在选择一栏中将恢复状态选中第一个,并点击确定