如何撤消在受控环境中对数据库所做的每项更改?

Ars*_*nko 4 sql-server sql-server-2008-r2 snapshot restore

我在做一个产品的系统测试,有几个测试严重改变了一个演示数据库的数据。

创建查询的数据非常复杂,这些查询将撤消测试所做的更改;此外,这些测试可能会发生变化。

使用备份/恢复不是一种选择,因为恢复数据库需要 30 秒,这在自动化测试的上下文中太长了。

使用也insert into select很复杂:同样,测试可能会发生变化,并且可能会影响他们现在不影响的表;出于性能原因,以这种方式复制整个数据库也不是一种选择。

Microsoft SQL Server 具有快照功能,但鉴于我在本地主机上没有企业版,我无法使用它。我也不能使用事务,因为系统测试涉及两个应用程序,它们之间有复杂的交互。当然,它们不共享相同的连接。

可以做些什么来快速撤消数据库的最后更改?

为了使问题更容易,

  1. 数据库处于受控环境中:

    • 它在本地主机上,所以我是唯一可以访问它的人,

    • 唯一的变化来自系统测试。所有更改都可能(并且预计会)丢失。

    • 可以选择任何恢复模式。

  2. 准备(例如某种备份)可能需要很长时间,甚至是一项手动任务,因为它很少执行。重要的是从这一点开始撤销更改的速度,因为它是在每次影响数据库的测试之后完成的。

Aar*_*and 5

如果这仅用于开发/测试,您可以获得 Developer Edition 的许可证(2014+ 年免费,2012 年及更低版本约 50 美元)。并使用快照,因为 Developer Edition 支持 Enterprise Edition 中支持的所有功能。唯一的区别是许可 - 您不能在生产中使用 Developer Edition。

您将无法做出比从数据库快照恢复更简单或更快的方法。但是做一些研究——你想知道这样的事情


Sea*_*ong 5

我建议查看DB Snapshots。它们是(理论上)撤消更改的最快方法,除非您将每个更改包装在自己的事务中并在最后回滚(在您将测试结果写入数据库之后)。

如果您愿意将其纳入测试框架,那么将每个单独的测试封装在回滚块中可能会奏效,因为这会在每次测试后撤消对环境所做的所有更改。但是,这将使组合相互依赖的自动化测试变得更加困难。

  • 大型封装事务可能不会很好地工作,因为如果任何代码执行自己的事务,并且没有自治/嵌套事务之类的东西,并且测试可能由多个会话完成...... (2认同)