如果我定期备份 SQL 实例和数据库所在的整个服务器,并将其还原到另一台机器上,我可以使用在生成完整服务器快照后(在原始服务器上)发生的数据库备份,将新的恢复服务器最新?
我需要哪些类型的数据库备份才能做到这一点?我猜如果我有当前数据库的完整备份就足够了,但是如果我上次的完整备份与服务器快照一样旧(甚至更早),我可以使用该完整备份 + 任何差异,事务日志等在该完整备份之后进行的备份,以使我在新恢复的服务器上的服务器快照恢复最新?
示例(为简单起见,我们假设每个备份都立即完成):
服务器 1 在每天下午 5:30 拍摄完整的服务器时间点快照。
服务器 1 上的数据库 A 在每天晚上 11:30 进行每晚的完整备份。
数据库 A 还具有全天每小时进行的例行差异备份。
数据库 A 还具有全天每 15 分钟备份一次的事务日志。
场景一:
服务器 1 在晚上 11:50 崩溃。
从当天早些时候下午 5:30 开始,服务器 2 从服务器 1 的完整服务器时间点快照备份中恢复。
我们能否使用从晚上 11:30(崩溃前 20 分钟)开始的数据库 A 的完整备份(从服务器 1)将数据库恢复到晚上 11:30 时的状态,然后使用晚上 11:45 的事务日志备份使数据库尽可能最新(在服务器 2 上)?
场景二:
服务器 1 在晚上 11:20 崩溃。
从当天早些时候下午 5:30 开始,服务器 2 从服务器 1 的完整服务器时间点快照备份中恢复。
我们可以使用前一天晚上 11:30 的数据库 A 的完整备份(因为我们今天在崩溃之前还没有进行备份),然后是前一天晚上 11:30 之间的所有每小时差异备份,直到晚上 11 点,然后是 11:15 的事务日志备份,以使数据库尽可能更新(在服务器 2 上)?
在上述任一情况下是否有更有效的恢复方式和/或数据库备份类型和频率的更好处理方式?
不可以。您不能手动将 ONLINE 数据库切换到 RESTORING 并应用日志备份,也不能附加数据库并将其保持在 RESTORING 状态。
这将是一个有用的功能,并且之前已请求过。参见例如这里。
任何完整备份,可选的差异备份,然后是从该点开始的日志备份。请注意,它不必是最新的完整备份,只要您将所有日志备份都恢复到该完整备份即可。完整备份和差异备份永远不会破坏日志链。
快照不是备份。为了防止崩溃和在发生故障时进行恢复,您需要备份。备份的频率取决于 RPO、RTO、SLA-s。
数据库快照不是数据库的完整副本,它与源数据库位于同一服务器实例上。如果数据库损坏或丢失,您不能从快照恢复,也不能在另一台服务器上恢复。
快照是数据库的只读状态,应该用于报告、审计或开发目的。
请查看以下文档。
https://learn.microsoft.com/en-us/sql/relational-databases/databases/database-snapshots-sql-server?view=sql-server-ver15