Текст запроса с помощью подсистемы расширенных событий Microsoft SQL

13.06.13

Разработка - Инструментарий разработчика

В будущем функция sys.fn_trace_gettable будет удалена из Microsoft SQL: http://msdn.microsoft.com/ru-ru/library/ms188425.aspx
Потому предлагаю вашему вниманию способ получения запроса T-SQL с помощью подсистемы расширенных событий

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
ЗапросSQL.epf
.epf 52,05Kb
52
52 Скачать (1 SM) Купить за 1 850 руб.

При написания обработки использовались:

1. типовая консоль запросов с диска ИТС

2. статьи по подсистеме расширенных событий: http://msdn.microsoft.com/ru-ru/library/bb630282.aspx

 

Некоторые функции по работе с сеансом расширенных событий

Результаты выводятся:

на закладке "Консоль запросов". В нижней части формы имеется панель со следующими страницами:

- "Результат", "Сводная таблица" - вывод результата запроса (функционал типовой консоли)

на закладке "Запрос SQL"

-  "Запрос SQL без псевдонимов" - текст запроса на T-SQL, полученный с помощью подсистемы расширенных событий

- "Запрос SQL с псевдонимами" - в тексте запроса на T-SQL заменены некоторые псевдонимы на "близкие глазу" одинэсника Smile Хотя, есть и более значимые причины для этого. Иногда приходится программисту, пишущему на T-SQL, показывать запросы из 1С, преобразованные в T-SQL. Увы, псевдонимы теряются.

- "Результат SQL без псевдонимов",  "Результат SQL с псевдонимами" - в разработке (выполнение SQL запроса из 1С и вывод результата в 1С без необходимости использовать SQL Server Management Studio - в разработке)

-  "Кольцевой буфер" - информационная страница, показывающая данные, собранные сеансом расширенных событий (с учетом ограничений, с которыми сеанс был создан).

 

Обработка вполне функциональная (хотя еще дописывается), в связи с чем хочу сразу предупредить о некоторых минусах:

1. не полностью переводятся в T-SQL пакетные запросы (в будущем будут)

2. изменяются только некоторые псевдонимы (основное направление развития - именно псевдонимы)

3. перед преобразованием запроса (нажатием на кнопку "SQL") текст запроса на 1С должен быть ОБЯЗАТЕЛЬНО отформатирован с помощью конструктора запроса

 

Некотрые использованные механизмы:

1. регулярные выражения

2. внедрение "маркера" в текст запроса 1С

 

Некоторые алгоритмы работы с сеансами расширенных событий:

Подготовка текстов SQL запросов:

Функция СоздатьИмяСеанса() Экспорт
	
	Возврат СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
	
КонецФункции	

// http://msdn.microsoft.com/ru-ru/library/bb677289%28v=sql.100%29.aspx
Функция Текст_СозданиеСеанса() Экспорт
	
	Текст =
	"CREATE EVENT SESSION ИмяСеанса ON SERVER 
	|ADD EVENT sqlserver.rpc_completed(SET collect_statement=(1)
	|	WHERE ([sqlserver].[database_name]=N'ИмяБД')),
	|ADD EVENT sqlserver.sql_statement_starting(SET collect_statement=(1)
	|   ACTION(package0.callstack,sqlserver.client_app_name,sqlserver.client_connection_id,sqlserver.client_hostname,sqlserver.client_pid)
	|	WHERE ([sqlserver].[database_name]=N'ИмяБД')) 
	|ADD TARGET package0.ring_buffer";
                                 	
	Текст = СтрЗаменить(Текст, "ИмяСеанса", ИмяСеанса);
	Текст = СтрЗаменить(Текст, "ИмяБД", 	ИмяБД);
	
	Возврат Текст;
	
КонецФункции

// http://msdn.microsoft.com/ru-ru/library/bb630257%28v=sql.100%29.aspx
Функция Текст_УдалениеСеанса() Экспорт
	
	Возврат "DROP EVENT SESSION " + ИмяСеанса + " ON SERVER";	
	
КонецФункции	

// http://msdn.microsoft.com/ru-ru/library/bb630368%28v=sql.100%29.aspx
Функция Текст_ЗапускСеанса() Экспорт
	
	Возврат "ALTER EVENT SESSION " + ИмяСеанса + " ON SERVER  STATE = START";	
	
КонецФункции

Функция Текст_ОстановкаСеанса() Экспорт
	
	Возврат "ALTER EVENT SESSION " + ИмяСеанса + " ON SERVER  STATE = STOP";	
	
КонецФункции

// http://msdn.microsoft.com/ru-ru/library/ff878182.aspx
Функция Текст_ПросмотрЦелевогоВывода() Экспорт
	
	Текст = 
	"SELECT --*** данный запрос получает текст кольцевого буфера ***-- 
	|	name, 
	|	target_name, 
	|	CAST(xet.target_data AS xml) AS Данные
	|FROM 
	|	sys.dm_xe_session_targets AS xet
	|JOIN sys.dm_xe_sessions AS xe ON (xe.address = xet.event_session_address)
	|WHERE 
	|	xe.name = 'ИмяСеанса'";
	
	Возврат СтрЗаменить(Текст, "ИмяСеанса", ИмяСеанса);
	
