[PL] Jak programistycznie podejrzeć errorlog?
Errorlog w SQL Server dostarcza informacji o tym, co się działo na danej instancji od momentu jej ostatniego uruchomienia. Log ten jest trzymany w postaci plików tekstowych (dla SQL Server 2005 szukaj ich w folderze %ProgramFiles%\Microsoft SQL Server\MSSQL.N\MSSQL\LOG, gdzie MSSQL.N jest folderem odpowiedniej instancji SQL Server). Pliki te są zapisywane cyklicznie i mają nazwy ERRORLOG (aktualny plik loga), ERRORLOG.1, ERRORLOG.2, itd. dla instancji SQL Server i SQLAGENT.OUT, SQLAGENT.1, SQLAGENT.2, ..., SQLAGENT.9 (zawsze 10 plików) dla usługi SQL Server Agent. Ilość plików errorloga instancji można ustawić zmieniając odpowiedni klucz w rejestrze, np. (6 plików dla instancji domyślnej)
USE [master]
GO
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'NumErrorLogs', REG_DWORD, 6
GO
Jeżeli administrator chce podejrzeć zawartość loga z poziomu kodu T-SQL, może użyć nieudokumentowanych procedur składowanych xp_readerrorlog lub sp_readerrorlog. Pierwsza procedura jest procedurą rozszerzoną, zaś druga procedura jest wrapperem pierwszej procedury (dodaje sprawdzenie, czy login uruchamiający procedurę należy do roli securityadmin i wyrzuca błąd, jeżeli przynależność do tej roli nie zostaje stwierdzona).
Sama procedura xp_readerrorlog może przyjąć cztery parametry wejściowe. Pierwszy parametr oznacza numer pliku errorloga (0 - bieżący [default], 1...n - archiwalne). Drugi parametr pozwala określić administratorowi, czy chce on oglądać errorloga instancji (wartość 1 [default]), czy też errorloga usługi SQL Server Agent (wartość 2). Trzeci i czwarty parametr (oba opcjonalne) pozwalają wyszukiwać fragmenty tekstu we wpisach errorloga instancji (jeżeli podano wartości dla obu parametrów, muszą zostać znalezione oba teksty, by wpis został wyświetlony przez procedurę).
Przykład - znalezienie w bieżącym errorlogu instancji wpisów ze słowem "trace":
EXEC master.dbo.xp_readerrorlog 0, 1, 'trace'
Ewentualnym zamiennikiem dla wspomnianych procedur do wyświetlenia wybranego pliku errorloga w całości może być procedura rozszerzona xp_cmdshell. Jednak nie polecam tego rozwiązania ze względów bezpieczeństwa. Przykład:
EXEC master.dbo.xp_cmdshell 'type "C:\Program Files\Microsoft SQL Server\MSSQL.N\MSSQL\LOG\ERRORLOG"'