【问题标题】:How to quickly revert data changes in SQL Server database made by an end-to-end test?如何快速还原端到端测试对 SQL Server 数据库中的数据更改?
【发布时间】:2021-09-11 16:20:12
【问题描述】:

如果我们有一套端到端的自动化测试,目标是每个测试都从数据库中的相同(初始)数据集开始,以获得可靠的结果。

有没有人找到任何好的解决方案来快速恢复测试执行期间在 SQL Server 数据库中所做的更改?

总是有可能截断所有表并通过 SQL 重新导入初始数据。但我在想是否有更优雅的东西。例如恢复为快照。

有人试过吗

RESTORE DATABASE FROM DATABASE_SNAPSHOT

SQL Server 功能?速度够快吗?它的速度取决于创建快照时数据库中的数据量,还是取决于自创建快照以来进行了多少更改?

非常感谢您对此提出任何意见。

【问题讨论】:

标签: sql sql-server database automated-tests database-restore


【解决方案1】:

快照功能的工作原理是在原始数据库页面首次修改之前将其“捕获”到快照中。这是一种写时复制。原页面跳转到快照,然后修改正常进行。

当您还原快照时,这些更改的页面将被写回源数据库。所以它所花费的时间与你改变了多少数据成正比。实际上是改变了多少数据库页面。假设您更改了 100 条记录,但它们恰好位于不同的页面上,即需要恢复 100 页。所以数据局部性很重要。

此外,由于您在写入更改页面之前要对其进行复制,因此预计您的修改需要更长的时间。

根据我的经验,它足够快,但取决于您正在处理的数据量。

我可能不会截断/导入,因为我发现它需要更多的工作。如果您在测试期间更改了大量数据,则恢复完整备份可能会更容易/更快。您必须查看最适合您的方法。

【讨论】:

  • 感谢您的解释。正如您所提到的,这听起来很有希望,绝对值得尝试并尝试这些方法以找出最有效的方法。如果数据库中的初始数据集非常庞大,我想通过完整备份恢复恢复数据库可能需要更多时间。..
  • 多长太长?如果这是每日刷新要求,并且您可以在一夜之间刷新,那么从备份还原就足够快了。如果您需要更频繁地刷新 - 那么恢复数据库快照可能就足够快了。那么真正的问题是您需要多久刷新一次数据、数据库有多大以及在每次测试期间更改了多少数据。如果每次测试只更改了几个表 - 仅刷新这些表可能会更快,但同样 - 这一切都取决于“足够快”的实际含义和大小。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-17
  • 1970-01-01
  • 2023-04-04
  • 2016-11-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-22
相关资源
最近更新 更多