Sql-Server

使用 cmdexec 移動文件後 Ola Hallengren 的備份解決方案錯誤消息停止作業,這與常見問題解答不一致

  • July 11, 2018

我正在使用 Ola Hallengren 的維護腳本,並且遇到了一個問題,該問題似乎記錄在常見問題解答中。

就上下文而言,存在必須將現有 SQL Server 備份移動到新共享的問題,因此 MSDB 中的歷史記錄和新備份的目前位置與現在存在的不匹配。

執行 MaintenanceSolution.sql 創建的預設作業時,“DatabaseBackup - USER_DATABASES - FULL”(對其執行的參數稍作修改)我看到作業現在失敗,因為它似乎刪除了它期望的文件:

EXECUTE @ReturnCode = [master].dbo.xp_delete_file 0, N'\\UNC\Path\Server\Database... Process Exit Code 1. The step failed.

在這種類型的第一個錯誤發生後,整個工作就會停止。

在常見問題解答https://ola.hallengren.com/frequently-asked-questions.html中,我發現以下段落解決了我認為我遇到的問題:

為什麼我的工作在第一個錯誤後停止?

發生此問題是因為您使用的是 T-SQL 作業步驟。我建議您使用帶有 sqlcmd 和 -b 選項的 CmdExec 作業步驟。然後作業將在出錯後繼續。

您可以使用 MaintenanceSolution.sql 腳本來創建作業。

我仔細檢查了(因為我認為這是解決方案配置的預設值)並根據我在 SSMS 中看到的內容(類型:作業系統(CmdExec)),發現確實如此。

我還驗證了該作業也使用了 -b 選項:

sqlcmd -E -S $(ESCAPE_SQUOTE(SRVR)) -d master -Q "EXECUTE [dbo].[DatabaseBackup] @Databases = 'USER_DATABASES', @Directory = N'\\UNC\Path\', @BackupType = 'FULL', @Verify = 'N', @CleanupTime = 750 , @CheckSum = 'Y', @LogToTable = 'Y'" -b

我正在快速執行儲存過程,發現它只是將 xp_delete 命令中的任何錯誤分配給一個變數並將其作為錯誤引發(完全是標準 sql),那麼在不修改他的解決方案的情況下是否缺少任何東西來完成這項工作?

謝謝!

在進一步探勘(並且幾乎通過電子郵件發送 Ola)後,我找到了我困惑的根源。

查詢 CommandLog 表 (@LogToTable = ‘Y’) 後發現,當 TSQL 作業步驟報告錯誤時,作業實際上已完成,將命令記錄到表中成功(當然文件存在於磁碟上。)

看起來不僅 TSQL 作業步驟停止報告第一個錯誤,該錯誤在常見問題解答的不同部分中引用。

如果您看到 SQL Server 代理歷史記錄報告失敗的作業,請驗證 master.dbo.CommandLog 表中是否報告了相同的失敗,並確保您指定了 @LogToTable = ‘Y’。

Ola 的工作表現如常見問題解答中所述,對 TSQL 工作步驟的引用是我需要的提示。

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