65.9K
CodeProject 正在变化。 阅读更多。
Home

优化日志 Shipping 故障转移

starIconstarIconstarIconstarIconstarIcon

5.00/5 (6投票s)

2014年8月15日

MIT

5分钟阅读

viewsIcon

37177

downloadIcon

589

SQL 脚本,可动态生成用于所有日志传送数据库故障转移/故障恢复的 DR 脚本。虽然它可以使单个数据库的故障转移/故障恢复过程更加简化,但它对于包含多个数据库的服务器(例如 SharePoint、整合的 SQL Server 等)最有帮助。

引言

您可能希望简化日志传送故障转移的原因

  • 执行灾难恢复测试,并证明您已为真正的灾难做好准备。
  • 由于主服务器已关闭且无法恢复,因此将辅助服务器上线以供服务使用。
  • 以最小的停机时间迁移到新服务器。

入门

首先,让我们快速自定义主脚本以适应您的环境,以便它可以生成所需的故障转移脚本。

  1. 下载并打开 zip 文件(上面的链接),然后在 SQL Management Studio 中打开 SQL_DR_Master.sql 文件。
  2. 更新变量声明之后的变量。
    • @FailOverFromPRIMARY
      • 是否尝试从 PRIMARY 故障转移?如果设置为 'Y',则在将所有可用事务日志应用于 SECONDARY 之前,将在 PRIMARY 上执行最终的事务日志备份。如果设置为 'N',则 SECONDARY 不会在应用所有可用日志之前尝试从 PRIMARY 进行备份。
    • @ScriptsLocation 
      • 设置用于创建故障转移脚本的现有网络位置。例如,'\\MyServer\MyFailoverFolder',它应该是一个安全且可访问的位置。
    • @RunType 
      • 默认为 'Automatic'。这会指示 script 04.sql 自动应用事务日志,然后仅显示已运行的语句。除非尝试解决问题或希望更好地理解正在发生的事情,否则不应更改此设置。
  3. 查阅“注意事项”部分,了解运行脚本之前所需的先决条件。例如:
    • 在 SQL Management Studio 中选择“查询 -> 结果 -> 结果到网格”。
    • 确保存在从辅助服务器到主服务器的 LinkedServer。
    • 验证前面提到的变量是否设置正确。
    • 等等。
  4. 在 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,并进行任何必要的测试,以确保一切符合预期并为您的用户做好准备。

请记住,如果需要,请围绕此解决方案的使用创建任何其他文档。此外,不要忘记定期执行成功故障转移所需的其他步骤(复制登录名和作业等)。

摘要

此解决方案旨在以更系统、可重复的方式帮助执行日志传送故障转移。这使其可以从一个数据库扩展到许多数据库,并增进对日志传送工作原理的理解。 它还允许比高度自动化的解决方案更容易地对错误进行故障排除。

© . All rights reserved.