xp_delete_files不起作用解决方法

时间:2024-08-04 20:37:44

  xp_delete_file用来删除数据库的备份文件和维护计划文本报告。示例:

EXECUTE master.dbo.xp_delete_file 0,N'D:\Backup\Diff',N'bak',N'2019-05-29T10:03:41'

第一个参数表示文件类型,0表示备份文件,1表示文本报告

第二个参数表示要删除的文件存放路径

第三个参数表示要删除的文件后缀,不能带点号。比如写成bak,不能写成.bak

第四个参数是一个日期,文件修改日期(不是创建日期)比这个参数旧的,就删除。(日期相等不删除)

第五个参数为0或1。0表示不查找子目录的文件,1表示在当前路径和下一层路径中查找要删除的文件(最多只遍历一层)。默认值是0,可以省略。

xp_delete_files会校验备份文件和报告文本文件的头,只有合法的备份文件和报告文本才会被删除,其他文件改个后缀,是不会被删除的。

  今天碰到的现象是执行这个脚本后,旧备份文件并没有被删除。最后,在https://*.com/questions/212603/sql-server-xp-delete-file-not-deleting-files/35384431#35384431找到原因,数据库需要有登录名“NT SERVICE\MSSQLSERVER”

xp_delete_files不起作用解决方法

并且需要sysadmin角色。

xp_delete_files不起作用解决方法

另外,添加完这个用户还顺便解决了SQL SERVER日志打不开的情况。

xp_delete_files不起作用解决方法

之前打开SQL SERVER日志,弹出如下报错:

xp_delete_files不起作用解决方法

事件查看器有如下两条相关报错日志:

用户 'TICPD\servername$' 登录失败。 原因: 找不到与提供的名称匹配的登录名。 [客户端: <local machine>]
严重性: 16 错误: 18456,操作系统: 18456 [Microsoft][SQL Server Native Client 11.0][SQL Server]用户 'TICPD\servername$' 登录失败。

消息资源存在,但在字符串/消息表中找不到该消息

执行exec master.dbo.sp_enumerrorlogs报错:

消息 22004,级别 16,状态 1,第 105 行
无法打开环回连接。有关详细信息,请参阅事件日志。
消息 22004,级别 16,状态 1,第 105 行
找不到错误日志位置。

添加完NT SERVICE\MSSQLSERVER登录名,上面报错也都解决了。