在创建应用一致性快照时,系统会暂停正在写入的数据,确保快照捕获到的数据的完整性和一致性。通过应用一致性快照恢复数据时,可以减少数据损坏和丢失的风险,可以确保应用(例如SQL Server)能够正常启动,且数据与创建快照时的状态一致。本文以在Windows Server 2019实例上部署Microsoft SQL Server 2019(64位)数据库为例,验证应用一致性快照的数据备份效果。
前提条件
-
ECS实例的云盘类型是ESSD云盘,且云盘未开启多重挂载功能。
-
ECS实例处于运行中且云助手运行正常。如何查看云助手状态请参见查看云助手状态及异常状态处理。
-
您已安装Windows SQL Server数据库。更多信息,请参见部署SQL Server数据库(Windows)。
-
已为ECS实例配置应用一致性快照相关的RAM角色以及自定义权限策略。具体操作,请参见步骤一:创建RAM角色。
说明创建应用一致性快照时,需要调用云助手访问ECS实例并执行命令,因此需要通过RAM角色授予云助手相应的权限。
-
RAM角色:自定义,例如AppSnapshotRoleName。
-
自定义权限策略:策略内容如下,表示在创建快照过程中具有查询快照、创建快照、设置标签和查询云盘信息等相关权限。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:DescribeSnapshot*", "ecs:CreateSnapshot*", "ecs:TagResources", "ecs:DescribeDisks" ], "Resource": [ "*" ], "Condition": {} } ] }
-
操作思路
本实践通过如下操作来验证,如何通过创建应用一致性快照来确保在创建快照的瞬间,数据库状态与创建快照时的状态一致,从而保证应用一致性。操作流程如下:
-
创建数据库表和存储过程,用于模拟数据写入操作,以便后续验证应用一致性快照的效果。
-
为SQL Server数据库所在的Windows实例创建应用一致性快照。创建应用一致性快照时,数据库的写操作会暂时停止,确保数据一致性。
-
通过云助手命令执行结果确认应用一致性快照是否创建成功,并查看数据库暂停和恢复写操作的时间点。
-
先通过应用一致性快照回滚云盘,然后将SQL Server数据库最后写入时间与数据库暂停时间做对比,来判断应用一致性快照的数据恢复是否正确。
-
如果SQL Server数据最后写入时间早于数据库暂停时间:说明数据库在暂停期间没有写入操作,数据恢复后SQL Server数据最后写入时间反映了暂停前的最后状态,数据库状态与快照创建时的状态一致。
-
如果SQL Server数据最后写入时间等于或晚于数据库暂停时间:说明数据库在暂停期间仍有写入操作,应用一致性快照的效果未达到预期。
-
操作步骤
步骤一:准备数据库验证环境
-
远程连接ECS实例。
具体操作,请参见使用Workbench登录Windows实例。
-
连接SQL Server数据库。
-
在左下角单击搜索按钮,在搜索栏中输入
ssms。 -
单击Microsoft SQL Server Management Studio 18。
-
在连接到服务器对话框中,设置服务器连接信息,单击连接。
-
-
在Microsoft SQL Server Management Studio 18中,创建验证需要的数据库(AdventureWorks)。
-
单击新建查询。
-
在查询窗口中,输入以下SQL语句。
CREATE DATABASE AdventureWorks; -
右键单击执行。
-
-
在Microsoft SQL Server Management Studio 18中,创建验证需要的数据库表 (PointInTime)。
-
单击新建查询。
-
在查询窗口中,输入以下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 -
右键单击执行。
-
-
在左侧目录树中,您可以查看创建的数据库和表。
步骤二:通过控制台创建应用一致性快照
在页面左侧顶部,选择目标资源所在的资源组和地域。
-
在快照一致性组页签中单击创建快照一致性组。
-
在创建快照对话框中,设置快照一致性组参数。
-
资源类型默认选中实例。
-
选择单台实例及实例中的ESSD类型云盘。
-
展开高级配置,选中启用应用一致性快照后,选中是否默认包含 Writer。
说明Writer是VSS架构中的关键组件,Windows操作系统自带了许多Writer,负责确保在备份过程中数据的一致性。更多信息,请参见卷影复制服务。
-
-
单击确认。
创建后会返回云助手命令执行ID,您可以根据命令执行ID查看创建结果。
步骤三:验证应用一致性快照是否创建成功
-
单击云助手命令执行ID,在云助手页面查看执行结果。
[level="info"][time="2025-03-03 13:53:03.4228545"][message="Begin to Create Application Consistent Snaps... [level="info"][time="2025-03-03 13:53:03.6121396"][message="Network connection RequestId= A29F3C87-E45F-... [level="info"][time="2025-03-03 13:53:03.6121396"][message="Attached DiskId=d-2ze6zrzyc4ampol4sv1, Devi... [level="info"][time="2025-03-03 13:53:03.6121396"][message="Attached DiskId=d-2zecqmy4929tm5t6haay, Devi... [level="info"][time="2025-03-03 13:53:05.1569259"][message="Required COM+ components are already install... [level="info"][time="2025-03-03 13:53:05.1569259"][message="Provider version is already latest"] [level="info"][time="2025-03-03 13:53:05.1569259"][message="Start to Initialize VSS Requestor ..."] [level="info"][time="2025-03-03 13:53:05.1569259"][message="Prepare to Create snapshot set"] [requestor=" "] [level="info"][time="2025-03-03 13:53:30.9244374"][message="Create Snapshot Set Successfully"] [level="info"][time="2025-03-03 13:53:31.7670453"][message="SnapshotGroup, requestId=E365F945-F0E9-57D4-... [level="info"][time="2025-03-03 13:53:32.5651781"][message="Finished Quering SnapshotGroup Progress"] [level="info"][time="2025-03-03 13:53:32.5651781"][message="Finish SnapshotGroup=ssg-2ze9bjzro7... [level="info"][time="2025-03-03 13:53:32.5651781"][message="Prepare to Thaw FileSystem or Applications"] [requestor=" "] [level="info"][time="2025-03-03 13:53:34.5692263"][message="Thaw Write Request Done"] [level="info"][time="2025-03-03 13:53:34.8605098"][message="Tag snapshots with AppConsistent"] [level="info"][time="2025-03-03 13:53:34.8620327"][message="Take AppConsistent snapshots successfully"] [level="info"][time="2025-03-03 13:53:34.8620327"][message="Prepare Freeze=27.0672261s, Thaw cost=2.0040... [level="info"][time="2025-03-03 13:53:34.8620327"][snapshotgroup="ssg-2ze9bjzro7rp"][message="Fi... Add VolumePath=\\?\Volume{9a80a1cd-3ca9-4afc-xxx}, VolumeName=C:\ Add VolumePath=\\?\Volume{99583ec9-8979-4842-xxx}, VolumeName=D:\ Add VolumePath=\\?\Volume{02db53f7-a3f7-4be1-xxx}, VolumeName= All writers included Finish to GatherWriterMetadata successfullyExitCode返回值为
0,表示云助手上创建应用一致性快照执行成功,此时回显信息中显示创建应用一致性快照和快照一致性组ID。说明如果ExitCode返回值不为
0,请根据ExitCode错误码信息排查相关问题。更多信息,请参见错误码信息。 -
在云助手的返回信息中,查看快照一致性组创建过程信息,确保创建的快照满足数据完整性和可用性的要求。
-
检查一致性组件是否安装(COM+、VSS)。
日志中出现如下类似信息,说明应用一致性快照创建成功。
[level="info"][time="2025-03-03 13:53:03.6121396"][message="Attached DiskId-d-2ze6z xxx", Devi [level="info"][time="2025-03-03 13:53:03.6121396"][message="Attached DiskId-d-2zecqmy4929tm5t6haay, Devi [level="info"][time="2025-03-03 13:53:05.1569259"][message="Required COM+ components are already install [level="info"][time="2025-03-03 13:53:05.1569259"][message="Provider version is already latest"] [level="info"][time="2025-03-03 13:53:05.1569259"][message="Start to Initialize VSS Requestor ..."] [level="info"][time="2025-03-03 13:53:05.1569259"][message="Prepare to Create snapshot set"] [requestor=" "] [level="info"][time="2025-03-03 13:53:30.9244374"][message="Create Snapshot Set Successfully"] [level="info"][time="2025-03-03 13:53:31.7670453"][message="SnapshotGroup, requestId-E365F945-F0E9-57D4- [level="info"][time="2025-03-03 13:53:32.5651781"][message="Finished Quering SnapshotGroup Progress"] [level="info"][time="2025-03-03 13:53:32.5651781"][message="Finish SnapshotGroup-ssg-2ze9bjz [level="info"][time="2025-03-03 13:53:32.5651781"][message="Prepare to Thaw FileSystem or Applications"] -
确保系统能够正确识别并加载所有需要备份的逻辑卷。
日志中 Add VolumePath 行显示 C:\、D:\ 及一个无名称卷已被添加为快照卷。
[level="info"][time="2025-03-03 13:53:34.5692263"][message="Thaw Write Request Done"] [level="info"][time="2025-03-03 13:53:34.8605098"][message="Tag snapshots with AppConsistent"] [level="info"][time="2025-03-03 13:53:34.8620327"][message="Take AppConsistent snapshots successfully"] [level="info"][time="2025-03-03 13:53:34.8620327"][message="Prepare Freeze=27.0672261s, Thaw cost=2.0040xxx [level="info"][time="2025-03-03 13:53:34.8620327"][snapshotgroup="ssg-2ze9bjzro7rxxx"][message="Fixxx Add VolumePath=\\?\Volume{9a80a1cd-3ca9-4afc-b38d-11d8e7d74606}\, VolumeName=C:\ Add VolumePath=\\?\Volume{99583ec9-8979-4842-a45a-21da7d15dc1d}\, VolumeName=D:\ Add VolumePath=\\?\Volume{02db53f7-a3f7-4be1-92f3-8a7ca9324115}\, VolumeName= All writers included Finish to GatherWriterMetadata successfully -
查看是否自动加入SQL Server中相应的数据库,保证数据库的完整性和一致性。
命令输出中可以看到 SqlServerWriter 已自动加入 SQLEXPRESS 实例下的 master、model、msdb、AdventureWorks 四个数据库,说明应用一致性快照创建成功。
* Writer 'Performance Counters Writer': - Add component \PerformanceCounters * Writer 'System Writer': - Add component \System Files - Add component \Win32 Services Files * Writer 'SqlServerWriter': - Add component \iZpo1skdv7v082Z\SQLEXPRESS\master - Add component \iZpo1skdv7v082Z\SQLEXPRESS\model - Add component \iZpo1skdv7v082Z\SQLEXPRESS\msdb - Add component \iZpo1skdv7v082Z\SQLEXPRESS\AdventureWorks * Writer 'ASR Writer': - Add component \ASR\ASR - Add component \Volumes\Volume{9a80a1cd-3ca9-4afc-xxx} - Add component \Volumes\Volume{02db53f7-a3f7-4be1-xxx} - Add component \Volumes\Volume{99583ec9-8979-4842-xxx} -
快照在
2025-03-03 13:53:30创建成功,表示在这一时间点捕获快照数据,数据库的写入操作暂停。[level="info"][time="2025-03-03 13:53:05.1569259"][message="Provider version is already latest"] [level="info"][time="2025-03-03 13:53:05.1569259"][message="Start to Initialize VSS Requestor ..."] [level="info"][time="2025-03-03 13:53:05.1569259"][message="Prepare to Create snapshot set"] [requestor= "] [level="info"][time="2025-03-03 13:53:30.9244374"][message="Create Snapshot Set Successfully"] [level="info"][time="2025-03-03 13:53:31.7670453"][message="SnapshotGroup, requestId=E365F945-F0E9-57D4-xxx"] [level="info"][time="2025-03-03 13:53:32.5651781"][message="Finished Quering SnapshotGroup Progress"] [level="info"][time="2025-03-03 13:53:32.5651781"][message="Finish SnapshotGroup=ssg-2ze9bjzro7rplr81xvfxxx"] [level="info"][time="2025-03-03 13:53:32.5651781"][message="Prepare to Thaw FileSystem or Applications"]
-
-
查看快照一致性组和云盘快照信息。
-
在快照一致性组页签中找到已创建的快照一致性组,单击快照一致性组ID查看快照详情。
-
在快照信息区域,根据快照的标签信息,检查是否成功创建应用一致性快照。
示例中云盘快照的标签显示
APPConsistent:True,表示创建的是应用一致性快照。
-
连接SQL Server数据库,查看数据库的暂停提交时间。
-
远程连接ECS实例。
具体操作,请参见使用Workbench登录Windows实例。
-
通过Microsoft SQL Server Management Studio 18连接SQL Server数据库。
-
单击新建查询。
-
在查询窗口中,输入以下SQL语句。
USE AdventureWorks select * from PointInTime GO -
右键单击执行。
-
在查询结果中,查看数据库的暂停时间点。
您可以发现在
2025-03-03 13:53:30~2025-03-03 13:53:33时间段内没有插入数据,说明13:53:30暂停数据库的写入操作,13:53:33恢复了数据库的写入操作。PIT 622 2025-03-03 13:53:23.843 623 2025-03-03 13:53:23.843 624 2025-03-03 13:53:24.860 624 2025-03-03 13:53:25.887 625 2025-03-03 13:53:26.893 626 2025-03-03 13:53:26.903 626 2025-03-03 13:53:27.907 627 2025-03-03 13:53:27.903 628 2025-03-03 13:53:29.913 629 2025-03-03 13:53:30.923 630 2025-03-03 13:53:33.613 631 2025-03-03 13:53:34.693 632 2025-03-03 13:53:35.703 633 2025-03-03 13:53:36.720 634 2025-03-03 13:53:37.733
-
步骤四:验证通过应用一致性快照恢复数据的效果
-
通过已创建的快照一致性组回滚云盘。
具体操作,请参见通过快照一致性组回滚云盘。
-
重新登录SQL Server数据库并查询数据库表PointInTime的内容。
-
远程连接ECS实例。
具体操作,请参见使用Workbench登录Windows实例。
-
通过Microsoft SQL Server Management Studio 18连接SQL Server数据库。
-
单击新建查询。
-
在查询窗口中,输入以下SQL语句。
USE AdventureWorks select * from PointInTime GO -
右键单击执行。
-
在查询结果中,查看恢复数据后数据库最后一条记录的时间点。
您可以发现数据库最后一条插入数据的时间点为
2025-03-03 13:53:29,早于步骤三中查询的暂停时间点2025-03-03 13:53:30,因此证明关于SQL Server的应用一致性快照备份的结果是正确的。
-