Ongoing service disruptions
For the most recent update on ongoing service disruptions affecting the AWS Middle East (UAE) Region (ME-CENTRAL-1), refer to the AWS Health Dashboard. For information on AWS Service migration, see How do I migrate my services to another region?
Come posso generare e acquisire eventi di errore nella mia istanza Amazon RDS per SQL Server?
Desidero generare e acquisire eventi di errore nella mia istanza database Amazon Relational Database Service (Amazon RDS) per SQL Server. Desidero inoltre ricevere una notifica quando si verifica un evento di errore.
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 risolvere errori come questi, utilizza il costrutto TRY...CATCH. Quindi utilizza il comando RAISERROR per generare errori personalizzati e generare eccezioni. Per monitorare i log degli errori di SQL Server e ricevere notifiche quando si verificano, utilizza Amazon CloudWatch Logs.
Risoluzione
Utilizza il costrutto TRY...CATCH e l'istruzione RAISERROR
Completa i seguenti passaggi:
-
Utilizza SQL Server Management Studio (SSMS).
-
Utilizza il seguente costrutto TRY...CATCH per definire un blocco di codice per il test degli errori:
BEGIN TRY --code to try END TRY BEGIN CATCH --code to run if an error occurs --is generated in try END CATCHNota: statement_block monitora il codice compreso tra BEGIN TRY e END TRY per individuare eventuali errori in fase di esecuzione. Quando si verifica un errore nel blocco, l'errore viene trasferito alla sessione CATCH. Quindi, a seconda del codice nel blocco CATCH, l'istruzione esegue l'azione. A seconda del problema, puoi correggere l'errore, segnalarlo o registrarlo nei log degli errori di SQL Server.
-
Crea un messaggio personalizzato che generi un errore di SQL Server quando si verifica. Aggiungi la seguente istruzione RAISERROR alle procedure di archiviazione o a SQL Server in base a ciò che desideri monitorare:
RAISERROR ( { msg_id | msg_str | @local_variable } { , severity, state } [ , argument [ , ...n ] ] ) [ WITH option [ , ...n ] ]Esempio di costrutto TRY e CATCH e comando RAISERROR:
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 CATCHDi conseguenza, genera il seguente messaggio di errore nei log di SQL Server:
Error: 50000, Severity: 16, State: 1. Divide by zero error encountered.
Monitora i log degli errori di SQL Server e invia notifiche
Aggiungi uno script alla fase del processo per monitorare il processo dell'agente SQL Server e generare l'errore nei log degli errori di SQL Server. Quindi puoi utilizzare i log degli errori per inviare notifiche.
Per modificare il processo dell'agente SQL Server, completa i seguenti passaggi:
-
Accedi a SSMS.
-
Come tipo scegli T-SQL.
-
Inserisci un nome di database, quindi aggiungi il seguente T-SQL nella sezione command:
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 declare @errormsg nvarchar(4000) select @error = count(run_status) from @jb where run_status != 0 if @error > 0 begin set @errormsg='Automatic message from RDS for SQL Server Agent - Job: "' + @name + '" succeed' RAISERROR(@errormsg, -1,1) WITH LOG end else begin set @errormsg='Automatic message from RDS for SQL Server Agent - Job: "' + @name + '" failed' RAISERROR(@errormsg, 16,1) WITH LOG end -
Configura la fase precedente del processo per passare alle fasi successive On success (In caso di esito positivo) e On failure (In caso di esito negativo). Per ulteriori informazioni, consulta Impostare il flusso basato sul successo o fallimento del lavoro sul sito web Microsoft. Le fasi del processo On success e On failure eseguono il codice precedente per verificare se l'esecuzione ha avuto esito positivo o negativo. Il processo dell'agente genera quindi il messaggio nel log degli errori di SQL Server che indica se il processo ha avuto esito positivo o negativo.
-
Esegui questa procedura per verificare se il processo di SQL Server è stato eseguito correttamente e sono stati aggiornati i dettagli del processo non riuscito nei log degli errori di SQL Server:
EXEC rdsadmin.dbo.rds_read_error_log @index = 0, @type = 1;Per ulteriori informazioni, consulta Visualizzazione dei log dell'agente e degli errori.
Di seguito è riportato un esempio dei dettagli del processo aggiornati nei log degli errori:Automatic message from RDS for SQL Server Agent - Job: "jobtest-new" succeed Error: 50000, Severity: 16, State: 1. Automatic message from RDS for SQL Server Agent - Job: "jobtest-new" failed
Configura le notifiche in CloudWatch Logs
Per configurare le notifiche in CloudWatch, consulta Pubblicazione dei log di SQL Server su Amazon CloudWatch Logs.
Dopo aver pubblicato i log di SQL Server su CloudWatch Logs, puoi creare filtri metrici per semplificare la ricerca nei log. I filtri metrici trasformano i dati dei log in metriche di CloudWatch espresse in forma numerica per le quali puoi impostare allarmi. Per ulteriori informazioni, consulta Come posso ricevere notifiche SNS sugli eventi del log degli errori e dell'agente di Amazon RDS per SQL Server che corrispondono a uno schema di filtro di CloudWatch?
- Lingua
- Italiano
