Szeretem az SQL Server Error Log-ot, azonban van vele némi probléma. Nem mindig azon a szerveren kellene megnéznem és/vagy keresnem a tartalmában, ahol az van, így jó lenne, ha be lehetne tölteni ezt adatbázisba. Igen, tudom, ott van az xp_readerrorlog és az sp_readerrorlog, de ezeknél egy komplexebb szűrés nem nagyon lehetséges. Arról nem is beszélve, hogy vannak olyan bejegyzések, amik több sort foglalnak el. A másik problémám ezekkel (is) az volt, hogy több szerverről, akár több tucat error log betöltése az SSMS-be nem igazán lehetséges. Éppen ezért készítettem egy PowerShell scriptet, amit kiraktam a Github-ra, ezen a linken elérhető: http://bit.ly/ErrorLogParser.
A paraméterek megadása után az eredmény már önmagáért beszél: az alábbi lekérdezéssel pl az error bejegyzéseket kerestem meg és rendeltem össze a hibaüzenettel.
SELECT [log_date]
,[source]
,[message]
,CAST(SUBSTRING([message], 7, CHARINDEX(',', [message])-7) AS int) AS ErrorCode
,m.text
FROM [dbo].[ErrorLog] e
JOIN
sys.messages m ON m.message_id = CAST(SUBSTRING([message], 7, CHARINDEX(',', [message])-7) AS int) AND [language_id] = 1033
where message like '%error:%' and [source] <> 'Backup'
Tudom, ez a kód nem a legszebb, de ez egy készülőben lévő eszközöm első lekérdezése, van még mit faragni rajta, de mégis, még mindig jobb, mint amikkel szoktam éles környezetben találkozni :D
A lényeg: ez a kód működik SQL Server 2005 verziótól egészen a mai napon publikusan elérhető verziókkal,de Azure nem :)