有时会碰到同事误删或误更新了某些数据, 现在把恢复数据的方法之一: 备份日志尾部, 简单记录一下.
1. 首先检查你要还原的数据库的恢复模式是否为完整, 如果不是改为完整恢复模式.
其次, 确保该数据库至少做过一次完整备份, 因为所有其他类型的备份都是基于完整备份的, 如果不确定的话可以通过下面这个语句来查看数据库的备份情况:
select database_name,recovery_model,name,backup_finish_date
from msdb.dbo.backupset
- where database_name='SmartDev'
- order by backup_finish_date desc,name
得到的结果:
2. 拿下面这个表来做例子:
select * from dbo.Office
有三条记录, 现在把数据删掉:
delete from dbo.Office
数据清空了, 现在要想办法把数据恢复过来, 我们要做一次日志尾部备份, 这里要确保没有人再连接到该数据库上.
特别是 Media Options 这个选项页中的各种选项要勾上, 比如下图这样.
点 OK 执行, 如果出现下面的提示, 则表示此时还有别的进程连接在该数据库上, 因为备份日志尾部会使数据库处于还原状态, 如果不断开所有连接是执行不了的.
清除掉所有连接后再执行, 备份成功后看看数据的状态, 表示正在还原中.
3. 进行还原数据库操作. 首先还原完整数据库备份, 这时要选择最近的一次完整备份,
并在 Options 选项页中, Recovery state 要选择第二项.
成功后看数据库还是下面这个状态,
接下来还原日志文件, 在指定还原点时只要把时间指定到误操作之前的时间就可以.
Options 选项页中, 因为日志文件是最后一个还原的文件, 所以 Recovery state 选择第一项.
还原成功后
再查询, 表数据已经恢复.
4. 最后总结一下, 我尝试了多种情况, 因为有可能存在多个完整备份, 而这中间又可能有多个差异备份, 得出以下几点:
a. 在还原完整数据库备份时, 一定要选择离误操作时间最近的一次, 如果这个备份文件找不到了, 而去找次一个最近的备份是还原不成功的.
b. 如果在最近一次完整备份和误操作时间之间还有多个差异备份的话, 可以不用逐步还原这些差异备份再还原日志备份, 而是在还原了最近一次完整备份后直接还原日志备份即可.
c. 如果在还原的任何一部出现错误还原不成功, 而数据库又处于 这种不可用状态的话, 可以用下面的语句恢复.
RESTORE DATABASE SmartDev WITH RECOVERY
可能还有些情况没尝试过, 目前先只做到这些.
来源: http://www.linuxidc.com/Linux/2018-06/152825.htm