使用 sp_send_dbmail 执行包含链接服务器的存储过程时,SQL Server 代理失败

问题描述

自 2021 年 7 月 1 日起,sql Server 代理在使用 sp_send_dbmail 执行包含链接服务器的存储过程时失败。如果我从存储过程中删除代码链接服务器部分,作业将成功运行。 该作业仅执行以下 sql 语句:

EXECUTE msdb.dbo.sp_send_dbmail 
@recipients = 'My.Name@MyEmailAddress',@subject = 'Daily Security Check',@query = 'EXECUTE MyDatabase.sec.pr_LinkedServerQuery',@attach_query_result_as_file = 1

我可以在以代理身份登录时从查询窗口手动成功运行此代码。但是,如果我 R 单击该作业并选择“在步骤开始作业...”,则代理作业将失败。此外,如果我通过删除 dbmail 过程来编辑作业并简单地运行 EXECUTE MyDatabase.sec.pr_LinkedServerQuery 代理作业是成功的。只有当它嵌套在 dbmail 过程中时才会失败。这项工作之前已经成功运行了一年多。 我使用的是 sql Server 2017。

日志显示关于 sp_send_dbmail错误,但对这个错误搜索似乎没有反映我遇到的问题。

用户身份执行:HCI\AgentName。适用于 64 位的 Microsoft (R) sql Server 执行包实用程序版本 14.0.3381.3 版权所有 (C) 2017 Microsoft。版权所有。开始时间:下午 2:19:52 进度:2021-07-06 14:19:52.96 来源:{457716A2-22BF-47F5-A08E-8A48A218911F} 执行查询“DECLARE @Guid UNIQUEIDENTIFI...”。 :100% 完成结束进度错误:2021-07-06 14:19:53.11 代码:0xC002F210 来源:执行 T-sql 语句任务执行 sql 任务说明:执行查询“EXECUTE msdb.dbo.sp_send_dbmail @recipients = '。 .”失败并出现以下错误:“无法初始化 sqlcmd 库,错误号为 -2147467259。”。可能的失败原因:查询有问题,“ResultSet”属性设置不正确,参数设置不正确,或者连接建立不正确。结束错误警告:2021-07-06 14:19:53.11 代码:0x80019002 来源:Subplan_1 描述:SSIS 警告代码 DTS_W_MAXIMUMERRORCOUNTREACHED。 Execution 方法成功,但引发的错误数 (1) 达到了允许的最大值 (1);导致失败。当错误数量达到 MaximumErrorCount 中指定的数量时,就会发生这种情况。更改 MaximumErrorCount 或修复错误。 End Warning Progress: 2021-07-06 14:19:53.16 Source: Notify Operator Task Executing query "EXECUTE msdb.dbo.sp_notify_operator @name=N'Andy H...".: 100% 完成 End Progress DTExec: The package执行返回 DTSER_FAILURE (1)。开始:下午 2:19:52 结束:下午 2:19:54 经过:1.719 秒。包执行失败。步骤失败

到目前为止,这个问题一直困扰着我。感谢您对杀死这只野兽的任何见解!

解决方法

感谢 Ramya Makam 的 article。 运行分析器后,我遇到了一个真正的错误:

如果没有模拟登录的映射,则无法在模拟下使用链接服务器。

有了它,编辑链接服务器很容易,我已经备份并运行了!

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...