Sql-Server

達到最大錯誤計數

  • January 27, 2022

我創建了一個維護計劃,將所有數據庫本地備份到 E Drive 的一個文件夾中。

不知何故,這項工作偶爾會失敗。有時作業執行成功,有時會發送錯誤。

令人困惑的一點是,即使我們收到作業失敗的錯誤,我也可以在目錄中看到最新的 .bak 文件。我什至恢復了那些數據庫並且表中的數據是同步的。這發生在 7/10 錯誤中。有時,只有主數據庫、模型數據庫和使用者數據庫的備份,有時即使發生故障,我們也會備份所有數據庫。

以下是錯誤:

資訊

以使用者身份執行:WIN-N81LQ9R0SAA\localadmin。適用於 64 位的 Microsoft (R) SQL Server 執行包實用程序版本 13.0.5830.85 版權所有 (C) 2016 Microsoft。版權所有。開始時間:下午 3:53:00 進度:2020-11-18 15:53:01.44 來源:{F019CE0D-91E8-4CA8-9CCD-F5B3BB69E1D4} 執行查詢“DECLARE @Guid UNIQUEIDENTIFIER EXECUTE msdb..sp…”。 :100% 完成 End Progress Progress:2020-11-18 15:53:01.77 來源:維護清理任務執行查詢“EXECUTE master.dbo.xp_delete_file 0,N’E:\DatabaseB…”。:100% 完成 End Progress 進度:2020-11-18 15:53:01.91 來源:備份數據庫任務執行查詢“BA​​CKUP DATABASE

$$ master $$TO DISK = N’E:\DatabaseB…".: 50% 完成 End Progress Progress: 2020-11-18 15:53:01.97 來源:備份數據庫任務執行查詢“declare @backupSetId as int select @backupSetId = …".: 100% 完成 End Progress Progress: 2020-11-18 15:53:02.08 來源:備份數據庫任務執行查詢“BA​​CKUP DATABASE$$ model $$TO DISK = N’E:\DatabaseBa…".: 50% 完成 End Progress Progress: 2020-11-18 15:53:02.13 來源:備份數據庫任務執行查詢“將 @backupSetId 聲明為 int select @backupSetId = …".: 100% 完成 End Progress Progress: 2020-11-18 15:53:02.37 來源:備份數據庫任務執行查詢“BA​​CKUP DATABASE$$ msdb $$TO DISK = N’E:\DatabaseBac…".: 50% 完成 End Progress Progress: 2020-11-18 15:53:02.56 來源:備份數據庫任務執行查詢“將@backupSetId 聲明為 int select @backupSetId = …".: 100% 完成 End Progress Progress: 2020-11-18 15:53:02.76 來源:備份數據庫任務執行查詢“BA​​CKUP DATABASE$$ xyz $$TO DISK…".: 50% 完成 End Progress Progress: 2020-11-18 15:53:02.89 Source: Backup Database Task Executing query “declare @backupSetId as int select @backupSetId =…”.: 100 % 完成 End Progress 進度:2020-11-18 15:53:14.53 來源:備份數據庫任務執行查詢“BA​​CKUP DATABASE$$ abc $$TO DISK = N’E:\D…".: 50% 完成結束進度錯誤:2020-11-18 15:53:17.54 程式碼:0xC002F210 來源:備份數據庫任務執行 SQL 任務描述:執行查詢“將 @backupSetId 聲明為 int select @backupSetId =…”失敗並出現以下錯誤:“從伺服器接收結果時發生傳輸級錯誤。(provider: TCP Provider, error: 0 - The network connection was aborted by local system.)”。可能的失敗原因:查詢有問題,“ResultSet”屬性設置不正確,參數設置不正確,或連接未正確建立. 結束錯誤警告:2020-11-18 15:53:17.54 程式碼:0x80019002 來源:Subplan_1 描述:SSIS 警告程式碼 DTS_W_MAXIMUMERRORCOUNTREACHED。執行方法成功,但是引發的錯誤數 (1) 達到了允許的最大值 (1);導致失敗。當錯誤數量達到 MaximumErrorCount 中指定的數量時,就會發生這種情況。更改 MaximumErrorCount 或修復錯誤。結束警告 DTExec:包執行返回 DTSER_FAILURE (1)。開始時間:下午 3:53:00 結束時間:下午 3:53:17 經過時間:16.875 秒。包執行失敗。步驟失敗。

