RDS for SQL Server 인스턴스의 오류 이벤트에 대한 알림을 캡처하고 받으려면 어떻게 해야 합니까?

4분 분량
0

SQL Server DB 인스턴스용 Amazon Relational Database Service(RDS)에서 오류 이벤트를 발생시키고 캡처하려고 합니다. 또한 오류 이벤트가 발생할 때마다 알림을 받고 싶습니다. 어떻게 해야 합니까?

간략한 설명

SQL Server는 오류 처리를 사용하여 T-SQL 코드의 개체 존재 오류 및 런타임 오류를 해결합니다. 이러한 오류를 처리하려면 TRY 및 CATCH 메서드를 사용합니다. 그런 다음 RAISERROR 명령을 사용하여 고객 오류를 생성하고 예외를 발생시킵니다.

해결 방법

TRY 및 CATCH 메서드 사용

1.    TRY 및 CATCH 문을 사용하여 오류 테스트를 위한 코드 블록을 정의합니다. BEGIN TRY와 END TRY 사이의 모든 코드는 실행 시 오류가 있는지 모니터링됩니다. 블록에서 오류가 발생할 때마다 CATCH 세션으로 전송됩니다. 그런 다음 CATCH 블록의 코드에 따라 작업이 수행됩니다. 문제에 따라 오류를 수정하거나, 오류를 보고하거나, SQL Server 오류 로그에 오류를 기록할 수 있습니다.

BEGIN TRY
                            --code to try
                  END TRY
                  BEGIN CATCH
                                --code to run if an error occurs
                                --is generated in try
                  END CATCH

2.    SQL Server 오류 발생 시 오류를 발생시키는 사용자 지정 메시지를 생성합니다. 이렇게 하려면 모니터링하려는 스토어 프로시저 또는 SQL Server에 RAISERROR를 추가합니다.

RAISERROR ( { msg_id | msg_str | @local_variable }

                         { , severity, state }

                         [ , argument [ , ...n ] ] )

                         [ WITH option [ , ...n ] ]

TRY CATCH 메서드 및 RAISERROR의 예 TRY CATCH 메서드를 사용하여 오류를 캡처하는 경우 사용자 지정 메시지를 생성한 다음 해당 오류를 SQL Server 오류 로그에 발생시킵니다. 다음 예를 참조하세요.

BEGIN TRY

SELECT 1/0

END TRY

BEGIN CATCH

DECLARE @Var VARCHAR(100)

SELECT ERROR_MESSAGE()

SELECT @Var = ERROR_MESSAGE()

RAISERROR(@Var, 16,1) WITH LOG

END CATCH

다음은 SQL Server 로그에서 발생한 오류의 예입니다.

Error: 50000, Severity: 16, State: 1.

  Divide by zero error encountered.

SQL Server 오류 로그를 모니터링하고 알림을 보냅니다.

SQL Server 에이전트 작업을 모니터링하려면 모니터링 단계에 스크립트를 추가하고 SQL Server 오류 로그에서 오류를 발생시킵니다. 그런 다음 이러한 로그를 사용하여 알림을 보낼 수 있습니다.

1.    SQL Server 작업을 편집하고 단계를 추가합니다. 유형에서 T-SQL를 선택합니다. 데이터베이스 이름을 입력한 다음 명령 섹션에 다음 T-SQL을 추가합니다.

DECLARE @name NVARCHAR(128)

select @name =  name from msdb.dbo.sysjobs where job_id = $(ESCAPE_SQUOTE(JOBID));



-- Temporary table to store the data of the datafile with low free storage

DECLARE @jb TABLE ([step_id] int, [step_name] NVARCHAR(128), [message] NVARCHAR(4000), [run_status] int);



insert into @jb

select hist.step_id, hist.step_name, hist.message, hist.run_status

  from msdb.dbo.sysjobhistory hist inner join

       (select a.job_id

               , convert(varchar(50),max(a.run_requested_date),112) as run_date

                     , replace(convert(varchar(50),max(a.run_requested_date),108), ':', '') as run_time

          from msdb.dbo.sysjobs j inner join msdb.dbo.sysjobactivity a

               on j.job_id = a.job_id

           where j.name = @name

               and a.run_requested_date is not null

         group by a.job_id) ja

        on hist.job_id = ja.job_id

       and hist.run_date = ja.run_date

       and hist.run_time >= ja.run_time

 order by hist.step_id

declare @error int

select @error = count(run_status) from @jb where run_status != 0

if @error > 0

RAISERROR('Automatic message from RDS for SQL Server Agent. Job test2 successful', 18,1) WITH LOG  --\will raise the error when job successful

else

RAISERROR('Automatic message from RDS for SQL Server Agent. Job test2 failed', 16,1) WITH LOG  --\will raise the error when job failed

2.    오류 발생 시 작업 섹션에 대해 생성한 단계로 이동하도록 SQL Server 작업을 구성합니다.

3.    이 절차를 실행하여 SQL Server 작업이 올바르게 실행되었는지 확인하고 SQL Server 오류 로그에서 작업 실패 세부 정보가 업데이트되었는지 확인합니다. 자세한 내용은 오류 및 에이전트 로그 보기를 참조하세요.

EXEC rdsadmin.dbo.rds_read_error_log @index = 0, @type = 1;

오류 로그 예:

Msg 50000, Level 18, State 1, Line 33
Automatic message from RDS for SQL Server Agent. Job test2 failed
Msg 50000, Level 18, State 1, Line 29
Automatic message from RDS for SQL Server Agent. Job test2 successful

3.    SQL Server 로그를 Amazon CloudWatch에 게시하여 알림을 구성합니다. Amazon RDS 콘솔을 사용하여 SQL 서버를 수정합니다. [로그 내보내기(Log exports)] 섹션에서 CloudWatch 로그에 게시할 로그를 선택합니다. SQL Server 로그를 Amazon CloudWatch에 게시한 후 로그 검색에 도움이 되는 지표 필터를 생성할 수 있습니다. 지표 필터는 Amazon CloudWatch에서 로그 데이터를 검색하는 용어와 패턴을 정의합니다. 그런 다음, 지표 필터는 경보를 설정할 수 있는 숫자 CloudWatch 지표로 로그 데이터를 변환합니다.

자세한 내용은 CloudWatch 필터 패턴과 일치하는 Amazon RDS for SQL Server 오류 및 에이전트 로그 이벤트에 대한 SNS 알림을 수신하려면 어떻게 해야 합니까?를 참조하세요.