我想在每次运行单元测试时创建数据库快照并将数据库还原到它。我能够创建快照,但在恢复时,我在执行此操作时遇到了以下错误。
Msg 5070,Level 16,State 2,Line 1
时,无法更改数据库状态
当其他用户使用数据库' ImportData'Msg 3013,Level 16,State 1,Line 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
?
我希望以后为测试套件中的每个测试创建快照并将数据库恢复到以后的整个过程。
答案 0 :(得分:4)
在恢复数据库之前,需要做的事情很少。
- 获取数据库的活跃用户数并终止会话。
- 使数据库脱机并在线,这将终止所有隐藏的连接。
- 现在恢复数据库。如果失败,则使数据库脱机并尝试恢复。
- 恢复完成后,将数据库联机。
醇>
这些是我用于数据库恢复的步骤,它已经为我工作了很长时间。
答案 1 :(得分:0)
执行以下操作:
ALTER DATABASE [Data] SET SINGLE_USER
RESTORE DATABASE Data
FROM DATABASE_SNAPSHOT = 'Data_SShot'
ALTER DATABASE [Data] SET MULTI_USER WITH NO_WAIT