Come posso acquisire e ricevere notifiche sugli eventi di errore nella mia istanza di RDS per SQL Server?
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?
Contenuto pertinente
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 2 anni fa