如何从昨晚的完整备份和活动事务日志文件恢复 SQL Server 数据库?

如何从昨晚的完整备份和活动事务日志文件恢复 SQL Server 数据库?

有人告诉我,将 SQL Server 数据文件和日志文件保存在物理上独立的磁盘上是一种很好的做法,因为如果数据驱动器发生故障,它将允许您将数据恢复到故障点。

那么...假设 mydata.mdf 在驱动器 D: 上,而 mydata_log.ldf 在驱动器 E: 上,并且现在是 16:45,驱动器 D: 刚刚严重损坏。

所以 - 我有昨晚的完整备份 (mydata.bak)。我有每小时事务日志备份,可以将数据恢复到 16:00... 但这意味着我将丢失 45 分钟的更新。

我在 E: 驱动器上仍然有 mydata_log.ldf,它应该包含直到驱动器发生故障之前提交的每个事务。

我该如何重建数据库并从备份文件和实时事务日志中恢复数据,以免丢失任何更新?这可能吗?

答案1

补充一下 imtiaz 的回答:

首先要做的是立即尝试备份日志尾部。即使数据库已损坏(可疑状态),您也能够备份日志尾部。

例子:

将日志 db_name 备份到磁盘 = 'C:\TESTS\db_name_log.trn' 使用 INIT、NO_TRUNCATE;

恢复完整备份(无恢复选项)+恢复 16:00 日志备份(无恢复选项)+恢复尾部备份(恢复选项)-> 您能够将数据库恢复到最后的故障点。

答案2

您需要对日志文件进行尾部备份(取决于您的 SQL 版本)。如果您可以备份尾部,那么您就大功告成了!如果您不能,那么您将不得不处理数据丢失并增加日志备份的频率。由于业务需求,我每 5 分钟备份一次。

来自 BooksOnline:BACKUP LOG database_name TO WITH CONTINUE_AFTER_ERROR

如果数据库损坏(例如,如果数据库无法启动),则仅当日志文件未损坏、数据库处于支持尾部日志备份的状态且数据库不包含任何批量日志更改时,尾部日志备份才会成功。

答案3

首先,您需要通过运行以下命令来创建尾部日志备份(以防止数据丢失)

BACKUP LOG <database_name> TO <backup_device> 
WITH NORECOVERY, NO_TRUNCATE;

然后通过运行以下命令恢复

RESTORE DATABASE <database_name> FROM <backup_device> 
WITH NORECOVERY;

相关内容