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.

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

 

Add comment