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

时间:2016-04-22 09:21:02

标签: c# sql-server database-restore snapshot-isolation

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

  

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

我希望以后为测试套件中的每个测试创建快照并将数据库恢复到以后的整个过程。

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 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