КонецФункции

 Пример вызова функции:

//удалим созданный сеанс
	Если УдалятьСеанс Тогда
		УдалениеСеанса = Текст_УдалениеСеанса(); 	
		Попытка
			ADOТаблица = Соединение.Execute(УдалениеСеанса);
		Исключение
			Сообщить("Не получилось удалить сеанс" + ИмяСеанса, СтатусСообщения.Важное);
			Возврат;
		КонецПопытки;
	Иначе
		//остановим сеанс (на всякий случай)
		ОстановкаСеанса = Текст_ОстановкаСеанса(); 
		Попытка
			ADOТаблица = Соединение.Execute(ОстановкаСеанса);
		Исключение
			Сообщить("Не получилось остановить сеанс " + ИмяСеанса, СтатусСообщения.Важное);
			Возврат;
		КонецПопытки;
	КонецЕсли;

Полученные тексты запросов (с псевдонимами и без) протестированы в среде SQL Server Management Studio

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

12000 руб.

02.09.2020    171545    960    403    

923

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    14113    107    46    

107

Инструментарий разработчика Программист Платформа 1С v8.3 1C:Бухгалтерия Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    27200    96    48    

137

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    17224    43    15    

75

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

15000 руб.

10.11.2023    11863    45    27    

67

SALE! %

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

4800 3840 руб.

14.01.2013    191113    1152    0    

920

Инструментарий разработчика Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    1097    2    0    

5

Инструментарий разработчика Программист Платформа 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    104101    244    100    

307
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Famza 85 10.06.13 09:21 Сейчас в теме
17. m191 123 14.06.13 13:21 Сейчас в теме
у меня такая же фигня. 1) Ругается на GUID - добавил литерные символы спереди, стал ругаться так:
Сообщение 25706, уровень 16, состояние 8, строка 1
Не удалось обнаружить объект атрибут событий или источник предиката, "sqlserver.database_name".

CREATE
EVENT
SESSION session500b58c2577048aba868a255bd2891e7
ON SERVER
ADD EVENT sqlserver.rpc_completed(SET collect_statement=(1)
WHERE ([sqlserver].[database_name]=N'phis_im')),
ADD EVENT sqlserver.sql_statement_starting(SET collect_statement=(1)
ACTION(package0.callstack,sqlserver.client_app_name,sqlserver.client_connection_id,sqlserver.client_hostname,sqlserver.client_pid)
WHERE ([sqlserver].[database_name]=N'phis_im'))
ADD TARGET package0.ring_buffer

после вставки
SET QUOTED_IDENTIFIER OFF
НЕ ЗАРАБОТАЛО
18. HEKPOH 76 14.06.13 13:46 Сейчас в теме
(17) проверил в SQL Server Management Studio запрос из поста. Сеанс создается (естественно, имя базы заменил)


Вероятно, не хватает прав :(

У учетки, под которой коннектитесь, права sisadmin есть? Оно включает необходимое право CONTROL SERVER
20. nixel 1441 14.06.13 14:01 Сейчас в теме
(18)
хм. у меня в обозревателе объектов нет ветви "Расширенные события". Это дополнительный компонент и его надо где-то включить?
Ну и в дополнение, на какой версии сервера Вы проверяете? У меня 2008 r2.
21. HEKPOH 76 14.06.13 14:19 Сейчас в теме
(20) у меня 2012, но!

у 2008 R2 с последним сервиспаком должны быть расширенные события
2. sergant500 12.06.13 10:29 Сейчас в теме
Картинка вместо обработки мешает полюбопытчинать тоже
6. HEKPOH 76 13.06.13 11:36 Сейчас в теме
(2)(5) Извините, что-то я напутал с файлами:(
Вечерком залью обработку (с последними изменениями)
3. nixel 1441 12.06.13 11:44 Сейчас в теме
Спасибо за идею, покопаемся.
Под УФ, случаем, нет?
Будет время, попробую впилить в управляемую консоль...
4. HEKPOH 76 12.06.13 14:48 Сейчас в теме
Под УФ нет.
И обработка эта - именно, как идея. Как свободное время появляется, пишу-переписываю-дописываю :).
5. m191 123 13.06.13 09:38 Сейчас в теме
7. HEKPOH 76 13.06.13 18:31 Сейчас в теме
Описание обновил, скрины и обработку перезалил.
Еще раз, прошу прощения
8. nixel 1441 14.06.13 10:37 Сейчас в теме
(7) не получилось покопаться =)
Происходит что-то непонятное при попытке создания сеанса с предложением покурить (строка 907). Сервер доступен, имя базы корректное.

