我想知道如何从日志文件中恢复数据。 我正在使用sql 2005(完全备份)。
问题是服务昨晚清理了我的数据(它不应该有)。 现在我想要恢复之前删除的那些行。
任何人都可以告诉我如何做到这一点吗?
答案 0 :(得分:3)
只要您在删除之前备份了数据库,然后在上次数据库备份后备份了所有事务日志备份,那么您就可以恢复到某个时间点。
首先要做的是备份事务日志。
然后,从那时起恢复上次数据库备份和所有事务日志备份,直到删除之前的时间点。
请参阅此MSDN Article了解如何操作。
我建议您将现有数据库保留原样并将备份还原到新数据库。然后,您可以编写一些脚本将所需数据传输回实时数据库。
答案 1 :(得分:2)
首先,您的数据库必须处于完全恢复模式,并且您必须拥有完整的事务日志备份链 - 一系列具有完整日志序列号(LSN)序列的日志记录
在进行完整数据库备份或将恢复模型从SIMPLE切换为FULL并进行完整备份时,将启动日志备份链。之后,定期创建事务日志备份。日志备份链只能以两种方式打破:
破坏日志备份链可能导致缺少交易信息
您可以使用以下方法恢复到某个时间点:
语法
RESTORE LOG database_name
FROM <backup_device>
WITH STOPAT = time, RECOVERY…
您可以在此处找到所有列出选项的步骤:Restore a database to a point in time
免责声明:我作为支持工程师为ApexSQL工作
答案 2 :(得分:1)
只有在以下情况下才能恢复您的数据: 1)数据库使用完全恢复模型; 2)您在意外删除之前进行了完整备份; 3)您尚未恢复或再次备份此数据库。
如果这是正确的,你应该: 1)进行事务日志备份; 2)使用NORECOVERY选项从完全备份恢复数据库; 3)使用STOPAT选项恢复事务日志。
答案 3 :(得分:0)
要将事务日志文件还原到某个时间点,您的数据库必须在完全恢复模式下运行。首先,您必须恢复最新的完整数据库备份:
RESTORE DATABASE *database* FROM DISK = 'D:/Full.bak' WITH NORECOVERY, REPLACE
下一步是恢复最后一个差异数据库备份:
RESTORE DATABASE *database* FROM DISK = 'D:/Diff.bak' WITH NORECOVERY
然后以正确的顺序还原自上次差异备份以来所做的所有事务日志备份
RESTORE LOG *database* FROM DISK = 'D:/log1.bak' WITH NORECOVERY
RESTORE LOG *database* FROM DISK = 'D:/log2.bak' WITH NORECOVERY
RESTORE LOG *database* FROM DISK = 'D:/log3.bak' WITH NORECOVER
必须还原的最后一个事务日志备份是在stopat
选项发生故障后进行的事务日志备份。在stopat
选项之后,您应该设置要还原数据库的时间。
RESTORE LOG *database* FROM DISK = 'D:/log4.bak' WITH STOPAT = '2015-11-26 16:22:40.000', RECOVERY