优化日志 Shipping 故障转移





5.00/5 (6投票s)
SQL 脚本,可动态生成用于所有日志传送数据库故障转移/故障恢复的 DR 脚本。虽然它可以使单个数据库的故障转移/故障恢复过程更加简化,但它对于包含多个数据库的服务器(例如 SharePoint、整合的 SQL Server 等)最有帮助。
引言
您可能希望简化日志传送故障转移的原因
- 执行灾难恢复测试,并证明您已为真正的灾难做好准备。
- 由于主服务器已关闭且无法恢复,因此将辅助服务器上线以供服务使用。
- 以最小的停机时间迁移到新服务器。
入门
首先,让我们快速自定义主脚本以适应您的环境,以便它可以生成所需的故障转移脚本。
- 下载并打开 zip 文件(上面的链接),然后在 SQL Management Studio 中打开 SQL_DR_Master.sql 文件。
- 更新变量声明之后的变量。
@FailOverFromPRIMARY
- 是否尝试从 PRIMARY 故障转移?如果设置为 '
Y
',则在将所有可用事务日志应用于 SECONDARY 之前,将在 PRIMARY 上执行最终的事务日志备份。如果设置为 'N
',则 SECONDARY 不会在应用所有可用日志之前尝试从 PRIMARY 进行备份。
- 是否尝试从 PRIMARY 故障转移?如果设置为 '
@ScriptsLocation
- 设置用于创建故障转移脚本的现有网络位置。例如,'\\MyServer\MyFailoverFolder',它应该是一个安全且可访问的位置。
@RunType
- 默认为 '
Automatic
'。这会指示 script 04.sql 自动应用事务日志,然后仅显示已运行的语句。除非尝试解决问题或希望更好地理解正在发生的事情,否则不应更改此设置。
- 默认为 '
- 查阅“注意事项”部分,了解运行脚本之前所需的先决条件。例如:
- 在 SQL Management Studio 中选择“查询 -> 结果 -> 结果到网格”。
- 确保存在从辅助服务器到主服务器的 LinkedServer。
- 验证前面提到的变量是否设置正确。
- 等等。
- 在 SECONDARY 上执行脚本。这实际上不会开始故障转移过程。它只是生成将用于执行故障转移的脚本。
- 随时可以在 SECONDARY 服务器上安全运行,以查看生成的脚本/步骤。
- 如果实际进行故障转移,请将其作为整个过程的一部分运行,以确保生成的脚本尽可能最新,并正确反映当前环境。
执行故障转移
下表描述了每个生成的脚本将执行的主要操作以及期望的结果。前 5 个脚本将从 PRIMARY 故障转移到 SECONDARY,而最后 5 个脚本将(如果需要)从 SECONDARY 故障转移回 PRIMARY。
要开始故障转移,请在 SQL Management Studio 中打开 01.sql - 05.sql。查看下表,并花时间仔细检查生成的 .sql 脚本,以确保一切对您来说都合理,并且您预见到任何问题。在确认生成的脚本看起来不错后,您就可以开始进行服务器故障转移的第一步了。
验证 01.sql 已连接到正确的服务器,然后单击“执行”。对 02.sql - 05.sql 重复此操作以完成故障转移。随时参考下表,以帮助确保一切按预期进行。
故障转移步骤
脚本 | 目标服务器 | 主要操作 | 预期结果 |
01.sql | PRIMARY | 执行并禁用 LS 备份作业。 | LS 备份作业已运行并已禁用。 |
02.sql | SECONDARY | 删除任何 LS 还原延迟,应用所有日志,并禁用 LS 还原作业。 | 数据库已应用所有可用日志。 |
03.sql | PRIMARY | 执行日志备份。 | 数据库处于 NORECOVERY 模式,随时准备故障恢复。 |
04.sql | SECONDARY | 生成要应用于数据库的任何剩余日志的列表并进行还原。 | 数据库已应用所有日志,并且仍然无法访问。 |
05.sql | SECONDARY | 对每个数据库执行还原命令。 | 数据库现已可用并可供使用。 |
在执行 05.sql 后,您将运行在 SECONDARY 服务器上。如果这是 DR 测试,您可以对 SECONDARY 进行一些测试(例如,暂时将您的应用程序指向它以确保其正常工作)。
要执行故障恢复,请在 SQL Management Studio 中打开 06.sql - 10.sql。验证 06.sql 已连接到正确的服务器,然后单击“执行”。对 07.sql - 10.sql 重复此操作以完成故障恢复。随时参考下表,以帮助确保一切按预期进行。
故障恢复步骤
脚本 | 目标服务器 | 主要操作 | 预期结果 |
06.sql | SECONDARY | 执行日志备份。 | 数据库处于 NORECOVERY 模式,等待 LS 重新接管。 |
07.sql | PRIMARY | 还原可用的日志备份。 | 数据库已应用所有可用日志,并且仍处于 NORECOVERY 模式。 |
08.sql | PRIMARY | 将所有数据库恢复到多用户模式。 | 数据库现已可用并可供使用。 |
09.sql | PRIMARY | 启用所有 LS 备份作业。 | PRIMARY 正在进行日志备份。 |
10.sql | SECONDARY | 启用所有 LS 还原作业。 | SECONDARY 正在还原日志备份,并且日志传送正常运行。 |
请注意,在此期间在 SECONDARY 上所做的任何更改将被带回到 PRIMARY,以保持数据库同步。这使得日志传送可以从中断的地方继续。将您的应用程序重新指向 PRIMARY,并进行任何必要的测试,以确保一切符合预期并为您的用户做好准备。
请记住,如果需要,请围绕此解决方案的使用创建任何其他文档。此外,不要忘记定期执行成功故障转移所需的其他步骤(复制登录名和作业等)。
摘要
此解决方案旨在以更系统、可重复的方式帮助执行日志传送故障转移。这使其可以从一个数据库扩展到许多数据库,并增进对日志传送工作原理的理解。 它还允许比高度自动化的解决方案更容易地对错误进行故障排除。