Sql-Server
僅當 .bak 良好時如何恢復
我正在使用 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
會失敗的情況(例如,有東西突然進入並佔用了你所有的磁碟空間)。