Comment générer et capturer des événements d'erreur dans mon instance Amazon RDS for SQL Server ?
Je souhaite générer et capturer des événements d'erreur dans mon instance de base de données Amazon Relational Database Service (Amazon RDS) for SQL Server. Je souhaite également être averti lorsqu'un événement d'erreur se produit.
Brève description
SQL Server utilise la gestion des erreurs pour résoudre les erreurs d'existence d'objets et les erreurs d'exécution dans un code T-SQL. Pour résoudre de telles erreurs, utilisez la construction TRY...CATCH. Puis, utilisez la commande RAISERROR pour générer des erreurs personnalisées et lever des exceptions. Pour surveiller les journaux d'erreurs de SQL Server et recevoir des notifications les concernant, utilisez Amazon CloudWatch Logs.
Résolution
Utiliser la construction TRY... CATCH et l'instruction RAISERROR
Procédez comme suit :
-
Connectez-vous à SQL Server Management Studio (SSMS).
-
Utilisez la construction TRY...CATCH suivante pour définir un bloc de code destiné à tester les erreurs :
BEGIN TRY --code to try END TRY BEGIN CATCH --code to run if an error occurs --is generated in try END CATCH
Remarque : Le statement_block surveille le code que vous incluez entre BEGIN TRY et END TRY pour détecter les erreurs lors de l'exécution. Lorsqu'une erreur se produit dans le bloc, l'erreur est transférée vers la session CATCH. Puis, en fonction du code contenu dans le bloc CATCH, l'instruction exécute l'action. En fonction du problème, vous pouvez corriger l'erreur, signaler l'erreur ou journaliser l'erreur dans les journaux d'erreurs SQL Server.
-
Créez un message personnalisé qui génère une erreur SQL Server lorsqu'elle se produit. Ajoutez l'instruction RAISERROR suivante à vos procédures de stockage ou à SQL Server que vous souhaitez surveiller :
RAISERROR ( { msg_id | msg_str | @local_variable } { , severity, state } [ , argument [ , ...n ] ] ) [ WITH option [ , ...n ] ]
Exemple de construction TRY et CATCH et de commande 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 CATCH
Par conséquent, le message d'erreur suivant apparaît dans les journaux SQL Server :
Error: 50000, Severity: 16, State: 1. Divide by zero error encountered.
Surveiller les journaux d'erreurs SQL Server et envoyer des notifications
Ajoutez un script à l'étape de tâche pour surveiller la tâche d'agent SQL Server et signaler l'erreur dans les journaux d’erreurs SQL Server. Vous pouvez ensuite utiliser les journaux d'erreurs pour envoyer des notifications.
Pour modifier votre tâche d’agent SQL Server, procédez comme suit :
-
Connectez-vous à SSMS.
-
Dans Type, choisissez T-SQL.
-
Entrez un nom de base de données, puis ajoutez le code T-SQL suivant dans la section des commandes :
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
-
Configurez l'étape de tâche précédente pour passer aux étapes de tâche suivantes En cas de réussite et En cas d'échec. Pour plus d'informations, consultez la page Définir le flux de réussite ou d'échec des étapes de tâche sur le site Web de Microsoft. Les étapes de tâche En cas de réussite et En cas d’échec exécutent le code précédent pour vérifier s'il s'agit d'une exécution réussie ou non. La tâche d'agent affiche ensuite le message dans le journal d’erreurs SQL Server qui indique si la tâche est un succès ou un échec.
-
Exécutez la procédure suivante pour vérifier que la tâche SQL Server s'est correctement exécutée et mettez à jour les détails de la tâche ayant échoué dans les journaux d’erreurs SQL Server :
EXEC rdsadmin.dbo.rds_read_error_log @index = 0, @type = 1;
Pour plus d'informations, consultez la section Consultation des journaux d’erreurs et de l’agent.
Voici un exemple des détails de tâches mis à jour dans les journaux d'erreurs :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
Configurer les notifications dans CloudWatch Logs
Pour configurer les notifications dans CloudWatch, consultez la section Publication des journaux SQL Server sur Amazon CloudWatch Logs.
Après avoir publié les journaux SQL Server sur CloudWatch Logs, vous pouvez créer des filtres de métriques pour vous aider à effectuer des recherches dans les journaux. Les filtres de métriques transforment les données de journal en métriques CloudWatch numériques pour lesquelles vous pouvez définir des alarmes. Pour plus d’informations, consultez la section Comment puis-je recevoir des notifications SNS concernant les événements d’erreur et de journaux de l’agent Amazon RDS for SQL Server qui correspondent à un modèle de filtre CloudWatch ?
- Langue
- Français

Contenus pertinents
- demandé il y a 2 ans
- demandé il y a 2 ans
- demandé il y a 2 ans
- demandé il y a 8 mois
- AWS OFFICIELA mis à jour il y a un an