在SQL Server 2005中,是否有可能找出调用存储过程的人?

5

是否有可能找出调用存储过程的人?我使用以下查询来识别执行次数等,但无法确定是哪个作业/触发器/进程在调用它。请问有什么想法吗?

SELECT  
    a.execution_count, OBJECT_NAME(objectid) Name,
    (CASE WHEN a.statement_end_offset = -1 
             THEN LEN(CONVERT(nvarchar(max), b.text)) * 2
             ELSE a.statement_end_offset
     END - a.statement_start_offset) / 2),
    b.dbid, dbname = db_name(b.dbid), b.objectid,
    a.creation_time, a.last_execution_time, a.* 
FROM  
    sys.dm_exec_query_stats a 
CROSS APPLY 
    sys.dm_exec_sql_text(a.sql_handle) AS b
WHERE 
    OBJECT_NAME(objectid) = 'Rebuild_Indexes' 
ORDER BY 
    a.last_execution_time
ESCquery_text = SUBSTRING(b.text,a.statement_start_offset/2,

什么是_who_?@@SPIDORIGINAL_LOGIN()可用。您想通过键盘查看指纹并查看谁_真正_启动了应用程序吗?select * from sys.dm_exec_connections as EC inner join sys.dm_exec_sessions as ES on ES.session_id = EC.session_id where EC.session_id = @@SPID - HABO
你会在答案中看到一个常见的主题,即如果不记录所有内容,则无法查看是谁_调用了_存储过程;相反,你只能看到谁_正在调用_它。 - Nick Vaccaro
4个回答

3

如果您想查看谁正在执行存储过程,一种办法是创建一个服务器端跟踪并捕获 SP:Completed 事件。此事件类提供的数据将为您提供所需的所有调用者信息。

参考资料:有关 SP:Completed 事件类的 BOL 文档


3
使用Adam Machanic的存储过程Who is Active - 这将返回关于活动语句的各种信息,包括启动它们的用户。

非常感谢提供链接。我需要类似的东西。 - Mudassir Hasan

2

如果你启动SQL Profiler,它会显示NT用户的网络ID,我建议你在服务器上运行跟踪分析器,如果这是偶尔使用的话。或者,如果你没有使用简单恢复模式,那么答案将在事务日志备份中。但是,这并不容易分析或阅读。


谢谢,我已经识别出一个dtsx包。 - user362283

1
使用动态管理视图选项。DMV为您的SQL Server提供了一个简单和熟悉的关系接口,用于收集关键系统信息。
SELECT DB_NAME(der.database_id) AS databaseName,
       OBJECT_NAME(objectid),
       der.session_id,
       login_name,
       USER_NAME(der.user_id) AS user_name,
       der.command,
       dest.text AS [CommandText],
       des.login_time,
       des.[host_name],
       dec.client_net_address,
       des.[program_name],       
       der.status
FROM sys.dm_exec_requests der
  INNER JOIN sys.dm_exec_connections dec ON der.session_id = dec.session_id
  INNER JOIN sys.dm_exec_sessions des ON der.session_id = des.session_id
  CROSS APPLY sys.dm_exec_sql_text (sql_handle) AS dest
WHERE des.is_user_process = 1 
  --AND OBJECT_NAME(objectid) = 'Rebuild_Indexes'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接