none
[Tip] 에러 로그를 테이블로 관리하는 방법 RRS feed

  • 질문

  • SQL Server 에러 로그는 기본적으로 총 7개의 파일로 관리 됩니다. 서비스가 재시작 될 때 마다 Rollover 되며, 기본 파일의 수를 넘어서는 로그는 사라집니다.
    따라서 예기치 않은 이유로 SQL Server가 여러 번 반복적으로 재시작 되면 문제 시점의 로그를 확보할 수 없게 될 수도 있습니다.

    아래과 같은 방법을 알아보겠습니다.

    • SQL Server Errorlog 및 Agent Log 관리용 테이블 생성
    • 현재 시점까지의 Errorlog 저장하기
    • 현재 시점까지의 Agent Log 저장하기(에이전트 서비스가 반드시 동작 중이어야 함)
    • 테이블 생성 후 2), 3)의 방법을 주기적으로 수행하여 SQL Server 로그를 테이블로 이관하여 관리하면, Log Date 및 ProcessInfo 등에 따라서 원하는 내용의 로그를 보다 빠르게 확인할 수 있으며 아울러 에러 로그의 크기가 커져서 디스크의 공간을 과도하게 차지하는 것을 예방할 수 있습니다.


    • 이동됨 Jina LeeModerator 2012년 7월 30일 월요일 오후 4:11 (이전 위치:[서버 인프라] Windows Server)
    • 편집됨 Jina LeeModerator 2012년 7월 30일 월요일 오후 4:13
    2012년 7월 30일 월요일 오후 2:26
    중재자

답변

  • 아래와 같이 가능합니다.

    --Create Tables statements only need to be executed once
    IF  NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[MS_SQLerrorlog]') AND type in (N'U'))
    BEGIN
    CREATE TABLE [dbo].[MS_SQLerrorlog](
        [LogDate] [datetime] NULL,
        [ProcessInfo] [varchar](10) NULL,
        [Text] [varchar](max) NULL
    ) ON [PRIMARY]
    END
    GO
    IF  NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[MS_SQLAgentlog]') AND type in (N'U'))
    BEGIN
    CREATE TABLE [dbo].[MS_SQLAgentlog](
        [LogDate] [datetime] NULL,
        [ProcessInfo] [varchar](10) NULL,
        [Text] [varchar](max) NULL
    ) ON [PRIMARY]
    END
    GO
    --Save current SQL Server Errorlog
    INSERT INTO MS_SQLerrorlog
          EXEC ('sp_readerrorlog')
    Go 
    Exec msdb.dbo.sp_cycle_errorlog
    Go
    --Save current SQL Agent log
    INSERT INTO MS_SQLAgentlog
        EXEC ('sp_readerrorlog -1, 2')
    Go
    Exec msdb.dbo.sp_cycle_agent_errorlog 
    Go

    2012년 7월 30일 월요일 오후 4:14
    중재자