无法将数据库还原到 SQL Server 中的快照

Mad*_*rya 4 c# sql-server database-restore snapshot-isolation

我想在每次运行单元测试时创建一个数据库快照并将数据库恢复到它。我能够创建快照,但在恢复它时,我在执行时遇到以下错误。

消息 5070,级别 16,状态 2,第 1
行当其他用户正在使用数据库“ImportData”时,无法更改数据库状态

消息 3013,级别 16,状态 1,第 1 行
RESTORE DATABASE 异常终止。

下面列出了用于创建和恢复数据库到快照的 SQL 查询。

创建快照:

CREATE DATABASE Data_SShot
ON (NAME=Data,
    FILENAME='C:\Snapshot\DataSnapshot.ss'),
   (NAME=Data_Data1,
    FILENAME='C:\Snapshot\Data1Snapshot.ss'),
   (NAME=Data_Index1,
    FILENAME='C:\Snapshot\DataIndexSnapshot.ss')
AS SNAPSHOT OF Data
Run Code Online (Sandbox Code Playgroud)

恢复到快照

use master
go

RESTORE DATABASE Data 
FROM DATABASE_SNAPSHOT = 'Data_SShot'
Run Code Online (Sandbox Code Playgroud)

它指出

当其他用户正在使用数据库时,不能更改数据库状态

如何克服这个问题?我正在使用 .NET (C#) 来做到这一点。如何关闭连接才能RESTORE DATABASE成功运行?

我希望创建快照并将数据库恢复到它的整个过程在测试套件中的每个测试中发生。

Sas*_*ran 6

在恢复数据库之前需要做的事情很少。

  1. 获取数据库的活动用户数并终止会话。
  2. 使数据库脱机和联机,这将终止所有隐藏的连接。
  3. 现在恢复数据库。如果失败,则使数据库脱机并尝试恢复。
  4. 还原完成后,使数据库联机。

这些是我一直用于数据库还原的步骤,它对我有用了很长时间。