我正在使用此查询来查找已经运行了很长时间的一些查询:
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。 E.g:
EXEC usp_xxx - >调用EXEC usp_yyy - >调用xp_cmdshell。
因此,DBCC InputBuffer的输出是对usp_xxx的调用,这不是我想要的。
答案 0 :(得分:2)
我不确定任何动态管理视图中是否提供了详细信息,但您可以使用session_id并将其与DBCC INPUTBUFFER一起使用以获取所需的详细信息。
DBCC INPUTBUFFER(83)
会返回类似这样的例子
EventType Parameters EventInfo
-------------- ---------- ------------------------
Language Event 0 EXEC xp_cmdshell 'sc /h'