Получить полный текст запроса

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Получить полный текст запроса

Сообщение SLIM » 24.04.2010 (Сб) 10:56

в MS SQL 2000 мало инструментов получения полного текста запросов.
Есть к примеру DBCC INPUTBUFFER, но он возвращает только первые 256 символов запроса по PID.
Иного способа я не нашел, кроме как запуска трассировки через Profiler. Но он, как пишут, хавает не мало ресурсов.
Но можно запускать трассировку и без интерфейса через хранимые процедуры
sp_trace_create - создание
sp_trace_setstatus - установка статуса запуска
sp_trace_setevent - установки событий, на которые реагирует трассер
И т.д.
Но в Profiler-е можно настроить выгрузку данных в таблицу, а через процедуры нет. Можно скидывать трассировки в отдельный файл на сервере, а уже потом, через хранимую процедуру получать этот файл и выгружать в таблицу (может быть Profiler так и поступает).

Так вот. Может быть есть еще какой способ получения полной строки запроса по PID? А то запуск трассировки меня не очень то вдохновляет
Пишите жизнь на чистовик.....переписать не удастся.....

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Re: Получить полный текст запроса

Сообщение HandKot » 27.04.2010 (Вт) 8:57

работает с SP3

Код: Выделить всё
--Для SQL 2000
DECLARE @Handle binary(20),
        @start int,
        @end int,
        @SPID int

SET @SPID = 68 --SPID

SELECT @Handle = sql_handle,
        @start = stmt_start,
        @end = stmt_end
FROM Master..sysProcesses(NOLOCK)
WHERE SPID = @SPID

IF NOT EXISTS (SELECT * FROM ::fn_get_sql(@Handle))PRINT 'Handle not found in cache'
ELSE
   SELECT substring(text, (@start + 2)/2, CASE @end WHEN -1 THEN (datalength(text))
       ELSE (@end -@start + 2)/2 END)
       FROM ::fn_get_sql(@Handle)

SELECT text FROM ::fn_get_sql(@Handle)


или так
Код: Выделить всё
declare @spid int
set @spid = 71

declare @sql_handle varbinary(64)
select @sql_handle = sql_handle from master.dbo.sysprocesses where spid = @spid

select * from ::fn_get_sql(@sql_handle) sql


можно почитать здесьи здесь и GOOGLE

а цикл напишете сами
I Have Nine Lives You Have One Only
THINK!

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Получить полный текст запроса

Сообщение SLIM » 27.04.2010 (Вт) 20:57

О, это то что нужно.
Проверим. Спасибо
Пишите жизнь на чистовик.....переписать не удастся.....

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Re: Получить полный текст запроса

Сообщение HandKot » 30.04.2010 (Пт) 7:05

SLIM писал(а):О, это то что нужно.
Проверим. Спасибо

не забудте показать, что у Вас получилось.
Возможно, в обозримом будущем, тоже понадобится
I Have Nine Lives You Have One Only
THINK!

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Получить полный текст запроса

Сообщение SLIM » 01.05.2010 (Сб) 20:57

Получилось все хорошо. Только работает на SP 3a, функция недокументрованная, поэтому в BOLе ее не найти. Также только при SP в таблицу sysProcesses добавится поле sql_handle (и еще пара других)

Проблема с просмотром текста запущеных хранимых процедур - виден аж самый глубокий вызов, т.е. не сама процедура, а ее текст. Но тут ничего страшного
Пишите жизнь на чистовик.....переписать не удастся.....


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 219

    TopList