SQLServer数据库使用日志备份还原至指定时间点
现场正常情况:
某客户数据库数据文件约1T,日志文件忽略大小,每日凌晨0点做数据库完整备份,每日中午12点做数据库差异备份。
异常问题:
某日晚19点01分,因某误操作,导致某大表近2亿条数据被删除,约19点30分,发现问题,客户分别在19点31分、19点50分、20点00分执行了日志备份(本文为了简化说明,假定备份均立即完成,实际备份过程中产生数据及耗时不做考虑),之后在20点30分做数据库全备,最后请求支持。
支持处理操作:
1、立即断开前台业务,确保不再有新业务写入(否则新写入的业务会在恢复时丢失)
2、由于客户最后又做了一次数据库全备,因此可以直接忽略最后一次完备。协调客户使用新服务器。
3、首先还原当日凌晨0点数据库备份,并将数据库处于还原模式
4、继续还原当日12点数据库差异备份,同样处于还原模式(该步骤实际可以忽略)
5、最后还原晚上做的第一次日志备份,注意还原时选择时间点为19点00分00秒,选在回滚事务。
6、检查数据库数据情况,若仍有数据误删情况,考虑重复还原数据库日志(需要先将数据库调整成还原状态),并调整还原时间点。
备注:
第4步所谓的可以忽略是因为差异备份与完整备份之间相差时间不长,但假如情况如下:周一0点完备,周二、周三、周四、周五12点差异备份,在周五18点进行日志备份,此时想将数据恢复至17点。
此时同样可以直接使用周一0点的完备+周五18点的日志备份。但日志备份数据量较大,耗时可能较长;也可以使用周一0点完备+周五12点差异备份,加周五18点日志备份,这样耗时相对较短。
总结:
日志恢复的重点在于上一次的完整备份,如果有多个日志备份,那么就按照时间先后顺序,逐个还原日志备份。