Einführung
Bei all den Fortschritten bei SQL Server und Daten ist es großartig, dass solche nativen SQL-Tools wie Warnungen und Operatoren immer noch verfügbar sind. Dies sind die Schlüsselfunktionen des SQL Server-Agents, die sich auf alles in der SQL Server-Automatisierung beziehen.
Ihre Rollen sind klar:
- Alerts, sofern konfiguriert, informieren Datenbankadministratoren, wenn ein bestimmtes Ereignis aufgetreten ist.
- Ein Operator ist ein in SQL Server definiertes Objekt, das Personen oder Gruppen zuordnet, die Benachrichtigungen erhalten können, wenn diese Ereignisse eintreten.
Arten von Ereignissen
SQL Server zeichnet Ereignisse im Windows-Anwendungsprotokoll auf – wir können über die Windows-Ereignisanzeige auf Betriebssystemebene darauf zugreifen. Der SQL Server-Agent kann das Anwendungsprotokoll lesen und Warnungen auslösen, wenn es eine Übereinstimmung zwischen zwei Kategorien von Dingen gibt:1) im Anwendungsprotokoll aufgezeichnete Ereignisse 2) eine von einem Administrator definierte Warnung.
Es gibt drei Haupttypen von Ereignissen:
- SQL Server-Ereignisse
- SQL Server-Leistungsbedingungen
- WMI-Ereignisse
Erstellen eines SQL Server-Ereignisses
Wir beginnen mit der Erstellung einer SQL Server Agent-Warnung, indem wir im Objekt-Explorer unter SQL Server Agent mit der rechten Maustaste auf den Knoten Warnungen klicken. Dadurch wird das in Abb. 2 gezeigte Fenster geöffnet, in dem Sie den Namen der Warnung, ihren Typ (in diesem Fall SQL Server-Ereigniswarnung), den Datenbankbereich und die Warnungsbedingungen angeben.
Die einfachste Möglichkeit, eine Bedingung anzugeben, ist die Verwendung des Schweregrads. Und um eine vollständige Liste der Fehlermeldungen in SQL Server zu erhalten, müssen Sie sys.messages abfragen. Beachten Sie, dass diese Ansicht 309408 Zeilen enthält, daher ist die Verwendung eines Filters eine großartige Idee – deshalb habe ich in meiner Abfrage per Befehl nach Englisch gefiltert.
Abb. 1. Warnungsknoten
-- Listing 1:SQL Server-Fehlermeldungen verwenden Sie msdbgoSELECT * FROM sys.messages where language_id=1033sortiert nach Schweregrad;
Abb. 2. Erstellen einer SQL Server-Ereigniswarnung
Beachten Sie, dass ich auch eine bestimmte Fehlermeldung verwenden könnte, um eine Warnung auszulösen. Wie bereits erwähnt, werden alle Fehlermeldungen in der SQL Server-Katalogansicht sys.messages aufgelistet. Auf dem Bildschirm von Abb. 2 habe ich lediglich die Ereignisbedingungen ausgewählt – auf der Antwortseite konnte ich auswählen, was passiert, wenn dieses Ereignis erfasst wird. Wie Sie sehen, kann ich meine Antwort entweder automatisieren, indem ich einen Job ausführe, oder einfach die Bediener benachrichtigen. Wir werden uns später mit der Ausführung eines Jobs befassen, aber lassen Sie uns zunächst beobachten, warum ein Operator erforderlich ist, um mit der alternativen Option fortzufahren. Wir werden einen Operator im selben Fenster erstellen, aber wenn wir vorhandene Operatoren hätten, hätten wir sie einfach aus der Liste auswählen können.
Abb. 3. Antwort auswählen
Abb. 4. Definieren eines Operators
Abb. 5. Auswählen des Alarmkanals
In Abb. 5 wählen wir E-Mail als Medium zum Senden von Benachrichtigungen. Sie sollten Datenbank-E-Mail korrekt konfigurieren, andernfalls verbleiben die generierten Warnungen in der Warteschlange. Auf der dritten Seite des New Alert-Fensters können wir auswählen, ob die Fehlermeldung in der E-Mail-Benachrichtigung enthalten ist und ob wir eine zusätzliche Nachricht senden möchten (z. B. die Anweisungen an einen Junior DBA über weitere Aktionen). Wir bestimmen auch das Intervall zwischen den ausgelösten Warnungen. Dies ist wichtig, denn wenn Sie den Standardwert (0) beibehalten, wird die Mailbox des Operators in kurzer Zeit voller Benachrichtigungen sein.
Abb. 6. Optionen konfigurieren
-- Listing 2:Erstellen einer SQL Server-Warnung mit sp_add_alertUSE [msdb]GOEXEC msdb.dbo.sp_add_alert @name=N'Alert_Insufficient_Resources_017',@message_id=0,@severity=17,@enabled=1,@delay_between_responses=900,@include_event_description_in=1,@job_id=N'00000000-0000-0000-0000-000000000000'GOEXEC msdb.dbo.sp_add_notification @alert_name=N'Alert_Insufficient_Resources_017', @operator_name=N'DatabaseAdmin', @notification_method =1GOListing 2 zeigt den äquivalenten Code zur Implementierung dieser Warnung. Nachdem wir den Vorgang abgeschlossen haben, indem wir auf OK geklickt haben, können wir sowohl die Warnung als auch den Operator im SQL Server Agent-Knoten im Objekt-Explorer anzeigen.
Abb. 7. Alarm erstellt
Erstellen einer SQL Server-Leistungsbedingungswarnung
Wir können auch den alternativen Weg gehen und eine Leistungsbedingungswarnung erstellen. Als Beispiel wählen wir Databases> Percent Log Used Counter. Wir weisen SQL Server an, ein Ereignis zu generieren, wenn die Nutzung der Protokolldatei 75 % überschreitet. In diesem Fall wählen wir als Antwort „Einen Job ausführen“. Listing 3 zeigt die wichtigsten Aufgaben, die von diesem Job erledigt werden, und Listing 4 zeigt die vollständige Definition des Jobs.
Abb. 8. Performance Condition Alert
-- Listing 3:SQL Server FehlermeldungenBACKUP LOG [DB1] TO DISK =N'E:\MSSQL\Backup\DBTransactionLog.bak'WITH RETAINDAYS =90, NOFORMAT, NOINIT, NAME =N'DB1-TransactionLog Backup' ,SKIP, NOREWIND, NOUNLOAD, STATS =10GOUSE [DB1]GODBCC SHRINKFILE (N'DB1_log' , 0, TRUNCATEONLY)GO-- Listing 4:Vollständige Definition des SQL Agent-SicherungsjobsUSE [msdb]GO/****** Objekt :Job [DB1_BackupTransactionLog] Skriptdatum:27.11.2019 19:20:22 Uhr ******/BEGIN TRANSACTIONDECLARE @ReturnCode INTSELECT @ReturnCode =0/****** Objekt:JobCategory [[Uncategorized (Local )]] Skriptdatum:27.11.2019 19:20:23 Uhr ******/WENN NICHT VORHANDEN (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class =1)BEGINEXEC @ReturnCode =msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Nicht kategorisiert (lokal)]'IF (@@ERROR <> 0 OR @ ReturnCode <> 0) GOTO QuitWithRollbackENDDECLARE @jobId BINARY(16)EXEC @ReturnCode =msdb.dbo.sp_add_job @job_name=N'DB1_BackupTransactionLog',@enabled=1, @notify_level_eventlog=0,@notify_level_email=3,@notify_level_netsend=0,@notify_level_page=0,@delete_level=0,@description=N'Transaktionsprotokoll für DB1 sichern, wenn die Transaktionsprotokollnutzung 75 % überschreitet',@category_name=N' [Uncategorized (Local)]',@owner_login_name=N'DESKTOP-CT8K40N\kenne',@notify_email_operator_name=N'DatabaseAdmin', @job_id =@jobId OUTPUTIF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback /****** Object:Step [Backup_Transaction_Log] Script Date:27/11/2019 7:20:23 PM ******/EXEC @ReturnCode =msdb.dbo.sp_add_jobstep @[email protected], @step_name=N'Backup_Transaction_Log',@step_id=1,@cmdexec_success_code=0,@on_success_action=3,@on_success_step_id=0,@on_fail_action=2,@on_fail_step_id=0,@retry_attempts=2,@retry_interval=15,@os_run_priority =0, @subsystem=N'TSQL',@command=N'-- Listing 3:SQL Server FehlermeldungenBACKUP LOG [DB1] TO DISK =N''E:\MSSQL\Backup\DBTransactionLog.bak''WITH RETAINDAYS =90, NOFORMAT, NOINIT, NAME =N''DB1-TransactionLog Backup'',SKIP, NOREWIN D, NOUNLOAD, STATS =10GO',@database_name=N'master',@flags=0IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback/****** Objekt:Schritt [DB1_Shrink_Transaction_Log_File] Skriptdatum:27.11.2019 19:20:23 Uhr ******/EXEC @ReturnCode =msdb.dbo.sp_add_jobstep @[email protected], @step_name=N'DB1_Shrink_Transaction_Log_File',@step_id=2, @cmdexec_success_code=0,@on_success_action=1,@on_success_step_id=0,@on_fail_action=2,@on_fail_step_id=0,@retry_attempts=2,@retry_interval=15,@os_run_priority=0, @subsystem=N'TSQL',@command =N'USE [DB1]GODBCC SHRINKFILE (N''DB1_log'' , 0, TRUNCATEONLY)GO',@database_name=N'master',@flags=0IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollbackEXEC @ReturnCode =msdb.dbo.sp_update_job @job_id =@jobId, @start_step_id =1IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollbackEXEC @ReturnCode =msdb.dbo.sp_add_jobserver @job_id =@jobId, @server_name =N'(local)'IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollbackCOMMIT TRANSACTIONGOTO EndSaveQui tWithRollback:IF (@@TRANCOUNT> 0) ROLLBACK TRANSACTIONEndSave:GO
Abb. 9. Job zum Ausführen erstellen
Da unsere Antwort in diesem Fall die Jobausführung ist, fügen wir auch eine Benachrichtigung in den Job selbst ein. Sobald wir mit der Joberstellung fertig sind, können wir die Alarmeigenschaften im Objekt-Explorer überprüfen. Wir können auf der Verlaufsseite überprüfen, wie oft das Ereignis aufgetreten ist.
Abb. 10. Optionen für Warnungen
Abb. 11. Seite "Alarmverlauf"
Schlussfolgerung
In diesem Artikel haben wir die Erstellung von Warnungen und Operatoren untersucht. Sie können diese leistungsstarke Funktion in SQL Server nutzen und Ihre Umgebung für die Überwachung grundlegender Ereignisse einrichten, ohne ein Drittanbietertool kaufen zu müssen. Die Möglichkeit, Jobs zur Behebung kleinerer Probleme einzusetzen, hilft uns bei der proaktiven Verwaltung unserer SQL-Server-Umgebung.