首页 > 解决方案 > 使用 sp_send_dbmail 执行包含链接服务器的存储过程时,SQL Server 代理失败

问题描述

sp_send_dbmail从 2021 年 7 月 1 日开始,SQL Server 代理在用于执行包含链接服务器的存储过程时失败。如果我从存储过程中删除代码的链接服务器部分,则作业将成功运行。该作业只需执行以下 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

在以代理身份登录时,我可以从查询窗口手动成功运行此代码。但是,如果我右击该作业并选择“Start job at step...”,代理作业将失败。此外,如果我通过删除 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 UNIQUEIDENTIFIER EXECUTE msdb..sp...”。 :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 或修复错误。结束警告进度:2021-07-06 14:19:53.16 来源:通知操作员任务执行查询“EXECUTE msdb.dbo.sp_notify_operator @name=N'Andy H...”。:100% 完成结束进度 DTExec:包执行返回 DTSER_FAILURE (1)。开始时间:下午 2:19:52 结束时间:下午 2:19:54 经过时间:1.719 秒。包执行失败。步骤失败 2021-07-06 14:19:53.11 代码:0x80019002 来源:Subplan_1 描述:SSIS 警告代码 DTS_W_MAXIMUMERRORCOUNTREACHED。Execution 方法成功,但引发的错误数 (1) 达到了允许的最大值 (1);导致失败。当错误数量达到 MaximumErrorCount 中指定的数量时,就会发生这种情况。更改 MaximumErrorCount 或修复错误。结束警告进度:2021-07-06 14:19:53.16 来源:通知操作员任务执行查询“EXECUTE msdb.dbo.sp_notify_operator @name=N'Andy H...”。:100% 完成结束进度 DTExec:包执行返回 DTSER_FAILURE (1)。开始时间:下午 2:19:52 结束时间:下午 2:19:54 经过时间:1.719 秒。包执行失败。步骤失败 2021-07-06 14:19:53.11 代码:0x80019002 来源:Subplan_1 描述:SSIS 警告代码 DTS_W_MAXIMUMERRORCOUNTREACHED。Execution 方法成功,但引发的错误数 (1) 达到了允许的最大值 (1);导致失败。当错误数量达到 MaximumErrorCount 中指定的数量时,就会发生这种情况。更改 MaximumErrorCount 或修复错误。结束警告进度:2021-07-06 14:19:53.16 来源:通知操作员任务执行查询“EXECUTE msdb.dbo.sp_notify_operator @name=N'Andy H...”。:100% 完成结束进度 DTExec:包执行返回 DTSER_FAILURE (1)。开始时间:下午 2:19:52 结束时间:下午 2:19:54 经过时间:1.719 秒。包执行失败。步骤失败 SSIS 警告代码 DTS_W_MAXIMUMERRORCOUNTREACHED。Execution 方法成功,但引发的错误数 (1) 达到了允许的最大值 (1);导致失败。当错误数量达到 MaximumErrorCount 中指定的数量时,就会发生这种情况。更改 MaximumErrorCount 或修复错误。结束警告进度:2021-07-06 14:19:53.16 来源:通知操作员任务执行查询“EXECUTE msdb.dbo.sp_notify_operator @name=N'Andy H...”。:100% 完成结束进度 DTExec:包执行返回 DTSER_FAILURE (1)。开始时间:下午 2:19:52 结束时间:下午 2:19:54 经过时间:1.719 秒。包执行失败。步骤失败 SSIS 警告代码 DTS_W_MAXIMUMERRORCOUNTREACHED。Execution 方法成功,但引发的错误数 (1) 达到了允许的最大值 (1);导致失败。当错误数量达到 MaximumErrorCount 中指定的数量时,就会发生这种情况。更改 MaximumErrorCount 或修复错误。结束警告进度:2021-07-06 14:19:53.16 来源:通知操作员任务执行查询“EXECUTE msdb.dbo.sp_notify_operator @name=N'Andy H...”。:100% 完成结束进度 DTExec:包执行返回 DTSER_FAILURE (1)。开始时间:下午 2:19:52 结束时间:下午 2:19:54 经过时间:1.719 秒。包执行失败。步骤失败 当错误数量达到 MaximumErrorCount 中指定的数量时,就会发生这种情况。更改 MaximumErrorCount 或修复错误。结束警告进度:2021-07-06 14:19:53.16 来源:通知操作员任务执行查询“EXECUTE msdb.dbo.sp_notify_operator @name=N'Andy H...”。:100% 完成结束进度 DTExec:包执行返回 DTSER_FAILURE (1)。开始时间:下午 2:19:52 结束时间:下午 2:19:54 经过时间:1.719 秒。包执行失败。步骤失败 当错误数量达到 MaximumErrorCount 中指定的数量时,就会发生这种情况。更改 MaximumErrorCount 或修复错误。结束警告进度:2021-07-06 14:19:53.16 来源:通知操作员任务执行查询“EXECUTE msdb.dbo.sp_notify_operator @name=N'Andy H...”。:100% 完成结束进度 DTExec:包执行返回 DTSER_FAILURE (1)。开始时间:下午 2:19:52 结束时间:下午 2:19:54 经过时间:1.719 秒。包执行失败。步骤失败 包执行返回 DTSER_FAILURE (1)。开始时间:下午 2:19:52 结束时间:下午 2:19:54 经过时间:1.719 秒。包执行失败。步骤失败 包执行返回 DTSER_FAILURE (1)。开始时间:下午 2:19:52 结束时间:下午 2:19:54 经过时间:1.719 秒。包执行失败。步骤失败

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

标签: sql-server-agentsp-send-dbmail

解决方案


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

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

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


推荐阅读