Witaj na Zine.net online Zaloguj się | Rejestracja | Pomoc

[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"'

Opublikowane 26 października 2007 13:50 przez brejk

Powiadamianie o komentarzach

Jeżeli chciałbyś otrzymywać email gdy ta wypowiedź zostanie zaktualizowana, to zarejestruj się tutaj

Subskrybuj komentarze za pomocą RSS

Komentarze:

# re: Jak programistycznie podejrzeć errorlog?

26 października 2007 15:20 by mgrzeg

Ho ho! Paweł głosi słowa TSQL również na stronie zina :))

Witamy, witamy!!! :)

# re: Jak programistycznie podejrzeć errorlog?

26 października 2007 16:37 by nuwanda

Witamy, witamy i zachęcamy :)

# re: Jak programistycznie podejrzeć errorlog?

31 października 2007 23:36 by Tomek

Fuj ... a kto pozwala na ustawianie rejestru z poziomu SQL :). Ja tam wiem że to może i dla Was wygodne ale jako admin w stanie spoczynku mnie trzęsie od razu jak to widzę.

# re: Jak programistycznie podejrzeć errorlog?

2 listopada 2007 09:10 by brejk

@Tomek: Rozumiem Twe zgwałcone admińskie uczucia :-) Ale tak już jest, że przy instalacji SQL Servera Admin Windowsa (bo to on przecież instaluje SQLa), bezwiednie (sic!) daje prawa userowi, w kontekście którego działa usługa SQL Server, prawa do wybranych kluczy w rejestrze :-) By design, jak to mawiają w MS.

Co o tym myślisz?

(wymagane) 
wymagane 
(wymagane) 

  
Wprowadź kod: (wymagane)

About brejk

MVP, MCT, SQL Server geek