Wie kann ich Benachrichtigungen über Fehlerereignisse in meiner RDS-for-SQL-Server-Instance erfassen und empfangen?
Ich möchte Fehlerereignisse auf meiner Instance von Amazon Relational Database Service (Amazon RDS) for SQL-Server-DB auslösen und erfassen. Ich möchte auch benachrichtigt werden, wenn ein Fehlerereignis auftritt. Wie kann ich vorgehen?
Kurzbeschreibung
SQL Server verwendet Fehlerbehandlung, um Objektexistenz- und Laufzeitfehler in einem T-SQL-Code aufzulösen. Um solche Fehler zu behandeln, verwenden Sie die TRY- und CATCH-Methode. Verwenden Sie dann den Befehl RAISERROR, um Kundenfehler zu generieren und Ausnahmen auszulösen.
Auflösung
TRY- und CATCH-Methode verwenden
1. Verwenden Sie eine TRY- und CATCH-Anweisung, um einen Codeblock für Fehlertests zu definieren. Jeglicher Code, den Sie zwischen BEGIN TRY und END TRY einfügen, wird zum Zeitpunkt der Ausführung auf Fehler überwacht. Immer wenn ein Fehler im Block auftritt, wird er an die CATCH-Sitzung übertragen. Dann wird abhängig vom Code im CATCH-Block die Aktion ausgeführt. Je nach Problem können Sie den Fehler beheben, den Fehler melden oder den Fehler in den SQL-Server-Fehlerprotokollen protokollieren.
BEGIN TRY --code to try END TRY BEGIN CATCH --code to run if an error occurs --is generated in try END CATCH
2. Erstellen Sie eine benutzerdefinierte Meldung, die einen SQL-Server-Fehler auslöst, wenn dieser auftritt. Fügen Sie dazu RAISERROR zu Ihren Speicherverfahren oder zu einem SQL-Server hinzu, den Sie überwachen möchten.
RAISERROR ( { msg_id | msg_str | @local_variable } { , severity, state } [ , argument [ , ...n ] ] ) [ WITH option [ , ...n ] ]
Beispiele für die TRY CATCH-Methode und RAISERROR Wenn Sie Fehler mit der TRY CATCH-Methode erfassen, erstellen Sie eine benutzerdefinierte Meldung und lösen den Fehler dann in den SQL-Server-Fehlerprotokollen aus. Werfen Sie einen Blick auf folgendes Beispiel:
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
Dies ist ein Beispiel für einen Fehler, der in den SQL-Server-Protokollen ausgelöst wurde:
Error: 50000, Severity: 16, State: 1. Divide by zero error encountered.
SQL Server-Fehlerprotokolle überwachen und Benachrichtigungen senden
Um den SQL-Server-agentjob zu überwachen, fügen Sie dem zu überwachenden Schritt ein Skript hinzu und lösen Sie den Fehler in den SQL-Server-Fehlerprotokollen aus. Sie können diese Protokolle dann verwenden, um Benachrichtigungen zu senden.
1. Bearbeiten Sie Ihren SQL-Server-Job, und fügen Sie den Schritt hinzu. Wählen Sie als Typ T-SQL. Geben Sie einen Datenbanknamen ein und fügen Sie dann diesen T-SQL im Befehlsabschnitt hinzu:
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. Konfigurieren Sie den SQL-Server-Job so, dass er zu dem Schritt wechselt, den Sie für den Abschnitt On failure action (Aktion bei einem Fehler) erstellt haben.
3. Führen Sie dieses Verfahren aus, um zu bestätigen, dass der SQL-Server-Job ordnungsgemäß ausgeführt wurde und die Details zum fehlgeschlagenen Job in den SQL-Server-Fehlerprotokollen aktualisiert hat. Weitere Informationen finden Sie unter Anzeigen von Fehlern und Agentenprotokollen.
EXEC rdsadmin.dbo.rds_read_error_log @index = 0, @type = 1;
Beispiel in den Fehlerprotokollen:
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. Konfigurieren Sie Benachrichtigungen, indem Sie die SQL-Server-Protokolle auf Amazon CloudWatch veröffentlichen. Ändern Sie den SQL-Server mithilfe der Amazon-RDS-Konsole. Wählen Sie im Abschnitt „Log exports“ (Protokollexporte) die Protokolle aus, die Sie in den CloudWatch-Protokollen veröffentlichen möchten. Nachdem Sie die SQL-Server-Protokolle in Amazon CloudWatch veröffentlicht haben, können Sie Metrikfilter erstellen, die Sie beim Durchsuchen der Protokolle unterstützen. Metrikfilter definieren die Begriffe und Muster, nach denen Amazon CloudWatch die Protokolldaten durchsucht. Anschließend wandeln die Metrikfilter diese Protokolldaten in numerische CloudWatch-Metriken um, für die Sie Alarme einrichten können.
Weitere Informationen erhalten Sie unter Wie erhalte ich SNS-Benachrichtigungen zu Fehlern und Agent-Protokollereignissen in Amazon RDS for SQL Server, die einem Filtermuster in CloudWatch entsprechen?
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor einem Jahr