有人可以解釋這種奇怪的行為並幫助我們解決這個問題嗎?

以下是我在維護計劃歷史記錄中遇到的錯誤。錯誤號:-1073548784

錯誤消息:執行查詢“declare @backupSetId as int select @backupSetId =…”失敗,出現以下錯誤:“從伺服器接收結果時發生傳輸級錯誤。(提供者:TCP 提供者,錯誤:0 - 網路連接被本地系統中止。)”。可能的失敗原因:查詢有問題,“ResultSet”屬性設置不正確,參數設置不正確,或連接未正確建立。

TSQL 程式碼:備份數據庫

$$ master $$TO DISK = N’‘E:\DatabaseBackups\Daily16\master_backup_2020_11_24_155301_7291762.bak’’ WITH NOFORMAT, NOINIT, NAME = N’‘master_backup_2020_11_24_155301_7291762’’, SKIP, REWIND, NOUNLOAD, GOPRESSION, SetupSTATS = in select 0 聲明@backupSetId = 來自 msdb..backupset 的位置 where database_name=N’‘master’’ and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N’‘master’’ ) 如果 @backupSetId 為 null 開始 raiserror( N’‘驗證失敗。找不到數據庫’‘‘‘master’‘‘‘的備份資訊。’’, 16, 1) end RESTORE VERIFYONLY FROM DISK = N’‘E:\DatabaseBackups\Daily16\master_backup_2020_11_24_155301_7291762.bak’’ WITH FILE = @backupSetId,NOUNLOAD,NORREWIND 去備份數據庫

$$ model $$TO DISK = N’‘E:\DatabaseBackups\Daily16\model_backup_2020_11_24_155301_7331781.bak’’ WITH NOFORMAT, NOINIT, NAME = N’‘model_backup_2020_11_24_155301_7331781’’, SKIP, REWIND, NOUNLOAD, GOPRESSION, SetIds = 在選擇中聲明@0 @backupSetId = 來自 msdb..backupset 的位置 where database_name=N’‘model’’ and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N’‘model’’ ) if @backupSetId 為 null 開始 raiserror( N’‘驗證失敗。找不到數據庫’‘‘‘model’‘‘‘的備份資訊。’’, 16, 1) end RESTORE VERIFYONLY FROM DISK = N’‘E:\DatabaseBackups\Daily16\model_backup_2020_11_24_155301_7331781.bak’’ WITH FILE = @backupSetId,NOUNLOAD,NORREWIND 去備份數據庫

$$ msdb $$TO DISK = N’‘E:\DatabaseBackups\Daily16\msdb_backup_2020_11_24_155301_7361812.bak’’ WITH NOFORMAT, NOINIT, NAME = N’‘msdb_backup_2020_11_24_155301_7361812’’, SKIP, REWIND, NOUNLOAD, COMPRESSION @backup, STATS in = 聲明@backupSetId = 來自 msdb..backupset 的位置 where database_name=N’‘msdb’’ and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N’‘msdb’’ ) if @backupSetId 為 null 開始 raiserror( N’‘驗證失敗。找不到數據庫’‘‘‘msdb’‘‘‘的備份資訊。’’, 16, 1) end RESTORE VERIFYONLY FROM DISK = N’‘E:\DatabaseBackups\Daily16\msdb_backup_2020_11_24_155301_7361812.bak’’ WITH FILE = @backupSetId,NOUNLOAD,NORREWIND 去備份數據庫

