为 Azure SQL 数据库配置异地复制

预计时间:30 分钟

作为 AdventureWorks 中的数据库管理员 (DBA),你需要为 Azure SQL 数据库启用异地复制,并确保它正常工作。 此外,你将使用门户手动地将其故障转移到另一个区域。

📝 这些练习可能要求复制粘贴 T-SQL 代码并使用现有的 SQL 资源。 在执行代码之前,请验证代码是否已正确复制。

设置环境

如果实验室虚拟机已提供并预配置,则应在 C:\LabFiles 文件夹中找到已准备好的实验室文件。 花点时间检查,如果文件已存在,请跳过本部分。 但是,如果使用自己的计算机或缺少实验室文件,则需要从 GitHub 克隆它们才能继续。

  1. 如果未提供实验室虚拟机或本地计算机,请启动 Visual Studio Code 会话。

  2. 打开命令面板 (Ctrl+Shift+P),然后键入 Git: Clone。 选择 Git: Clone 选项。

  3. 将以下 URL 粘贴到存储库 URL字段中,然后选择 Enter

     https://github.com/MicrosoftLearning/dp-300-database-administrator.git
    
  4. 将存储库保存到实验室虚拟机上的 C:\LabFiles 文件夹,如果没有提供本地计算机,则保存到本地计算机上的相应文件夹(如果文件夹不存在,则创建该文件夹)。

在 Azure 中设置 SQL Server

登录到 Azure 并检查是否已在 Azure 中运行现有的 Azure SQL Server 实例。 如果已在 Azure 中运行 SQL Server 实例,请跳过本部分

  1. 如果未提供实验室虚拟机或本地计算机,请启动 Visual Studio Code 会话,然后从上一部分导航到克隆的存储库。

  2. 右键单击 /Allfiles/Labs 文件夹,然后选择“在集成终端中打开”。

  3. 使用 Azure CLI 连接到 Azure。 输入以下命令并选择 Enter

     az login
    

    📝 请注意,浏览器窗口将打开。 使用 Azure 凭据登录。

  4. 登录到 Azure 后,可以创建资源组(如果尚不存在),并在该资源组下创建 SQL Server 和数据库。 输入以下命令并选择 Enter完成该脚本需要几分钟时间。

     cd ./Setup
     ./deploy-sql-database.ps1
    

    📝 请注意,默认情况下,此脚本将创建名为 contoso-rg 的资源组,或使用名称以 contoso-rg 开头的资源(如果存在)。 默认情况下,它还会在美国西部 2 区域 (westus2) 上创建所有资源。 最后,它将为 SQL 管理员密码生成随机 12 个字符的密码。 可以通过将一个或多个参数 -rgName-location-sqlAdminPw 与自己的值一起使用来更改这些值。 密码必须满足 Azure SQL 密码复杂性要求,长度至少为 12 个字符,并且至少包含 1 个大写字母、1 个小写字母、1 个数字和 1 个特殊字符。

    📝 请注意,该脚本会将当前的公共 IP 地址添加到 SQL Server 防火墙规则。

  5. 脚本完成后,它将返回资源组名称、SQL Server 名称和数据库名称,以及管理员用户名和密码。 记下这些值,因为稍后在实验室中需要这些值


启用异地复制

  1. 如果未提供实验室虚拟机或本地计算机,请启动浏览器会话并导航到 https://portal.azure.com。 使用 Azure 凭据登录到门户。

  2. 在 Azure 门户中,通过搜索“sql 数据库”导航到你的数据库。

  3. 选择 SQL 数据库 AdventureWorksLT

  4. 在数据库边栏选项卡的“数据管理”部分,选择“副本” 。

  5. 选择 + 创建副本

  6. 在“创建 SQL 数据库 - 异地副本”页上,可以看到“项目详细信息”和“主数据库”部分已填入订阅、资源组和数据库名称。

  7. 对于“副本配置”部分,请选择“副本类型”的“异地副本”。

  8. 在“异地辅助数据库详细信息”中填写以下值:

    • 订阅:<订阅名称> (与主数据库相同)。
    • 资源组:<选择与主数据库相同的资源组。>
    • 数据库名称:数据库名称将灰显并与主数据库名称相同。
    • 服务器**:选择“新建”**。
    • 在“创建 SQL Database 服务器”页上,填写以下值:

      • 服务器名称:输入辅助服务器的唯一名称。 服务器名称必须在所有 Azure SQL 数据库服务器中都是唯一的。
      • 位置:从主数据库选择其他区域。 请注意,订阅可能没有可用的所有区域。
      • 选中“允许 Azure 服务访问服务器”复选框。 请注意,在生产环境中,可能需要限制对服务器的访问。
      • 对于身份验证,请选择“SQL 身份验证”。 请注意,在生产环境中,可能需要使用“仅使用 Microsoft Entra”身份验证。 输入 *sqladmin 作为管理员登录名和安全密码。 密码必须满足 Azure SQL 密码复杂性要求,长度至少为 12 个字符,并且至少包含 1 个大写字母、1 个小写字母、1 个数字和 1 个特殊字符。
      • 选择“确定”以创建会话。
    • 想要使用弹性池吗?:否。
    • 计算 + 存储:常规用途、Gen5、2 个 vCore、32 GB 存储。
    • 备份存储冗余:本地冗余存储 (LRS)。 请注意,在生产环境中,可能需要使用异地冗余存储 (GRS)
  9. 选择“查看 + 创建” 。

  10. 选择“创建”。 创建辅助服务器和数据库需要几分钟时间。 完成后,进度将从“正在进行的部署”更改为“部署完成”。

  11. 选择“转到资源“,导航到辅助服务器的数据库,以执行下一步。

