Estou procurando uma maneira fácil ou gerenciável de ler um arquivo XML, especificamente a saída XML para deadlocks do SQL Server. Tenho alguns servidores que não estão sendo monitorados por vários motivos.
Encontrei o seguinte código no interwebz, mas sua saída não é nada além de XML.
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
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';
Existe uma maneira de obter a saída XML bruta desse código T-SQL e exibi-la como um gráfico de impasse ou texto mais facilmente legível?
Você pode bcp e salvá-lo como
.xdl
. Muitas maneiras de fazer isso .. por exemplo, BCP OUT (estou usando xp_cmdshell , mas você pode usar powershell ou qualquer outro método).Código emprestado da minha resposta (você precisa ajustar o código conforme sua necessidade):