在尝试使用扩展存储过程 xp_delete 解决问题时,我已经阅读了许多不同的方法和解决方案。解决方案是:
- 配置 SSIS 维护任务时,请确保扩展名中没有句点 (.)。
- 如果每个数据库备份都存在第一级子文件夹,请务必单击它们。
- 请务必单击顶部的备份文件。维护任务会检查文件类型。对于数据库备份,我相信它会检查备份文件头。
在我的情况下,以上所有内容都是正确的。网上很少有评论说例程 xp_delete 有问题。
当备份文件没有被删除时,我提取了 SQL 进行维护并从 SSMS 运行它。结果消息是该文件不是 sql server 备份文件。此消息是错误的,因为备份可以成功还原,从而导致数据库正常运行。
用于验证数据库的数据库命令是:
RESTORE HEADERONLY FROM DISK = N'<file path\filename>.Bak'
RESTORE VERIFYONLY FROM DISK = N'<file path\filename>.bak'
以上两个命令都表明备份文件是有效的。
接下来,我打开事件查看器,发现连接管理器出现登录错误的消息。这很奇怪,因为我已经使用测试连接按钮验证了连接。这些错误与我创建的任何帐户无关。
事件查看器消息:
*找不到来自源 MS SQL SERVER 的事件 ID 17052 的描述。引发此事件的组件未安装在本地计算机上,或者安装已损坏。您可以在本地计算机上安装或修复组件。如果事件起源于另一台计算机,则显示信息必须与事件一起保存。
活动中包含以下信息:
严重性:16 错误:18456,操作系统:18456 [Microsoft][SQL Server Native Client 11.0][SQL Server]用户 'domain\servername$' 登录失败。*
接下来,我登录到 xp_delete 正常运行的机器。在查看了活动目录并没有找到系统帐户后,我继续使用事件查看器查找类似的消息。在这里,很明显 domain\server$ 的帐户被映射到系统安全性。
下一步是将 xp_delete 工作的数据库安全性与它不工作的数据库进行比较。在 xp_delete 不起作用的数据库中有 2 个在安全性下丢失的登录。缺少的 2 个登录名是:NT AUTHORITY\SYSTEM NT Service\MSSQLSERVER
添加 NT 服务\MSSQLSERVER 后,xp_delete 成功运行。
一种测试方法是使用维护任务来删除单个文件。