and*_*ena 6 sql-server snapshot restore
我有一些单元测试来操作数据库中的数据。为了保证数据库状态在所有测试中始终相同,我们尝试database snapshot在这些测试开始时恢复。
恢复代码如下所示:
USE Master
ALTER DATABASE {0} SET SINGLE_USER WITH ROLLBACK IMMEDIATE
RESTORE DATABASE {0} FROM DATABASE_SNAPSHOT = '{1}' WITH RECOVERY
ALTER DATABASE {0} SET MULTI_USER
Run Code Online (Sandbox Code Playgroud)
在此之后,测试连接到数据库并执行它们需要执行的任何操作。
问题是,在测试调试期间,如果最终我需要点击stop按钮取消测试,数据库将Restoring永远处于该状态。这很奇怪,因为它只在我停止调试会话时发生。如果我有 20 个测试并且所有测试都在测试之前恢复了快照,那么在这些测试执行期间我将不会出错。
您对可能导致这种情况的原因有什么建议吗?
编辑
补充@usr 的响应,要从测试开始时的不一致状态中恢复数据库,有必要将REPLACE选项添加到restore 语句中。
如果它是这样的,它将起作用:
USE Master
ALTER DATABASE {0} SET SINGLE_USER WITH ROLLBACK IMMEDIATE
RESTORE DATABASE {0} FROM DATABASE_SNAPSHOT = '{1}' WITH RECOVERY, REPLACE
ALTER DATABASE {0} SET MULTI_USER
Run Code Online (Sandbox Code Playgroud)
如果您在RESTORE中途中止,则数据库处于不可用状态。这是有道理的:有些页面是旧的,有些是新的。
停止调试器会终止客户端进程,从而导致 SQL Server 终止连接以及所有相关的会话和请求。
要使其正常工作,请重新启动上次中断的还原步骤。在您的情况下,再次从快照恢复。
| 归档时间: |
|
| 查看次数: |
42911 次 |
| 最近记录: |