В Соединение.Errors лежит данная табличка на 4 ошибки:
Number	Source	Description	HelpFile	HelpContext	SQLState	NativeError
-2147217900	"Microsoft OLE DB Provider for SQL Server"	"Неправильный синтаксис около конструкции "066"."	""	0	"42000"	102
-2147217900	"Microsoft OLE DB Provider for SQL Server"	"Неправильный синтаксис около конструкции "EVENT"."	""	0	"42000"	102
-2147217900	"Microsoft OLE DB Provider for SQL Server"	"Неправильный синтаксис около конструкции "EVENT"."	""	0	"42000"	102
-2147217900	"Microsoft OLE DB Provider for SQL Server"	"Неправильный синтаксис около конструкции "TARGET"."	""	0	"42000"	102
9. HEKPOH 76 14.06.13 11:46 Сейчас в теме
nixel, привет.
Попробуем разобраться. Проверь по пунктам:
1. Уровень совместимости должен быть как на картинке или выше

2. Проверь, что пишет профайлер
3. Обнови драйвера OLE DB
12. nixel 1441 14.06.13 12:42 Сейчас в теме
(9)
1) Совпадает.
2) Я не силен в администрировании sql-сервера. Можно пошаговую инструкцию или хотя бы где найти профайлер и ссылку на краткую инструкцию по использованию? Предоставлю все, что потребуется =)
3) Обновил. Результат тот же.

Имя базы начинается с буквы, наименование содержит строчные и заглавные латинские буквы и символы _ (подчеркивание)
10. HEKPOH 76 14.06.13 11:54 Сейчас в теме
Да, надеюсь название базы начинается не с цифры?
11. HEKPOH 76 14.06.13 12:39 Сейчас в теме
Может быть, дело в кавычках...

Попробуй в запрос создания сеанса вставить SET QUOTED_IDENTIFIER OFF
http://msdn.microsoft.com/ru-ru/library/ms174393.aspx
13. nixel 1441 14.06.13 12:43 Сейчас в теме
14. nixel 1441 14.06.13 12:53 Сейчас в теме
(11)
не помогло.
Заметил, что в первой строчке с ошибками текст постоянно меняется. Насколько я понял - это часть УИДа сеанса.

Еще иногда (1 раз на 10-15 попыток) вываливается такая ошибка:
Number	Source	Description	HelpFile	HelpContext	SQLState	NativeError
-2147217900	"Microsoft OLE DB Provider for SQL Server"	"Не удалось обнаружить объект атрибут событий или источник предиката, "sqlserver.database_name"."	""	0	"42000"	25 706

но не думаю, что это основная проблема в данном случае.
15. HEKPOH 76 14.06.13 12:57 Сейчас в теме
скопируй сюда (из отладчика) текст запроса (модуль объекта, строка 58)
16. nixel 1441 14.06.13 13:14 Сейчас в теме
(15)
SET QUOTED_IDENTIFIER OFF;

CREATE EVENT SESSION 8851d25ff3cd495da70b65b9f4257279 ON SERVER 
ADD EVENT sqlserver.rpc_completed(SET collect_statement=(1)
	WHERE ([sqlserver].[database_name]=N'grin_TOR_UV')),
ADD EVENT sqlserver.sql_statement_starting(SET collect_statement=(1)
   ACTION(package0.callstack,sqlserver.client_app_name,sqlserver.client_connection_id,sqlserver.client_hostname,sqlserver.client_pid)
	WHERE ([sqlserver].[database_name]=N'grin_TOR_UV')) 
ADD TARGET package0.ring_buffer
Показать


что с установкой флага QUOTED_IDENTIFIER, что без - результат и количество ошибок одинаковое.
19. HEKPOH 76 14.06.13 13:55 Сейчас в теме
m191, спасибо за слово "session" :)

nixel, m191, измените, пожл, функцию СоздатьИмяСеанса()
Возврат "ф" + СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
22. nixel 1441 14.06.13 14:34 Сейчас в теме
Вооооот оно что. у меня первый сервис-пак. Что ж, буду трясти админа. спасибо!
23. HEKPOH 76 14.06.13 14:41 Сейчас в теме
(22) оч надеюсь на продолжение диалога по факту "тряски" админа :)
28. nixel 1441 14.06.13 16:42 Сейчас в теме
(23) задача, так сказать, поставлена =)
А там посмотрим. Если разродится, то обязательно напишу о результатах.
24. m191 123 14.06.13 14:59 Сейчас в теме
select @@VERSION
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) Apr 2 2010 15:48:46 Copyright © Microsoft Corporation Standard Edition (64-bit) on Windows NT 5.2 <X64> (Build 3790: Service Pack 2)

Расширенных событий нет.
25. HEKPOH 76 14.06.13 15:09 Сейчас в теме
26. nixel 1441 14.06.13 15:40 Сейчас в теме
(24) m191, (25) последний сервис-пак на 2008 скуль - третий, не?
27. HEKPOH 76 14.06.13 15:52 Сейчас в теме
(26) не в курсе. у меня 2008 стоял без расширенных. как про них прочитал, 2012 поставил
Оставьте свое сообщение