Sql-Server

僅當 .bak 良好時如何恢復

  • April 23, 2018

我正在使用 Tsql 腳本來恢復幾個數據庫。

RESTORE DATABASE XXX_M
  FROM DISK = 'C:\XXX.bak'
  WITH FILE = 1, replace
GO

有時 .bak 文件損壞(不是數據損壞)。

我想知道是否有辦法檢查文件是否未損壞然後恢復,否則不要。我嘗試在恢復 VERIFYONLY 後使用@@rowcount,但這並不好。

RESTORE VERIFYONLY 
  FROM DISK = 'C:\xxx.bak'
if @@ROWCOUNT !=0
print 'false'
else 
print 'good'

還有其他想法嗎?

謝謝。

檢查@@ROWCOUNT在這裡沒有價值,因為RESTORE VERIFONLY不會返回任何結果。它要麼列印狀態消息,要麼列印錯誤消息。所以,一個簡單的TRY/CATCH應該做:

BEGIN TRY
 RESTORE VERIFYONLY ...
 RESTORE DATABASE   ...
END TRY
BEGIN CATCH
 PRINT ERROR_MESSAGE();
END CATCH

如果VERIFYONLY失敗,它將引發異常,並跳過RESTORE.

當然,仍然存在VERIFYONLY會成功但RESTORE會失敗的情況(例如,有東西突然進入並佔用了你所有的磁碟空間)。

引用自:https://dba.stackexchange.com/questions/204698