Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Dorirad.Dolabar Member Откуда: Сообщений: 5 |
Здравствуйте. Пытаюсь решить проблему мониторинга deadlock, но при этом чтобы на почту отправлялся сам xml. Нашел код который выводит актуальную последнюю информацию и пытаюсь отправить вывод по почте: declare @subject varchar(250) select @subject = 'Deadlock reported on ' + @@servername EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Mail_Profile_Prod', @recipients='*********', @subject = @subject, @body_format = 'HTML', @body = 'A deadlock has been recorded. Further information can be found in the attached file.', @query = 'set QUOTED_IDENTIFIER on; CREATE TABLE #errorlog ( LogDate DATETIME , ProcessInfo VARCHAR(100) , [Text] VARCHAR(MAX) ); DECLARE @tag VARCHAR (MAX) , @path VARCHAR(MAX); INSERT INTO #errorlog EXEC sp_readerrorlog; SELECT @tag = text FROM #errorlog WHERE [Text] LIKE ''Logging%MSSQL\Log%''; DROP TABLE #errorlog; SET @path = SUBSTRING(@tag, 38, CHARINDEX(''MSSQL\Log'', @tag) - 29); SELECT TOP 1 CONVERT(xml, event_data).query(''/event/data/value/child::*'') AS DeadlockReport, CONVERT(xml, event_data).value(''(event[@name="xml_deadlock_report"]/@timestamp)[1]'', ''datetime'') AS Execution_Time FROM sys.fn_xe_file_target_read_file(@path + ''\system_health*.xel'', NULL, NULL, NULL) WHERE OBJECT_NAME like ''xml_deadlock_report'' ORDER BY Execution_Time DESC', @query_result_width = 32767 @attach_query_result_as_file = 1 Сообщение приходит, но текст вложения в крайне обрезанном виде, подозреваю что надо как-то из вывода получить отдельно xml и посылать уже его. Но не могу разобраться как это можно сделать, или может есть альтернативы, в sql очень слаб. Пожалуйста помогите. Как симулировать deadlock, чтобы появилась хоть одна запись, написано тут https://stackoverflow.com/questions/22825147/how-to-simulate-deadlock-on-sql-server Сообщение было отредактировано: 16 янв 21, 16:14 |
16 янв 21, 16:20 [22264402] Ответить | Цитировать Сообщить модератору |
Dorirad.Dolabar Member Откуда: Сообщений: 5 |
Вот такой вывод К сообщению приложен файл. Размер - 7Kb Сообщение было отредактировано: 16 янв 21, 16:20 |
16 янв 21, 16:24 [22264405] Ответить | Цитировать Сообщить модератору |
Dorirad.Dolabar Member Откуда: Сообщений: 5 |
Вопрос стал более конкретный, наколхозил тут. и вроде уже должно работать, но вместо полноценного текста опять он шлет обрывок, я не понимаю в чем прикол:CREATE TABLE #errorlog ( LogDate DATETIME , ProcessInfo VARCHAR(100) , [Text] VARCHAR(MAX) ); DECLARE @tag VARCHAR (MAX) , @path VARCHAR(MAX), @deadlock xml, @body1 VARCHAR(MAX); INSERT INTO #errorlog EXEC sp_readerrorlog; SELECT @tag = text FROM #errorlog WHERE [Text] LIKE 'Logging%MSSQL\Log%'; DROP TABLE #errorlog; ---------------- CREATE TABLE #res ( DeadlockReport xml, LogDate DATETIME ); ------------------- SET @path = SUBSTRING(@tag, 38, CHARINDEX('MSSQL\Log', @tag) - 29); insert into #res SELECT top 1 CONVERT(xml, event_data).query('/event/data/value/child::*') AS DeadlockReport, CONVERT(xml, event_data).value('(event[@name="xml_deadlock_report"]/@timestamp)[1]', 'datetime') AS Execution_Time FROM sys.fn_xe_file_target_read_file(@path + '\system_health*.xel', NULL, NULL, NULL) WHERE OBJECT_NAME like 'xml_deadlock_report' ORDER BY Execution_Time DESC; set @deadlock = (select [DeadlockReport] from #res) --PRINT 'Deadlock: ' + CONVERT(VARCHAR(MAX), @deadlock); set @body1 = CONVERT(VARCHAR(MAX), @deadlock) print @body1 ------------------- declare @subject varchar(250) select @subject = 'Deadlock reported on ' + @@servername EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Mail_Profile_Prod', @recipients='***************', @subject = @subject, @body_format = 'HTML', @body = @body1 -- @query = 'set QUOTED_IDENTIFIER on; print @deadlock;', -- @query_result_width = 32767, -- @attach_query_result_as_file = 1 ------------------- DROP TABLE #res; Вот что выводит print:
А вот что приходит в письме:
|
||||
16 янв 21, 17:29 [22264450] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8346 |
Dorirad.Dolabar, @attach_query_result_as_file = 1 не помогает, выходит? Подсчитывали количество символов, которое приходит? Что насчет @query_no_truncate = 1? Сообщение было отредактировано: 16 янв 21, 18:31 |
16 янв 21, 18:32 [22264469] Ответить | Цитировать Сообщить модератору |
court Member Откуда: Сообщений: 2250 |
![]() поменяй на TEXT если результат будет, и, таки, очень хочется HTML, - то нужно будет немного с HTML-тегами ознакомиться, в частности plaintext :) Сообщение было отредактировано: 16 янв 21, 20:30 |
||||
16 янв 21, 20:36 [22264501] Ответить | Цитировать Сообщить модератору |
Dorirad.Dolabar Member Откуда: Сообщений: 5 |
благодарствую, помогло, не знаю чего сам не догадался. |
||||||||
16 янв 21, 21:50 [22264517] Ответить | Цитировать Сообщить модератору |
Dorirad.Dolabar Member Откуда: Сообщений: 5 |
не пробовал, я так понимаю должно помочь, меня тут запарил косяк вида
причем если в первом варианте скрипта, когда весь запрос выполнялся в @query удалось победить с помощью set QUOTED_IDENTIFIER on то @query = 'set QUOTED_IDENTIFIER on; print @deadlock;' такое не прокатывает, это из за print что ли? |
||||||
16 янв 21, 21:57 [22264518] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |