如何查找生成sp_send_dbmail请求的过程

时间:2014-11-13 18:45:38

标签: sql-server sql-server-2008-r2

我有一个用户正在接收不接收的电子邮件(来自我们的系统)。设置相关实例和数据库的DBA不再在此工作,也无法提问。

我已经仔细阅读了sysmail_sentitems表以确认邮件已发送,但我想将每个邮件项追溯回执行sp_send_dbmail的过程。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:0)

也许您可以搜索sp_send_dbmail的过程定义并从那里开始:

USE [DatabaseName]
GO

SELECT 
    OBJECT_NAME(object_id) AS ProcedureName,
    [definition] AS ProcedureDefinition
FROM 
    sys.sql_modules
WHERE 
    objectproperty(object_id,'IsProcedure') = 1
    AND 
    [definition] LIKE '%sp_send_dbmail%'

如果您从许多程序发送电子邮件,这可能不是一个很棒的解决方案。

答案 1 :(得分:0)

我现在无法对此进行测试,但这就是我要做的事情:

  1. 启动扩展事件会话以执行sp_send_dbmail。确保捕获call_stack。
  2. 等待调用proc
  3. 从扩展事件输出中,将调用堆栈信息与过程高速缓存中的高速缓存计划相关联。这应该指向你被调用的地方。