SQL Server Error Log betöltése adatbázisba
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.
1SELECT [log_date]
2 ,[source]
3 ,[message]
4 ,CAST(SUBSTRING([message], 7, CHARINDEX(',', [message])-7) AS int) AS ErrorCode
5 ,m.text
6 FROM [dbo].[ErrorLog] e
7 JOIN
8 sys.messages m ON m.message_id = CAST(SUBSTRING([message], 7, CHARINDEX(',', [message])-7) AS int) AND [language_id] = 1033
9 where message like '%error:%' and [source] <> 'Backup'

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 :)