Sql-Server

xp_delete_file - 沒有要刪除的文件時出現錯誤消息

  • April 27, 2019

我有一份刪除超過 3 天的事務日誌備份的工作。

如果由於某種原因沒有要刪除的文件,則會出現以下錯誤消息:

Msg 22049, Sev 16, State 1: xp_delete_file() returned error 2, 'The system cannot find the file specified.' [SQLSTATE 42000]
Job 'Log Shipping - Delete tran backups older than 3 days' : Step 1, 'delete the trn files older than 3 days' : Began Executing 2019-01-18 23:00:02

Msg 22049, Sev 16, State 1: xp_delete_file() returned error 2, 'The system cannot find the file specified.' [SQLSTATE 42000]

這是工作的程式碼:

-This will set the date time stamp to pass onto the Stored Proc for 72 hours from the current date when it runs
--The stored proc will recursively delete all TRN files from the parent level specified all the way down
declare @DeleteDate nvarchar(50)
declare @DeleteDateTime datetime
set @DeleteDateTime = DateAdd(hh, -72, GetDate())
set @DeleteDate = (Select Replace(Convert(nvarchar, @DeleteDateTime, 111), '/', '-') + 'T' + Convert(nvarchar, @DeleteDateTime, 108))

--5th argument below "0 - don't delete recursively (default)" and  "1 - delete files in sub directories"
EXECUTE master.dbo.xp_delete_file 0,N'\\homer\S_SYSTEMS\FullBackups\MY_SERVER\_log1\',N'trn', @DeleteDate,1

--5th argument below "0 - don't delete recursively (default)" and  "1 - delete files in sub directories"
EXECUTE master.dbo.xp_delete_file 0,N'\\homer\S_SYSTEMS\FullBackups\MY_SERVER\_log12',N'trn', @DeleteDate,1

這是工作: 在此處輸入圖像描述

我們該如何改變呢?如果沒有文件,那很好,不需要失敗。

在隨機選擇的文件夾(空的)上執行查詢時,我設法得到了同樣的錯誤。

Message
Executed as user: DOMAIN\ServiceAccount. xp_delete_file() returned error 2, 'The system cannot find the file specified.' [SQLSTATE 42000] (Error 22049).  The step failed.

起初,我想看看我們是否可以使用TRY CATCHBlock 來“消除” SQL Server 向我們拋出的錯誤尖叫聲。

它仍然失敗並顯示相同的錯誤消息,因此我們不能使用它來獲得“誤報”。

我確實認為錯誤正在發生,因為要麼

  1. 文件夾不存在
  2. 服務帳戶對該文件夾沒有權限

在我知道我的服務帳戶沒有權限的文件夾上執行時,我遇到了同樣的錯誤。更改文件夾並將我的服務帳戶添加為文件夾的“完全控制”後,即使它是空的,它也可以工作。

在此處輸入圖像描述

我的服務帳戶的文件夾權限

在此處輸入圖像描述

文件夾為空

在此處輸入圖像描述

檢查作業 T-SQL

在此處輸入圖像描述

看起來挺好的

資訊

以使用者身份執行:DOMAIN\ServiceAccount。這一步成功了。

這是在SQL Server 2014 (SP2-CU12)

proc 或其他解決方法可能有更好的替代方案。

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