2013-05-04 25 views
3

我從另一臺SQL Server 2005計算機備份了數據庫。我試圖將其還原到我的SQL Server 2008實例。正在恢復數據庫 - 由於正在被另一個進程使用而無法訪問文件

我已經創建了恢復進去,但是當試圖用下面(通過SSMS生成)恢復一個新的數據庫:

RESTORE DATABASE [WendyUAT] 
FROM DISK = N'D:\wanda20130503.bak' 
WITH FILE = 1, 
MOVE N'Wendy' TO N'D:\databases\\WendyUAT.mdf', 
MOVE N'Wendy_log' TO N'D:\databases\\WendyUAT.ldf', 
MOVE N'sysft_WendyFti' TO N'D:\databases\\WendyUAT.WendyFti', 
NOUNLOAD, REPLACE, STATS = 10 

我收到以下錯誤:

System.Data.SqlClient.SqlError: The operating system returned the error '32 (The process cannot access the file because it is being used by another process.)' while attempting 'RestoreContainer::ValidateTargetForCreation' on 'D:\databases\WendyUAT.mdf'.

據我所知(使用Process Explorer等)沒有其他人正在使用該文件。我在Windows Defender中禁用了實時保護。我只是不明白爲什麼SQL Server認爲該文件正在使用,因爲Windows資源管理器讓我刪除它沒有問題,所以Windows似乎並沒有認爲它正在使用。

任何幫助將感激地收到。

+0

下載LockHunter,你可以很容易地告訴別的東西是否是鎖定文件。該實用程序將解鎖文件以及 – levelnis 2013-05-04 10:55:47

+0

@levelnis乾杯,LockHunter告訴我,沒有進程鎖定該文件。這是我所期望的,因爲Windows在刪除文件時沒有任何問題。 – DavidGouge 2013-05-04 11:04:28

回答

9

在運行此備份之前,您如何在應用程序中連接到SQL Server?你連接到什麼數據庫

不能連接到數據庫WendyUAT,當你想恢復它使用它 - 你必須明確地使用一些其他的數據庫,例如master前執行SMO恢復代碼

我所有的T-SQL腳本恢復總會包括:

USE [master] 
GO 

RESTORE DATABASE [WendyUAT] ...... 

所以,如果你從你的應用程序運行此備份,請確保您明確地連接到如master運行這個T-SQL腳本恢復之前

更新:

這是不是你故意做了,或者它可能只是一個錯字?

MOVE N'Wendy' TO N'D:\databases\\WendyUAT.mdf', 
        *   ** 
        *   * 
        *   * two backslashes here -why??? 
        * only one backslash here... 

如果只使用單個反斜槓,它會起作用嗎?

RESTORE DATABASE [WendyUAT] 
FROM DISK = N'D:\wanda20130503.bak' 
WITH FILE = 1, 
MOVE N'Wendy' TO N'D:\databases\WendyUAT.mdf', 
MOVE N'Wendy_log' TO N'D:\databases\WendyUAT.ldf', 
MOVE N'sysft_WendyFti' TO N'D:\databases\WendyUAT.WendyFti', 
NOUNLOAD, REPLACE, STATS = 10 
+0

我在運行還原時連接到主服務器,目前沒有應用程序連接到WendyUAT數據庫。我也嘗試創建一個全新的數據庫,然後恢復到同一條消息。 – DavidGouge 2013-05-04 10:58:36

+0

@DavidGouge:如果你不**事先創建數據庫? – 2013-05-04 11:00:49

+0

然後恢復到90%,但失敗並返回失敗操作系統嘗試'D:\ databases \\ WendyUAT'上的'OpenFile'時返回了錯誤'123(文件名,目錄名稱或卷標語法不正確。 WendyFti \ CatalogStatus.dat」。 – DavidGouge 2013-05-04 11:02:55

1

嘗試下面的腳本之前恢復

alter database DB_NAME set offline with rollback immediate; 

這個劇本後恢復,以使多用戶

alter database DB_NAME set online with rollback immediate; 
+0

謝謝,即使離線數據庫我仍然得到相同的錯誤。 :/ – DavidGouge 2013-05-04 11:03:26

+1

@DavidGouge:似乎有點奇怪的問題。按照Marc_s的建議嘗試使用單個反斜槓 – 2013-05-04 11:07:24

0

在我已經安裝了SQL Server的情況下我的情況(2008年R2和2012年)。我必須從我的兩個可用SQL實例中停止一個SQL Server服務(2008 R2)。這幫助我解決了這個問題,我可以恢復我的數據庫。

相關問題