mar*_*c_s 14 sql-server snapshot
我正在尝试定义一种使用测试数据库(在 SQL Server 中)进行集成测试的方法。
我的想法是在启动集成测试程序集时执行以下步骤:
(db)_Basis“基线”的数据库快照,用于未来的集成测试现在,在每个测试类(包含 1-n 个测试)之前,我计划简单地执行“从快照恢复”以恢复到定义明确的、或多或少的数据库“空”状态。到目前为止,它就像一个魅力。
但是,有一组集成测试需要在大型测试数据库上运行 - 所以我希望在每个测试装置(具有 n 个单独测试的类)之前执行此操作
(db)_Basis快照恢复数据库(db)_With_Testdata快照然后对于每个测试,将数据库重置为明确定义的(db)_With_Testdata快照版本,运行测试,验证结果等等。
问题是:我似乎无法同时拥有两个数据库快照 - 一旦我这样做了,我就无法将我的数据库恢复到其中任何一个......我不断收到此错误:
消息 3137,级别 16,状态 4,第 9 行
数据库无法恢复。主要或快照名称指定不正确,所有其他快照尚未删除,或者缺少文件。消息 3013,级别 16,状态 1,第 9 行
RESTORE DATABASE 异常终止。
这真的是 SQL Server 数据库快照的工作方式吗??似乎非常限制..... 如果我不能直接回到原始的“(db)_Basis”快照我会理解 - 但仅仅因为我现在有两个快照,我什至不能回到最近的一个?!?!?
spa*_*dba 12
不幸的是,这是设计使然。
取自 BOL 页面“将数据库还原为数据库快照”:
限制和限制
在以下情况下不支持恢复:
- 数据库当前必须只有一个您计划恢复的数据库快照。
- 数据库中存在任何只读或压缩文件组。
- 任何文件现在都处于脱机状态,但在创建快照时处于联机状态
作为替代方案,您可以删除第一个快照(db)_Basis。我可以理解这似乎非常有限,但可以这样看:快照是基于原始数据文件的稀疏文件,因此恢复到特定快照将使所有快照无效(恢复操作将更改基本数据文件) . 限制可能很烦人,但看起来并非不合理。