$$ abc $$TO DISK = N’‘E:\DatabaseBackups\Daily16\abc_backup_2020_11_24_155301_7391866.bak’’ WITH NOFORMAT, NOINIT, NAME = N’‘abc_backup_2020_11_24_155301_7391866’’, SKIP, REWIND, NOUNLOAD, COMPRESSION @backupSetId 聲明為@backupSetId = 來自 msdb..backupset 的位置 where database_name=N’‘abc’’ and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N’‘abc’’ ) if @backupSetId 為 null 開始 raiserror( N’‘驗證失敗。找不到數據庫’‘‘‘abc’‘‘‘的備份資訊。’’, 16, 1) end RESTORE VERIFYONLY FROM DISK = N’‘E:\DatabaseBackups\Daily16\abc_backup_2020_11_24_155301_7391866.bak’’ WITH FILE = @backupSetId,NOUNLOAD,NORREWIND 去備份數據庫

$$ xyz $$TO DISK = N’‘E:\DatabaseBackups\Daily16\xyz_backup_2020_11_24_155301_7411886.bak’’ WITH NOFORMAT, NOINIT, NAME = N’‘xyz_backup_2020_11_24_155301_7411886’’, 聲明 SKIP, REWIND, NOUNLOAD, COMPRESSION, COMPRESSION, STATUS @backupSetId = 來自 msdb..backupset 的位置 where database_name=N’‘xyz’’ and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N’‘xyz’’ ) if @backupSetId 為 null 開始 raiserror( N’‘驗證失敗。找不到數據庫’‘‘‘xyz’‘‘‘的備份資訊。’’, 16, 1) end RESTORE VERIFYONLY FROM DISK = N’‘E:\DatabaseBackups\Daily16\xyz_backup_2020_11_24_155301_7411886.bak’’ WITH FILE = @backupSetId, NOUNLOAD, NOREWIND GO

錯誤看起來很明顯:

“從伺服器接收結果時發生傳輸級錯誤。(提供者:TCP 提供者,錯誤:0 - 網路連接被本地系統中止。)”。

所以問題出在連接上。

錯誤繼續並給我們一些提示(可能的失敗原因):

  1. **查詢的問題:**我不這麼認為,查詢總是一樣的
  2. **“ResultSet”屬性設置不正確:**我不這麼認為,查詢只是偶爾會失敗
  3. **參數設置不正確:**我不這麼認為,查詢總是一樣的,只是偶爾會失敗
  4. **或連接未正確建立:嗯,這在我看來是“發生了傳輸級錯誤”

然後錯誤繼續並建議我們如何做以避免將來出現這種情況:

Execution 方法成功,但引發的錯誤數 (1) 達到了允許的最大值 (1);導致失敗。當錯誤數量達到 MaximumErrorCount 中指定的數量時,就會發生這種情況。更改 MaximumErrorCount 或修復錯誤。

因此,如果您將其更改為MaximumErrorCount3您實際上將放置一個重試邏輯,SQL Server 將嘗試多次執行您的查詢,因此您將減少失敗的機會。

**獎勵:**調查您的網路並找出您遇到斷開連接的原因

**錯誤和 T-SQL 更新後編輯:**您的維護計劃可能分為兩個階段:

  1. 備份數據庫
  2. 將數據庫複製到網路上的某處

這就是數據庫備份沒有問題的原因。備份達到 100%,您始終可以恢復它。然後文件被複製到網路中的某個地方,7/10 出現了網路故障。我在這裡找到了解決方案。

其他替代解決方案:所有數據庫的備份失敗

正如您所注意到的,幾乎不可能從維護計劃的作業步驟輸出中獲得任何有用的資訊。

讓維護計劃創建一個報告文件並檢查該報告文件中的錯誤消息。還要檢查主計劃歷史表是否有錯誤。

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