我被告知,最好将SQL Server数据文件和日志文件保存在物理上独立的磁盘上,因为如果数据驱动器出现故障,它将允许您将数据恢复到故障点。
所以…让我们说mydata.mdf在驱动器D上,而我的mydata_log.ldf在驱动器E:上,现在是16:45,驱动器D:刚刚死了。
所以 – 我有昨晚的完整备份(mydata.bak)。 我有每小时的事务日志备份,将数据备份到16:00 …但这意味着我将失去45分钟的价值更新。
我仍然在E:驱动器上有mydata_log.ldf,它应该包含提交到驱动器失败的地方的每个事务。
我如何去重新创build数据库和从备份文件和实时事务日志中恢复数据,所以我不会失去任何更新? 这可能吗?
要完成imtiaz的回答:
首先要做的就是立即尝试备份日志尾部。 即使有一个损坏的(可疑状态)数据库,您也可以备份日志的尾部。
例:
BACKUP LOG db_name TO DISK ='C:\ TESTS \ db_name_log.trn'WITH INIT,NO_TRUNCATE;
恢复完全备份(NO RECOVERY选项)+恢复16:00日志备份(NO RECOVERY选项)+恢复尾部备份(RECOVERY选项) – >您可以将数据库恢复到最后一个故障点。
你需要有一个日志文件的尾部备份(取决于你的SQL版本)。 如果你可以备份尾巴,那么你设置! 如果你不能那么你将不得不处理数据丢失,并增加日志备份的频率。 由于业务需求,我每五分钟备份一次。
从BooksOnline:备份日志database_name到WITH CONTINUE_AFTER_ERROR
如果数据库已损坏,例如,如果数据库未启动,则仅当日志文件未损坏,数据库处于支持尾日志备份的状态,且数据库不包含任何数据库时,尾日志备份才会成功批量logging更改。
首先您需要通过运行以下命令来创build尾部日志备份(以防止数据丢失)
BACKUP LOG <database_name> TO <backup_device> WITH NORECOVERY, NO_TRUNCATE;
然后通过运行下面的命令恢复
RESTORE DATABASE <database_name> FROM <backup_device> WITH NORECOVERY;