我阅读了多个人在解决扩展存储过程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个登录。这两个缺少的登录是:
NT AUTHORITY\SYSTEM
NT Service\MSSQLSERVER
添加了NT service\MSSQLSERVER后,xp_delete成功工作。
测试的一种方法是使用维护任务删除单个文件。