Como posso capturar e receber notificações sobre eventos de erro na minha instância do RDS para SQL Server?
Quero gerar e capturar eventos de erros em uma instância de banco de dados do Amazon Relational Database Service (Amazon RDS) para SQL Server. Também quero ser notificado sempre que um evento de erro ocorrer. Como posso fazer isso?
Descrição breve
O SQL Server usa tratamento de erros para resolver erros de existência de objetos e erros de tempo de execução em um código T-SQL. Para lidar com erros como esses, use os métodos TRY e CATCH. Em seguida, use o comando RAISERROR para gerar erros de clientes e gerar exceções.
Resolução
Use os métodos TRY e CATCH
1. Use uma instrução TRY e CATCH para definir um bloco de código para testes de erros. Qualquer código que você incluir entre BEGIN TRY e END TRY será monitorado quanto a erros no momento da execução. Sempre que um erro ocorrer no bloco, ele será transferido para a sessão CATCH. Então, a ação será executada em função do código existente no bloco CATCH. Dependendo do problema, é possível corrigir o erro, reportá-lo ou registrá-lo nos logs de erros do 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. Crie uma mensagem personalizada para gerar um erro do SQL Server quando ele ocorrer. Para fazer isso, adicione RAISERROR aos procedimentos do seu armazenamento ou a um SQL Server que deseja monitorar.
RAISERROR ( { msg_id | msg_str | @local_variable } { , severity, state } [ , argument [ , ...n ] ] ) [ WITH option [ , ...n ] ]
Exemplos dos métodos TRY e CATCH e RAISERROR Ao capturar erros usando os método TRY e CATCH, crie uma mensagem personalizada e, em seguida, transfira o erro para os logs de erros do SQL Server. Veja este exemplo:
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
Este é um exemplo de um erro gerado nos logs do SQL Server:
Error: 50000, Severity: 16, State: 1. Divide by zero error encountered.
Monitore os logs de erros do SQL Server e envie notificações
Para monitorar o trabalho do agente do SQL Server, adicione um script à etapa para monitorar e gerar o erro nos logs de erros do SQL Server. Em seguida, você poderá usar esses logs para enviar notificações.
1. Edite o trabalho do SQL Server e adicione a etapa. Para tipo, escolha T-SQL. Insira um nome de banco de dados e, em seguida, adicione esse T-SQL na seção de comando:
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. Configure o trabalho do SQL Server para ir até a etapa que criou para a seção Ação em caso de falha.
3. Execute este procedimento para confirmar se o trabalho do SQL Server foi executado corretamente e atualizou os detalhes da falha do trabalho nos logs de erros do SQL Server. Para obter mais informações, consulte Visualizar logs do agente ou erros.
EXEC rdsadmin.dbo.rds_read_error_log @index = 0, @type = 1;
Exemplo nos logs de erros:
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. Configure as notificações publicando os logs do SQL Server no Amazon CloudWatch. Modifique o SQL Server usando o console do Amazon RDS. Na seção de exportações de log, escolha os logs que deseja publicar nos logs do CloudWatch. Após publicar os logs do SQL Server no Amazon CloudWatch, é possível criar filtros de métricas para obter ajuda para pesquisar os logs. Os filtros de métricas definem os termos e padrões pelos quais o Amazon CloudWatch pesquisa os dados de log. Em seguida, os filtros de métricas transformam esses dados de log em métricas numéricas do CloudWatch para as quais é possível definir alarmes.
Conteúdo relevante
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 2 anos