为SQL Server创建应用一致性快照最佳实践(Windows)

在创建应用一致性快照时,系统会暂停正在写入的数据,确保快照捕获到的数据的完整性和一致性。通过应用一致性快照回滚云盘,数据不会损坏和丢失,可以确保应用(例如SQL Server)处于一致的启动状态。本文以在Windows实例部署SQL Server数据库为例,验证应用一致性快照的数据备份效果。

前提条件

  • ECS实例的操作系统属于Windows Server 2012 R2及上版本。

  • ECS实例的云盘类型是ESSD云盘,且云盘未开启多重挂载功能

  • ECS实例已安装云助手Agent。具体操作,请参见安装云助手Agent

  • 您已安装Windows SQL Server数据库。更多信息,请参见部署SQL Server数据库

操作步骤

本操作以Windows Server 2019操作系统安装的Microsoft SQL Server 2019(64位)来验证应用一致性快照的数据备份效果为例,请您根据实际环境进行操作。

步骤一:准备数据库验证环境

准备数据库验证环境,用于后续验证应用程序与数据库的交互是否正常。

  1. 远程连接ECS实例。

  2. 连接SQL Server数据库。

    1. 在左下角单击搜索按钮,在搜索栏中输入ssms

      打开ssms

    2. 单击Microsoft SQL Server Management Studio 18

    3. 连接到服务器对话框中,设置服务器连接信息,单击连接

  3. Microsoft SQL Server Management Studio 18中,创建验证需要的数据库(AdventureWorks)。

    1. 单击新建查询

    2. 在查询窗口中,输入以下SQL语句。

      CREATE DATABASE AdventureWorks;
    3. 右键单击执行

  4. Microsoft SQL Server Management Studio 18中,创建验证需要的数据库表 (PointInTime)。

    1. 单击新建查询

    2. 在查询窗口中,输入以下SQL语句。

      USE AdventureWorks
      GO
      IF NOT EXISTS (SELECT name FROM sysobjects WHERE name = 'PointInTime' AND TYPE ='U')
      CREATE TABLE PointInTime (PIT datetime)
      WHILE ( 1 = 1 )
      BEGIN
          INSERT PointInTime SELECT GETDATE()
          WAITFOR DELAY '00:00:001'
      END
    3. 右键单击执行

  5. 在左侧目录树中,您可以查看创建的数据库和表。

    数据库和表

步骤二:为ECS实例授予RAM角色

开启应用一致性快照前,必须先为ECS实例配置相关的RAM角色,赋予ECS实例查询快照、创建快照等相关权限。

  1. 登录RAM控制台

  2. 创建应用一致性快照相关的RAM角色、为RAM角色授权并授予ECS实例。具体操作,请参见创建ECS实例RAM角色并授予给ECS。其中:

    • RAM角色:示例名称为AppSnapshotRoleName

    • 可信实体类型:阿里云服务

    • 自定义权限策略:示例名称为AppSnapshotPolicy,内容如下:

      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "ecs:DescribeSnapshot*",
                      "ecs:CreateSnapshot*",
                      "ecs:TagResources",
                      "ecs:DescribeDisks"
                  ],
                  "Resource": [
                      "*"
                  ],
                  "Condition": {}
              }
          ]
      }

      该策略具有查询快照相关信息、创建快照、设置标签和查询云盘信息等权限。

步骤三:通过控制台创建应用一致性快照

此操作介绍如何在控制台为SQL Server数据库所在的Windows实例创建应用一致性快照。

  1. 进入ECS实例列表页面。

    1. 登录ECS管理控制台

    2. 在左侧导航栏,选择实例与镜像 > 实例

    3. 在顶部菜单栏处,选择目标ECS实例所在地域。image.png

  2. 找到目标实例,在操作列选择更多 > 云盘与镜像 > 创建快照一致性组

  3. 创建快照一致性组对话框中,设置参数。

    1. 选择需要创建快照一致性组的ESSD云盘并设置其他快照参数。

    2. 设置应用一致性快照,选中启用应用一致性快照是否默认包含Writer

  4. 单击确定

    创建后会返回云助手命令ID和命令执行ID,您可以根据命令执行ID查看创建结果。

    image.png

步骤四:验证是否成功创建应用一致性快照

此操作介绍如何在ECS管理控制台查看应用一致性快照创建结果,并在数据库中查看数据暂停提交的效果。

  1. 云助手页面,查看命令执行结果。

    1. 登录ECS管理控制台

    2. 在左侧导航栏,选择运维与监控 > 云助手

    3. 单击命令执行结果页签。

    4. 单击目标命令执行ID,查看执行结果。

      win结果

      如上图所示,ExitCode返回值为0,表示云助手上创建应用一致性快照执行成功,此时回显信息中显示创建应用一致性快照和快照一致性组ID。

      说明

      如果ExitCode返回值不为0,请根据ExitCode错误码信息排查相关问题。更多信息,请参见错误码信息

  2. 在云助手的返回信息中,查看快照一致性组创建过程信息。

    • 检查一致性组件,如果没有则自动安装。检查依赖

    • 自动识别并加载逻辑卷。逻辑卷

    • 自动加入SQL Server中相应的数据库。数据库

    • 快照暂停数据库写入时间点为2021-08-05 16:42:59冻结时间点

  3. 快照页面查看快照一致性组和云盘快照信息。

    1. 在左侧导航栏,选择存储与快照 > 快照

    2. 单击快照一致性组页签,找到已创建的快照一致性组,单击快照一致性组ID查看快照详情。

    3. 快照信息区域,根据快照的标签信息,检查是否成功创建应用一致性快照。

      示例中云盘快照的标签显示APPConsistent:True,表示创建的是应用一致性快照。

      image

  4. 连接SQL Server数据库,查看数据暂停提交时间。

    1. 远程连接ECS实例。

      具体操作,请参见通过密码或密钥认证登录Windows实例

    2. 通过Microsoft SQL Server Management Studio 18连接SQL Server数据库。

    3. 单击新建查询

    4. 在查询窗口中,输入以下SQL语句。

      USE AdventureWorks
      select * from PointInTime
      GO
    5. 右键单击执行

    6. 在查询结果中,您可以发现在暂停时间段内,数据库没有写入记录插入进来。

      查看冻结时间

步骤五:验证通过应用一致性快照恢复数据的效果

先通过应用一致性快照恢复数据,然后将SQL Server数据最后写入时间与prescript.sh脚本执行的时间做对比,来判断应用一致性快照的数据恢复是否正确。

  1. 在ECS管理控制台,通过上面创建的快照一致性组回滚ECS实例。

    具体操作,请参见通过快照一致性组回滚云盘

  2. 登录SQL Server并查询数据库表PointInTime的内容。

    1. 远程连接ECS实例。

      具体操作,请参见通过密码或密钥认证登录Windows实例

    2. 通过Microsoft SQL Server Management Studio 18连接SQL Server数据库。

    3. 单击新建查询

    4. 在查询窗口中,输入以下SQL语句。

      USE AdventureWorks
      select * from PointInTime
      GO
    5. 右键单击执行

    6. 在查询结果中,您可以查看恢复数据后最后一条记录的时间点。

      恢复

      数据库暂停成功之前会停止插入数据。使用应用一致性的快照一致性组恢复数据后,最后一条数据对应的时间为2021-08-05 16:42:57.,早于步骤四中查询的暂停时间点2021-08-05 16:42:59.9732143。因此证明关于SQL Server的应用一致性快照备份的结果是正确的。