4

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

消息 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

恢复到快照

use master
go

RESTORE DATABASE Data 
FROM DATABASE_SNAPSHOT = 'Data_SShot'

它指出

其他用户正在使用数据库时无法更改数据库状态

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

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

4

2 回答 2

6

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

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

这些是我一直用于数据库恢复的步骤,它已经为我工作了很长时间。

于 2016-04-22T10:04:05.490 回答
0

请执行下列操作:

ALTER DATABASE [Data] SET SINGLE_USER

RESTORE DATABASE Data 
FROM DATABASE_SNAPSHOT = 'Data_SShot'

ALTER DATABASE [Data] SET MULTI_USER WITH NO_WAIT
于 2021-07-06T13:15:58.013 回答