2016-04-22 65 views
1

我想在每次運行單元測試時創建數據庫快照併爲其恢復數據庫。我能夠創建快照,但在恢復時,我會在執行操作時遇到以下錯誤。無法將數據庫恢復到SQL Server中的快照

消息5070,級別16,狀態2,第1行,而其他用戶正在使用的數據庫
數據庫狀態不能改變 'IMPORTDATA'

消息3013,級別16,狀態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

[This SO post](http://stackoverflow.com/questions/7197574/script-to-kill-all-connections-to-a-database-more-than-restricted-user-rollback)去幫忙, 我認爲。 – DHN

+0

您需要首先使數據庫脫機。 – user1666620

回答

2

在恢復數據庫之前,有幾件事情需要完成。

1. Get the number of active users for the DB and kill the session. 
2. Take the DB offline and online which will terminate all hidden connections. 
3. Now restore the DB. If incase it fails, then take the DB offline and try to restore. 
4. Once restore is done, bring the DB online. 

這些是我一直用於DB恢復的步驟,它在很長一段時間以來一直在爲我工作。

相關問題