2012-06-21 2 views
6

Я требую, чтобы иметь одну хранимую процедуру, которая может выполняться и показатьполучить все запросы, выполненные в SQL сервере

«все SQL для текущего соединения, которые ранее работали» и «в настоящее время не работает».

Я много искал об этом, и я не могу найти ответ. Пожалуйста помоги мне с этим.

ответ

9

Лучше использовать Profiler для выполнения этой задачи.

Но если вы хотите запрос в SQL Server 2005+ можно использовать системные представления sys.dm_exec_query_stats, которые returns aggregate performance statistics for cached query plans, но только для обналичены планов и sys.dm_exec_sql_text. К сожалению, у них нет информации о идентификаторе сеанса, поэтому вы можете получить только обналиченные запросы экземпляра сервера.

set transaction isolation level read uncommitted 
select top 1000 
    creation_time, 
    last_execution_time, 
    case 
     when sql_handle IS NULL then ' ' 
     else(substring(st.text,(qs.statement_start_offset+2)/2,(
      case 
       when qs.statement_end_offset =-1 then len(convert(nvarchar(MAX),st.text))*2  
       else qs.statement_end_offset  
      end - qs.statement_start_offset)/2 )) 
    end as query_text, 
    db_name(st.dbid)as db_name, 
    object_schema_name(st.objectid, st.dbid)+'.'+object_name(st.objectid, st.dbid) as object_name 
FROM sys.dm_exec_query_stats qs 
    cross apply sys.dm_exec_sql_text(sql_handle) st 
ORDER BY db_name, object_name 
+0

отлично :). Это то, что я искал. Спасибо большое –

+0

@PriteshGupta Добро пожаловать. –

4

В Oracle:

How do I show running processes in Oracle DB?

В SQL server 2005+ вы можете узнать предыдущие с помощью SPID я думаю. Это даст вам процесс с XXX SPID. Возможно, вы можете получить запущенный процесс «SPID» и создать цикл до запуска SPID. Таким образом, вы можете получить все процессы до запущенных процессов.

DECLARE @sqltxt VARBINARY(128) 
SELECT @sqltxt = sql_handle 
FROM sys.sysprocesses 
WHERE spid = XXX 
SELECT TEXT 
FROM sys.dm_exec_sql_text(@sqltext) 
GO 

Кроме того, вы можете запускать sql-заявления этими;

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 

Он пригодится для вас. Я думаю,

+0

Не sys.dm_exec_requests содержит информацию только о выполняемых сейчас запросах? –

+0

Игорь, да. Это будет работать. Редактирование снова:/ – alicanbatur

+0

http://blog.sqlauthority.com/2009/07/19/sql-server-get-last-running-query-based-on-spid/ имеет 3 способа показать последний запрос, выполненный за сеанс , Мне нравится «DBCC INPUTBUFFER (@DesiredSPID)». – milivojeviCH

Смежные вопросы