我正在尝试使用“备用”还原模式来跟上每日数据库更新过程的策略。
我从第三方的 FTP 站点获得了 24 个日志传送文件(前一天的每小时事务日志文件)。我会在每晚运行时更新这 24 个文件。我最初以 SQB 文件格式获取这些文件,然后我有一个工具和脚本将这些 SQB 文件转换为 BAK 文件格式。
现在,我正在尝试制定一个持续备份计划的策略。
数据库不必更新或修改,只需读取即可。 我是否一直将每个事务日志文件恢复为“备用”并将它们保留为“备用”模式?
我计划创建一个单独的数据库,以便从这个“只读”数据库的某些表中只检索必要的数据。
我还有一个问题。如果我不小心运行了一个脚本将此数据库恢复为“NoRecovery or Recovery”模式,有没有办法通过运行脚本将模式更改回“Standby”,或者我是否必须再次将完整的 bak 文件恢复为“Standby”(做整个过程再次)?
两者都可以,但是使用
NORECOVERY
. 最后一个应用使用STANDBY
,使数据库可用于只读访问。SQL Server 必须做额外的工作才能使数据库在事务一致的状态下可供读取。然后,当您要求它应用下一个日志备份时,它必须撤消该工作(使用备用文件)。简而言之,STANDBY
不必要的指定确实会减慢速度,因为您最终会执行和撤消部分恢复过程(请参阅下面的 Paul Randal 链接)。在您的情况下,这意味着应用 23 个事务日志备份
NORECOVERY
,然后应用 24个STANDBY
。第二天,你做同样的事情。请注意,当您开始下一个恢复序列时,您需要确保在待机模式下没有任何东西连接到数据库。在您的情况下,这应该不是问题,因为您控制了对数据库的所有访问。如果确实需要强制断开其他用户:
不要忘记稍后再次使数据库对其他用户可用:
您可以从
NORECOVERY
to更改,STANDBY
反之亦然,例如:您无需从更改
STANDBY
为NORECOVERY
应用下一组日志备份。一旦数据库恢复 (
WITH RECOVERY
),您将无法返回,必须重新开始整个恢复序列。在你的场景中你永远不会这样做。下一个还原步骤将自动删除(或重新使用)备用文件,但当还原命令未主动使用该文件时,SQL Server 不会锁定该文件。像对待任何其他数据库文件一样小心处理该文件——如果它丢失了,数据库也会丢失。
推荐阅读: