연구개발/DBA

SS2000 - SQL Errorlog 모니터링 하기

HEAD1TON 2010. 7. 27. 03:35
대부분 회사의 DBA들은 매일 SQL 서버 Errorlog 파일에 기록된 내용을 모니터링 할 것입니다.
 
모니터링 해야 할 서버 댓수가 많고, 유용한 관리 툴을 가지고 있지 않다면 자체적으로 툴을 만들어 관리를 해야 합니다. 아래 스크립트는 특정 서버에서 전일 0시 이후 발생한 오류 기록을 조회하는 것입니다. 이를 자체 환경에 맞게 응용하여 출근 전에 오류 기록을 한 장소에 저장한다면, 출근 후 기록을 모니터링 하고 이상 발생에 대처할 수 있습니다.
 
조회 기간을 변경할 경우 변수 @checkdate에 대입하는 값을 변경하면 됩니다.
 
대부분 문제가 없을 것으로 생각합니다만, 비정상적으로 Errorlog 파일이 매우 커지면 성능이 저하될 수 있으므로 이때는 다른 편집기를 사용하기 바랍니다.
 
----------------------------------------------------------------------------------------------------------
 
SET NOCOUNT ON
 
DECLARE @checkdate smalldatetime
DECLARE @no tinyint
DECLARE @seq int
 
SET @checkdate = CAST(CONVERT(char(10), GETDATE() - 1, 120) AS smalldatetime)
 
CREATE TABLE #errorlogno (no tinyint, date smalldatetime, filesize bigint)
CREATE TABLE #errorlog (seq int identity, errlog varchar(4000), cr tinyint)
 
INSERT INTO #errorlogno
EXEC master.dbo.xp_enumerrorlogs 
 
SELECT @no = MIN(no) FROM #errorlogno WHERE date < @checkdate
 
IF (@no IS NULL) BEGIN
  SELECT @no = MAX(no) FROM #errorlogno
END
 
WHILE (@no IS NOT NULL)
BEGIN
  IF @no = 0 BEGIN
    INSERT INTO #errorlog (errlog, cr)
    EXEC master.dbo.xp_readerrorlog
  END
  ELSE BEGIN
    INSERT INTO #errorlog (errlog, cr)
    EXEC master.dbo.xp_readerrorlog @no
  END
 
  SELECT @no = MAX(no) FROM #errorlogno WHERE no < @no
END
 
SELECT @seq = MIN(seq) FROM #errorlog WHERE errlog like CONVERT(char(10), @checkdate, 120) + '%'
 
SELECT errlog AS [전일 이후 SQL 오류 기록] FROM #errorlog WHERE seq >= @seq ORDER BY seq
 
DROP TABLE #errorlogno
DROP TABLE #errorlog