SQL Server Error LOG는 인스턴스 Root 폴더의 LOG폴더에 텍스트 파일 형태로 기록되고 내용을 확인하려면 SSMS를 사용하게 됩니다. 내용을 검색할때는 SSMS에서 제공하는 로그 파일 뷰어를 사용해서 볼 수 있습니다. 만약 에러로그 파일을 분석해서 관리자에게 경고를 보내는 스크립트를 만들려면 로그 파일 뷰어 보다는 쿼리를 이용하는게 좋겠죠. 그래서 SQL Server에서는 sp_readerrorlog라는 저장프로시저를 제공합니다. sp_readerror의 내용을 보면 다음과 같습니다.create proc sys.sp_readerrorlog( @p1 int = 0, @p2 int = NULL, @p3 varchar(255) = NULL, @p4 varchar(255) = NULL) as begin if (not is_srvrolemember(N'securityadmin') = 1) begin raiserror(15003,-1,-1, N'securityadmin') return (1) end if (@p2 is NULL) exec sys.xp_readerrorlog @p1 else exec sys.xp_readerrorlog @p1,@p2,@p3,@p4 end총 4개의 파라메타가 있는데 각 파라메타의 의미는 다음과 같습니다.@p1 : 0 = 현재 로그, 1 = 보관된 첫번째 로그, 2 = 보관된 두번째 로그... @p2 : 1 or Null = Error Log, 2 = SQL Agent Log @p3 and @p4 : Search 키워드, @p3과 @p4가 and 조건입니다. 예를 들어보면sp_readerrorlog 0, 1, 'login', 'failed'이렇게 호출하면 현재 Error Log에서 'login' & 'failed'를 만족하는 로그를 검색해줍니다. 하지만 Error Log는 하나가 아니고 여러개입니다. 그래서 전체 Error를 검색하려면 @p1 파라메타에 숫자를 바꿔가면서 여러번 쿼리해야 합니다. 그래서 전체 Error Log를 검색하기는 불편합니다. 전체 Error Log의 갯수는 xp_enumerrorlogs 프로시져를 통해 알 수 있습니다. 다음 쿼리는 전체 Error Log를 대상으로 검색하는 쿼리입니다.SET NOCOUNT ON DECLARE @Type CHAR(1), @Keyword1 VARCHAR(1000), @Keyword2 VARCHAR(1000) DECLARE @NumErrorLogs INT, @LogCnt INT DECLARE @ErrorLogs TABLE (NO INT, DATE DATETIME, SIZE INT) DECLARE @Errors TABLE (LogDate DATETIME, ProcessInfo VARCHAR(1000), Text VARCHAR(MAX)) INSERT @ErrorLogs EXEC xp_enumerrorlogs SET @NumErrorLogs = (SELECT MAX(NO) FROM @ErrorLogs) SET @LogCnt = 0 WHILE @NumErrorLogs > @LogCnt BEGIN INSERT @Errors EXEC sp_readerrorlog @LogCnt, @Type, @Keyword1, @Keyword2 SET @LogCnt = @LogCnt + 1 End SELECT LogDate, ProcessInfo, Text = REPLACE(TEXT, '. ', '.' + CHAR(10)) FROM @Errors ORDER BY LogDate DESCsp_readerrorlog에서 @p1이 빠진 형태입니다. Log File 번호를 지정하는 대신 xp_enumerrorlogs 를 사용하여 Log File의 갯수를 확인후 전체 파일에 대하여 sp_readerrorlog를 실행합니다. 파일이 클 경우에는 실행 시간이 길어질 수 있습니다. 적절히 수정해서 사용하세요.
2014년 4월 14일 월요일
SQL Server 오류 로그 한번에 확인하기
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기