Come posso acquisire e ricevere notifiche sugli eventi di errore nella mia istanza di RDS per SQL Server?

5 minuti di lettura
0

Desidero generare e registrare eventi di errore sulla mia istanza database Amazon Relational Database Service (Amazon RDS) per SQL Server. Voglio anche essere avvisato ogni volta che si verifica un evento di errore. In che modo posso farlo?

Breve descrizione

SQL Server utilizza la gestione degli errori per risolvere gli errori di esistenza degli oggetti e gli errori di runtime in un codice T-SQL. Per gestire errori come questi, utilizza i metodi TRY e CATCH. Quindi, utilizza il comando RAISERROR per generare errori del cliente e generare eccezioni.

Risoluzione

Usa i metodi TRY e CATCH

1.    Utilizza un'istruzione TRY e CATCH per definire un blocco di codice per il test degli errori. Qualsiasi codice incluso tra BEGIN TRY e END TRY viene monitorato per individuare eventuali errori al momento dell'esecuzione. Ogni volta che si verifica un errore nel blocco, questo viene trasferito alla sessione CATCH. Quindi, a seconda del codice nel blocco CATCH, viene eseguita l'azione. A seconda del problema, puoi correggere l'errore, segnalarlo o registrare l'errore nei registri degli errori di 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.    Crea un messaggio personalizzato che generi un errore di SQL Server quando si verifica. Per fare ciò, aggiungi RAISERROR alle tue procedure di archiviazione o a un SQL Server che desideri monitorare.

RAISERROR ( { msg_id | msg_str | @local_variable }

                         { , severity, state }

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

                         [ WITH option [ , ...n ] ]

Esempi del metodo TRY CATCH e RAISERROR Quando rilevi errori utilizzando il metodo TRY CATCH, crei un messaggio personalizzato e quindi l'errore viene visualizzato nei registri degli errori di SQL Server. Guarda questo esempio:

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

Questo è un esempio di errore generato nei registri di SQL Server:

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

  Divide by zero error encountered.

Monitora i registri degli errori di SQL Server e invia notifiche

Per monitorare l'agentjob di SQL Server, aggiungi uno script alla fase per monitorare e generare l'errore nei registri degli errori di SQL Server. Puoi quindi possibile utilizzare questi registri per inviare notifiche.

1.    Modifica il tuo processo di SQL Server e aggiungi il passaggio. Per il tipo, scegli T-SQL. Inserisci un nome per il database, quindi aggiungi questo T-SQL nella sezione comandi:

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.    Configura il processo di SQL Server per passare al passaggio creato per la sezione In caso di errore.

3.    Esegui questa procedura per verificare che il processo di SQL Server sia stato eseguito correttamente e abbia aggiornato i dettagli del processo non riuscito nei registri degli errori di SQL Server. Per ulteriori informazioni, consulta Visualizzazione dei registri degli errori e degli agenti.

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

Esempio nei registri degli errori:

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.    Configura le notifiche pubblicando i registri di SQL Server su Amazon CloudWatch. Modifica SQL Server utilizzando la console Amazon RDS. Dalla sezione Esportazioni dei registri, scegli i registri che desideri pubblicare nei registri di CloudWatch. Dopo aver pubblicato i registri di SQL Server su Amazon CloudWatch, puoi creare filtri metrici per aiutarti a cercare nei registri. I filtri metrici definiscono i termini e i modelli che Amazon CloudWatch cerca nei dati di registro. Quindi, i filtri metrici trasformano questi dati di registro in parametri numerici di CloudWatch per i quali è possibile impostare allarmi.

Per ulteriori informazioni, consulta In che modo posso ricevere notifiche SNS sull'errore Amazon RDS per SQL Server e sui registri evento dell'agente che corrispondono a un modello di filtro CloudWatch?


AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa