无法在SQL Server中将数据库还原到快照状态

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

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

消息 3013,级别 16,状态 1,第 1 行
恢复数据库异常终止。

以下是创建和还原数据库到快照的 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

我希望在测试套件中的每个测试中都能够创建快照并稍后还原到该快照的整个过程。


2
我认为这篇stackoverflow帖子会有所帮助。 - DHN
你需要先将数据库离线。 - user1666620
2个回答

7
在恢复数据库之前,需要完成以下几个步骤:
  1. 获取活跃用户数量,并结束会话;
  2. 将数据库下线并上线,以终止所有隐藏的连接;
  3. 现在进行数据库恢复。如果失败,则将数据库下线并尝试恢复;
  4. 一旦恢复完成,请将数据库上线。
这些是我一直在使用的数据库恢复步骤,它们在很长一段时间内都很有效。

1
做以下操作:
ALTER DATABASE [Data] SET SINGLE_USER

RESTORE DATABASE Data 
FROM DATABASE_SNAPSHOT = 'Data_SShot'

ALTER DATABASE [Data] SET MULTI_USER WITH NO_WAIT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接