假设我有一个完整的备份、差异备份和10个日志备份文件。
建议的做法是恢复每个没有恢复的日志,然后使用恢复应用最后的日志备份。
假设我使用恢复来执行先前的恢复,那么我就不能应用后续的备份--它会产生错误。
这是通过设计实现的吗?是否有任何方法允许这样做(在随后的备份需要恢复时,用恢复进行恢复)?-例如,在进行数据库迁移时,我希望恢复完整备份,并允许以只读模式使用目标数据库,然后随后应用差异备份和日志备份。
发布于 2022-04-12 11:09:49
您可以在恢复时将数据库设置为STANDBY
模式,但这将是只读的。
由于写前日志(大多数RDBMS使用的系统)的工作方式,事务可能在备份时部分写入日志。事务的其余部分将在下一个日志备份中。
因此,在还原时,如果告诉服务器将数据库联机,则会有尚未完全写入主数据文件但在日志文件中完全存在的正在运行中的事务。这些可以回滚:将部分覆盖的旧数据复制回主数据文件;或者将其前滚:将新数据复制到主数据文件中。
当事务未完全提交到日志时,就无法将其前滚,因为数据根本不存在。只能退回去。因此,要使数据库联机,必须丢弃这些事务。
然后,当您尝试还原更多的日志文件时,您将遇到一种情况,即先前的事务已被丢弃,但您正在尝试还原以后的事务。这将使数据库处于不一致的状态。所以这是不允许的。
如果数据库仍处于脱机状态(或处于备用状态),则要还原的顺序中的下列日志备份将拥有其余的事务数据,允许将其前滚,并可将以后的事务应用于顶部。
https://dba.stackexchange.com/questions/310832
复制相似问题