2016-08-16 163 views
1

我正在研究一個涉及使用數據庫的項目,我正在對它進行單元測試。現在測試會創建一個數據庫作爲.mdf文件並使用它。如何覆蓋.mdf文件

我想要做的就是讓這個.mdf文件放到其它地方的副本,並在每次測試之前替換原來的文件.mdf與我剛剛作出的副本。問題是,當我嘗試這樣做時,它說該文件正在被另一個進程使用。我發現這個過程是sqlservr.exe

我的問題是:有沒有辦法阻止服務器使用該文件,以便我可以替換它?我已經嘗試過SQL Server BACKUP和RESTORE選項,但它們對我來說不夠好,因爲它們太慢了處理過程。

任何幫助將不勝感激。

UPDATE:

好了,多了幾分問題的信息。基本上我正在改進我的單元測試的性能。大多數測試需要連接到數據庫,所以我在.mdf文件中有LocalDb。該文件在TestFixtureSetup期間創建。然後,在每次測試之前(在SetUp期間),通過SQL命令擦除數據庫。這似乎不是每個測試重新創建新數據庫的最有效方法。所以我嘗試了兩種截然不同的方法:

  1. 使用SQL BACKUP和RESTORE命令。這有效,但它增加了我的測試執行時間。
  2. 殺死sqlservr.exe進程,本地複製文件並重新啓動sqlservr.exe。這也可以,但也會增加執行時間。

所以基本上我正在尋找如何提高重建一個完全空的數據庫的性能的建議。

+0

停止服務,複製,然後再次啓動? –

+0

https://msdn.microsoft.com/en-AU/library/ms187858.aspx分離可能工作,然後將其附加回 –

回答

2
  • 您可以停止該服務,複製.MDF文件並重新啓動服務

  • 您也可以分離數據庫,把它複製,並重新將其附加

  • 你也可以備份數據庫

更新:

要啓動,停止,暫停,恢復或重新啓動SQL Server Browser或SQL Server代理的實例。

按照上面的說明啓動SQL Server配置管理器。 如果出現對話框用戶帳戶控制,請單擊是。

在SQL Server配置管理器的左窗格中,單擊「SQL Server服務」。

在結果窗格中,右鍵單擊SQL Server瀏覽器,SQL Server代理(MSSQLServer),或SQL Server代理()對於命名實例,

然後單擊開始,停止,暫停,恢復或重新啓動。

單擊確定關閉SQL Server配置管理器。

更新:

See This Pic

+0

有沒有更快的方式做這個備份?因爲我試圖殺死進程,複製文件然後再次啓動進程,但實際上比以前需要更多時間。 – SalysBruoga

+0

我會用imgs更新我的答案。 – 2016-08-16 07:54:00

+0

@vstrimaitis在彈出菜單中點擊「停止」 – 2016-08-16 08:14:52