将 SQL 数据库故障转移到次要区域

创建 Azure SQL 数据库副本后,将执行故障转移。

  1. 如果尚未在辅助服务器的数据库上,请在 Azure 门户中搜索“sql 数据库”,然后在辅助服务器上选择 SQL 数据库 AdventureWorksLT

  2. 在 SQL 数据库主边栏选项卡的“数据管理”部分,选择“副本” 。

  3. 请注意,现已建立异地复制链接。 主数据库的“副本状态”值为 Online,而异地副本的“副本状态”值为 Readable

  4. 选择辅助异地副本服务器的 菜单,然后选择“强制故障转移”。

    📝 强制故障转移会将辅助数据库切换到主角色。 在此操作期间,所有会话都会断开连接。

  5. 出现警告消息时,单击“是”。

  6. 主要副本的状态将切换为“挂起”,次要副本的状态将切换为“故障转移” 。

    📝 请注意,由于数据库很小,因此故障转移速度将很快。 在生产环境中,此过程可能需要几分钟时间。

  7. 完成后,角色将切换,次要副本会成为新的主要副本,旧的主要副本会成为次要副本。 可能需要刷新页面才能看到新的状态。

我们看到,可读辅助数据库可能位于与主数据库相同的 Azure 区域中,或者,更常见的是,位于不同的区域。 这种可读辅助数据库也称为异地辅助数据库或异地副本。


清理资源

如果不将 Azure SQL Server 用于任何其他目的,则可以清理在此实验室中创建的资源。

删除资源组

如果为此实验室创建了一个新的资源组,则可以删除资源组以移除在此实验室中创建的所有资源。

  1. 在 Azure 门户中,从左侧导航窗格中选择“资源组”,或在搜索栏中搜索“资源组”,并从结果中选择资源组。

  2. 转到为此实验室所创建的资源组。 资源组将包含在此实验室中包含的 Azure SQL 服务器和其他资源。

  3. 在顶部菜单中选择“删除资源组”。

  4. 在“删除资源组”对话框中,输入资源组的名称进行确认,然后选择“删除”。

  5. 等待资源组被删除。

  6. 关闭 Azure 门户。

仅删除实验室资源

如果未为此实验室创建新的资源组,并且想要使资源组及其以前的资源保持不变,仍可以删除在此实验室中创建的资源。

  1. 在 Azure 门户中,从左侧导航窗格中选择“资源组”,或在搜索栏中搜索“资源组”,并从结果中选择资源组。

  2. 转到为此实验室所创建的资源组。 资源组将包含在此实验室中包含的 Azure SQL 服务器和其他资源。

  3. 选择前面在实验室中指定的 SQL Server 名称为前缀的所有资源。

  4. 从顶部菜单中选择删除

  5. 在“删除资源”对话框中,键入“删除”并选择“删除”。

  6. 再次选择“删除”,确认删除资源。

  7. 等待资源删除完毕。

  8. 关闭 Azure 门户。

删除 LabFiles 文件夹

如果为此实验室创建了一个新的 LabFiles 文件夹,并且不再需要它,则可以删除 LabFiles 文件夹以移除在此实验室中创建的所有文件。

  1. 如果未提供实验室虚拟机或本地计算机,请打开文件资源管理器并导航到 C:\ 驱动器。
  2. 右键单击 LabFiles 文件夹,然后选择“删除”。
  3. 选择“”,确认删除文件夹。

你已成功完成本实验室。

现在,你了解了如何为 Azure SQL 数据库启用异地副本,以及如何使用门户手动地将其故障转移到另一个区域。