Sql-Server
xp_delete_file - 沒有要刪除的文件時出現錯誤消息
我有一份刪除超過 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 CATCH
Block 來“消除” SQL Server 向我們拋出的錯誤尖叫聲。它仍然失敗並顯示相同的錯誤消息,因此我們不能使用它來獲得“誤報”。
我確實認為錯誤正在發生,因為要麼
- 文件夾不存在
- 服務帳戶對該文件夾沒有權限
在我知道我的服務帳戶沒有權限的文件夾上執行時,我遇到了同樣的錯誤。更改文件夾並將我的服務帳戶添加為文件夾的“完全控制”後,即使它是空的,它也可以工作。
我的服務帳戶的文件夾權限
文件夾為空
檢查作業 T-SQL
看起來挺好的
資訊
以使用者身份執行:DOMAIN\ServiceAccount。這一步成功了。
這是在
SQL Server 2014 (SP2-CU12)
proc 或其他解決方法可能有更好的替代方案。