我正在尝试了解 SQL Server 中的恢复分叉概念,特别是与 sys.database_recovery_status 视图相关的概念。文档中提到了与恢复分叉相关的几列,例如:
- 恢复分叉指南
- 第一个恢复分叉指南
- fork_point_lsn
然而,我很难找到这些含义及其重要性的清晰解释。我的具体问题是:
- SQL Server 中的恢复分叉到底是什么?
- 恢复分叉与数据库恢复过程有何关系?
- 哪些情况通常会导致复苏分叉的产生?
我在网上搜索过,但似乎很少有文章深入介绍或解释这个概念。任何见解或解释都将不胜感激,以及有关此主题的任何综合资源的指示。
从我收集的信息来看,我明白这些 GUID 就像是数据库的 DNA,无论数据库在亲属线上有多远,它都会共享信息来识别自己和第一个祖先。
Stuart Moore 的文章有一些与恢复分叉和备份相关的信息:
我做了一些测试,对这个问题有了一些了解。这个实验可能会帮助你理解恢复叉的用途:
它创建了我们的数据库 LabRecoveryFork,并显示了有关
database_guid
、family_guid
和 的信息recovery_fork_guid
。请注意, 和family_guid
是recovery_fork_guid
相同的,这意味着这是原始数据库,它是该“血统”中的第一个。sys.database_recovery_status文档说明了以下内容
database_guid
:你会发现
database_guid
,family_guid
和之前一样,但是recovery_fork_guid
有所不同,现在我们有一些新的信息:last_log_backup_lsn
,first_recovery_fork_guid
和fork_point_lsn
。现在我们有一个不同的
database_guid
,因为恢复的数据库之前并不存在(如文档所述),但family_guid
仍然是相同的,因为它表明这个数据库源自哪个数据库。此外,last_log_backup_lsn
和first_recovery_fork_guid
与fork_point_lsn
以前相同,因为这个数据库源自同一个备份。同样,我们有一个不同的recovery_fork_guid
。最后,我们从第二个数据库的备份而不是原始备份中创建第三个数据库:
在最后一种情况下,所有信息都发生了变化,除了
family_guid
。这是我从最后一步得到的结果:利用这些信息,您可以发出一个命令
RESTORE HEADERONLY
来查找备份与数据库的关系:您可以比较与 recovery_fork 和 LSN 相关的信息来验证备份与哪个 fork 相关(并且可以使用)。
这篇文章在某种程度上回答了你的一些问题 - 尽管是间接的: https://stuart-moore.com/please-clean-down-your-sql-server-backup-history/
如果您了解 SQL Server 的备份和恢复模型,您将对恢复分叉有所了解 - 它基本上只是 SQL Server 确保维护恢复方法/顺序的一种方式(例如:您尝试恢复的最新事务日志备份与您尝试恢复的数据库的时间点一致)。恢复分叉从完全恢复或创建数据库的时间点开始,以及与群集相关的一些其他场景(我相信当您在群集中进行完全故障转移时,SQL Server 将启动新的恢复分叉)。
显然,DBA Stack Exchange 不允许使用 AI 答案 - 但我在 ChatGPT 上找到了您问题的最佳答案 - 因此如果您有权限,我建议您使用该工具。我并不是 AI 的狂热粉丝 - 但它在总结您的问题等知识方面很有价值 - 我将您的问题(如所呈现的)放入 ChatGPT 4o 中,它给出了比我在网上直接找到的任何地方都更好、更易懂的答案。