【发布时间】:2010-11-25 05:11:13
【问题描述】:
我想知道如何从日志文件中恢复数据。 我正在使用 sql 2005(完整备份)。
问题是服务昨晚清除了我的数据(它不应该清除)。 现在我想恢复之前删除的那些行。
谁能告诉我该怎么做?
【问题讨论】:
标签: sql-server backup recovery logfiles
我想知道如何从日志文件中恢复数据。 我正在使用 sql 2005(完整备份)。
问题是服务昨晚清除了我的数据(它不应该清除)。 现在我想恢复之前删除的那些行。
谁能告诉我该怎么做?
【问题讨论】:
标签: sql-server backup recovery logfiles
只要您在删除之前备份了数据库,然后备份了自上次数据库备份以来所做的所有事务日志备份,那么您就可以恢复到某个时间点。
首先要做的是备份事务日志。
然后您将上次数据库备份和所有事务日志备份恢复到删除之前的时间点。
请参阅MSDN Article 了解如何操作。
我建议您将现有数据库保持原样并将备份恢复到新数据库。然后您可以编写一些脚本将所需的数据传输回您的实时数据库。
【讨论】:
首先,您的数据库必须处于完整恢复模式,并且您必须拥有完整的事务日志备份链 - 一系列日志记录具有完整的日志序列号 (LSN) 序列
日志备份链在进行完整数据库备份或恢复模式从 SIMPLE 切换到 FULL 并进行完整备份时启动。之后,会定期创建事务日志备份。日志备份链的中断只有两种方式:
中断日志备份链会导致丢失事务信息
您可以使用以下方法恢复到某个时间点:
语法
RESTORE LOG database_name
FROM <backup_device>
WITH STOPAT = time, RECOVERY…
您可以在此处找到所有列出的选项的步骤:Restore a database to a point in time
免责声明:我作为支持工程师在 ApexSQL 工作
【讨论】:
只有在以下情况下才能恢复您的数据: 1)数据库采用全恢复模式; 2)您在意外删除之前进行了完整备份; 3) 您还没有恢复或再次备份此数据库。
如果这是正确的,您应该: 1)做事务日志备份; 2) WITH NORECOVERY 选项从完全备份恢复数据库; 3) 使用 STOPAT 选项恢复事务日志。
【讨论】:
要将事务日志文件恢复到某个时间点,您的数据库必须在完全恢复模式下运行。所以首先你必须恢复最新的完整数据库备份:
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
【讨论】: