2

我正在使用这个查询来查找一些已经运行了很长时间的查询:

SELECT sqltext.TEXT,
req.session_id,
req.status,
req.command,
req.cpu_time,
req.total_elapsed_time
FROM sys.dm_exec_requests req
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS sqltext
order by req.total_elapsed_time des 

目前,我们有一些似乎被卡住的 xp_cmdshell 东西(我们使用它来调用 bcp.exe 以在作业中批量导出)。但是,sys.dm_exec_sql_text() 的输出只输出“xp_cmdshell”而不是参数——我真的很想看看 xp_cmdshell 正在运行哪些命令,以便追踪问题。

有没有办法在 SQL Server 中做到这一点?

编辑:活动会话正在从存储过程调用 xp_cmdshell 。例如:

EXEC usp_xxx -> 调用 EXEC usp_yyy -> 调用 xp_cmdshell。

因此,DBCC InputBuffer 的输出是对 usp_xxx 的调用,这不是我想要的。

4

1 回答 1

2

我不确定任何动态管理视图中是否提供详细信息,但您可以获取 session_id 并将其与DBCC INPUTBUFFER一起使用以获取您寻求的详细信息。

DBCC INPUTBUFFER(83)

会返回这样的例子

EventType           Parameters      EventInfo
--------------      ----------      ------------------------
Language Event      0               EXEC xp_cmdshell 'sc /h'
于 2010-10-05T15:56:54.727 回答