2013-08-06 38 views
0

我正在執行一個經常有效的RESTORE DATABASE語句,但偶爾不起作用,並且不報告任何錯誤。我們正在運行SQL Server 2008R2。批處理文件正在執行sqlcmd語句以從文件運行sql語句。該文件包含以下內容(請注意,名稱由,但正確的,因爲恢復通常工作):RESTORE DATABASE不起作用,並且不報告任何錯誤

USE MASTER; 
RESTORE DATABASE TestMLS 
FROM DISK = 'c:\TestMLS.bak' 
WITH MOVE 'CorrectName1' TO 'c:\TestMLS.MDF', 
MOVE 'CorrectName2' TO 'c:\TestMLS.LDF', 
REPLACE; 
ALTER DATABASE E2SS80Test SET MULTI_USER; 

雖然試圖找到問題,我們啓用了「DBCC TRACEON(3004,3605追查, -1)「,它提供了正常信息,當恢復正常工作時,您會期望這些信息。下面的輸出是什麼日誌顯示,當恢復不起作用:

08/06/2013 13:42:25,spid59,Unknown,Setting database option MULTI_USER to ON for database TestMLS. 
08/06/2013 13:42:25,spid59,Unknown,Resuming any halted fulltext crawls 
08/06/2013 13:42:05,spid59,Unknown,X-locking database: TestMLS 
08/06/2013 13:42:05,spid59,Unknown,Dismounting FullText catalogs 
08/06/2013 13:42:05,spid59,Unknown,Halting FullText crawls on database TestMLS 
08/06/2013 13:42:05,spid59,Unknown,Restore: Planning begins 
08/06/2013 13:42:05,spid59,Unknown,Restore: Backup set is open 
08/06/2013 13:42:05,spid59,Unknown,Restore: Configuration section loaded 
08/06/2013 13:42:05,spid59,Unknown,Opening backup set 
08/06/2013 13:42:05,spid59,Unknown,RestoreDatabase: Database TestMLS 

需要注意的是還原:規劃開始發生,但恢復:規劃結束永遠不會出現。另外,Restore:BeginRestore永遠不會出現。

今天我找到了一種解決方法 - 以前在調用還原之前,腳本並未將數據庫脫機。添加一個語句來做到這一點看起來可以讓恢復工作。

我仍然想知道爲什麼我們會有這種行爲 - 看起來恢復過程至少應該失敗並出現錯誤,而不是僅僅不做所要求的。

任何信息或想法表示讚賞。

+0

您正在使用批處理文件嗎?它仍然是1998年嗎?你有現代的編程工具,如Powershell,.Net,SSIS,T-SQL等,它們都有try/catch,並且可以很容易地返回像這樣的錯誤。 – brian

+0

嗨,布賴恩 - 我很欣賞這種情緒,但我沒有設置這種工作方式的體系結構,而改變它需要改變作爲過程一部分的多個程序,所以這不會爲我們提供幫助。正如我在另一條評論中提到的那樣,批處理文件設置報告任何錯誤都很好 - 但是在這種情況下我沒有發現任何錯誤,既沒有從命令的執行中返回,也沒有在sql服務器跟蹤日誌中返回。 – MisterAcoustic

回答

0

我認爲恢復有時不會發生,因爲當時正在使用被替換的數據庫。嘗試在RESTORE DATABASE指令之前添加此項:

ALTER DATABASE [TestMLS] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; 
+0

謝謝,是的,我們現在正在這樣做,它似乎正在工作。但是,沒有跡象表明數據庫正在使用,我們沒有理由意識到這一點。由於沒有錯誤報告,這個問題的原因仍然是未知的,儘管它可能以某種方式被「使用」,但它可能很容易是別的。我試圖找出它的確切含義(以防其他問題需要解決)以及爲什麼restore命令只是停止嘗試而不提供錯誤。 – MisterAcoustic

+0

注意「X鎖數據庫:TestMLS」消息(SQL Server試圖獨佔鎖定數據庫),然後暫停20秒,然後獲得排它鎖定超時的過程,然後恢復全文抓取並執行ALTER DATABASE SET MULTI_USER命令。因此,當您嘗試恢復數據庫時,該數據庫正在使用中。使用此數據庫集作爲當前數據庫打開一個空的SQL Server Management Studio查詢窗口就足夠了。 我只是做了一個測試,它證實了上面的推理(我在ERRORLOG中也有完全相同的消息序列)。 – Endrju

+0

非常好,再次感謝。我沒有注意到這一點,因爲x鎖定條目出現在成功和不成功的日誌中。既然沒有什麼說它在日誌中失敗了,我認爲它在兩種情況下都是成功的。 SQL管理工作室不是問題的一部分的機器肯定會出現問題,但現在我們可以開始調查爲什麼間歇性地,數據庫仍在使用中。 – MisterAcoustic

相關問題