Freigeben über


SQL Server-Agent

Gilt für: SQL Server Azure SQL Managed Instance

Dieser Artikel bietet eine Übersicht über den SQL Server-Agent. Dabei handelt es sich um einen Microsoft Windows-Dienst, der geplante administrative Aufgaben (sogenannte Aufträge) in SQL Server und Azure SQL Managed Instance ausführt.

Wichtig

In Azure SQL Managed Instance werden derzeit die meisten, aber nicht alle, SQL Server-Agent-Features unterstützt. Details dazu finden Sie unter T-SQL-Unterschiede zwischen Azure SQL Managed Instance und SQL Server.

Vorteile des SQL Server-Agents

Der SQL Server-Agent verwendet SQL Server, um Auftragsinformationen zu speichern. Aufträge enthalten mindestens einen Auftragsschritt. Jeder Schritt umfasst einen eigenen Task, z.B. das Sichern einer Datenbank.

Der SQL Server-Agent kann einen Auftrag anhand eines Zeitplans, als Reaktion auf ein bestimmtes Ereignis oder bei Bedarf ausführen. Wenn Sie z.B. am Ende jedes Arbeitstages alle Server des Unternehmens sichern möchten, können Sie diesen Task automatisieren. Planen Sie die Ausführung der Sicherung von Montag bis Freitag nach 22:00 Uhr. Wenn während der Sicherung ein Problem auftritt, kann der SQL Server-Agent das Ereignis aufzeichnen und Sie benachrichtigen.

Hinweis

Der SQL Server-Agent-Dienst ist standardmäßig deaktiviert, wenn SQL Server installiert ist, sofern der Benutzer nicht explizit festgelegt hat, dass der Dienst automatisch gestartet werden soll.

SQL Server Agent Components

Der SQL Server-Agent verwendet die folgenden Komponenten, um die auszuführenden Aufgaben, den Zeitpunkt der Ausführung und die Meldung erfolgreicher bzw. fehlgeschlagener Aufgaben zu definieren.

Nutzen Sie den SQL Server-Konfigurations-Manager zur Verwaltung des SQL Server-Agent-Dienstes und SQL Server Management Studio (SSMS) zur mühelosen Verwaltung der SQL Server-Agent-Eigenschaften, -Aufträge, -Warnungen, -Operatoren und -Proxys in einer grafischen Benutzeroberfläche.

Aufträge

Ein Auftrag ist eine festgelegte Reihe von Aktionen, die der SQL Server-Agent ausführt. Verwenden Sie Aufträge, um eine Verwaltungsaufgabe zu definieren, die einmalig oder mehrmals ausgeführt und deren Erfolgsstatus überwacht werden kann. Ein Auftrag kann auf einem einzelnen lokalen Server oder auf mehreren Remoteservern ausgeführt werden.

Wichtig

Aufträge des SQL Server-Agents, die zum Zeitpunkt eines Failoverereignisses auf einer SQL Server-Failoverclusterinstanz ausgeführt werden, werden nach dem Failover nicht auf einem anderen Failoverclusterknoten fortgesetzt. Aufträge des SQL Server-Agents, die ausgeführt werden, wenn ein Hyper-V-Knoten angehalten wird, werden nicht fortgesetzt, wenn die Pause ein Failover zu einem anderen Knoten verursacht. Aufträge, die begonnen, aber wegen eines Failoverereignisses nicht abgeschlossen werden, werden als gestartet protokolliert, jedoch werden keine weiteren Protokolleinträge für Abschluss oder Fehler erstellt. Unter diesen Umständen werden die betreffenden Aufträge des SQL Server-Agents scheinbar nie beendet.

Für die Ausführung von Aufträgen gibt es mehrere Möglichkeiten:

  • Ausführung nach einem oder mehreren Zeitplänen.

  • Ausführung als Reaktion auf eine oder mehrere Warnungen.

  • Ausführung der gespeicherten Prozedur sp_start_job.

Die einzelnen Aktionen im Rahmen eines Auftrags werden als Auftragsschritte bezeichnet. Ein Auftragsschritt kann z. B. darin bestehen, eine Transact-SQL-Anweisung auszuführen, ein SSIS-Paket auszuführen oder einen Befehl an einen Analysis Services-Server zu senden. Auftragsschritte werden als Teil des Auftrags verwaltet.

Jeder Auftragsschritt wird in einem bestimmten Sicherheitskontext ausgeführt. Bei Auftragsschritten, die Transact-SQL verwenden, nutzen Sie zum Festlegen des Sicherheitskontexts für den Auftragsschritt die EXECUTE AS-Anweisung. Bei anderen Arten von Auftragsschritten verwenden Sie ein Proxykonto, um den Sicherheitskontext für den Auftragsschritt festzulegen.

Mit der gespeicherten Systemprozedur sp_help_job können Sie nach Informationen zu einem bestimmten Auftrag suchen. Mit der Systemtabelle dbo.sysjobs können Sie Informationen zu Aufträgen anzeigen. Nutzen Sie beispielsweise die folgende T-SQL-Anweisung (Transact-SQL), um Informationen zu allen Aufträgen auf einem Server anzuzeigen:

USE MSDB
GO
SELECT job_id, [name] FROM dbo.sysjobs;

Zeitpläne

Durch einen Zeitplan wird angegeben, wann ein Auftrag ausgeführt wird. Mehrere Aufträge können auf dem gleichen Zeitplan basieren, und für einen Auftrag können mehrere Zeitpläne gelten. Ein Zeitplan kann folgende Bedingungen für die Ausführungszeit eines Auftrags definieren:

  • Bei jedem Start des SQL Server-Agents.

  • Ausführung, wenn sich die CPU-Auslastung des Computers in einem Bereich befindet, den Sie als Leerlauf definiert haben.

  • Einmalige Ausführung zu einem bestimmten Zeitpunkt.

  • Auf der Grundlage einer Zeitplanserie.

Weitere Informationen finden Sie unter Anlegen und Zuweisen von Zeitplänen zu Aufträgen.

Alerts

Eine Warnung ist eine automatische Reaktion auf ein bestimmtes Ereignis. Bei einem Ereignis kann es sich z.B. um das Starten eines Auftrags oder das Erreichen eines bestimmten Schwellenwerts bei den Systemressourcen handeln. Sie definieren die Bedingungen, unter denen eine Warnung auftritt.

Eine Warnung kann als Reaktion auf eine der folgenden Bedingungen ausgegeben werden:

  • SQL Server-Ereignisse

  • SQL-Leistungsbedingungen

  • Ereignisse in der Microsoft Windows-Verwaltungsinstrumentation (WMI) auf dem Computer, auf dem der SQL Server-Agent ausgeführt wird

Eine Warnung kann die folgenden Aktionen ausführen:

  • Benachrichtigen eines oder mehrerer Operatoren

  • Ausführen eines Auftrags

Weitere Informationen finden Sie unter Warnungen.

Operatoren

Ein Operator definiert die Kontaktinformationen einer Person, die für die Verwaltung einer oder mehrerer SQL Server-Instanzen zuständig ist. In einigen Unternehmen werden die Aufgaben eines Operators einer einzelnen Person zugewiesen. In größeren Unternehmen mit mehreren Servern teilen sich mehrere Personen die Aufgaben des Operators. Ein Bediener verfügt über keine Sicherheitsinformationen und definiert keinen Sicherheitsprinzipal.

SQL Server kann Operatoren über folgende Methoden zu Warnungen benachrichtigen:

  • E-Mail

  • Pager (per E-Mail)

  • net send

Hinweis

Der Windows Messenger-Dienst muss auf dem Computer mit dem SQL Server-Agent gestartet worden sein, um Benachrichtigungen mit net send zu senden.

Wichtig

Der Pager und net send werden aus dem SQL Server-Agent in einer zukünftigen Version von SQL Server entfernt. Nutzen Sie diese Funktionen bei Neuentwicklungen nicht mehr, und planen Sie die Änderung von Anwendungen, die diese Funktionen zurzeit verwenden.

Sie müssen den SQL Server-Agent so konfigurieren, dass Datenbank-E-Mail verwendet wird, um Operatoren Benachrichtigungen per E-Mail oder Pager zu senden. Weitere Informationen finden Sie unter Datenbank-E-Mail.

Ein Operator kann auch als Alias für eine Gruppe von Personen definiert werden. In diesem Fall werden alle Mitglieder dieses Alias nicht zur selben Zeit überprüft. Weitere Informationen finden Sie unter Operatoren.

Sicherheit für die Administration mit dem SQL Server-Agent

Der SQL Server-Agent steuert mithilfe der festen Datenbankrollen SQLAgentUserRole, SQLAgentReaderRole und SQLAgentOperatorRole in der Datenbank msdb den Zugriff auf den SQL Server-Agent für Benutzer*innen, die keine Mitglieder der festen Serverrolle sysadmin sind. Neben diesen festen Datenbankrollen können Datenbankadministratoren mithilfe von Subsystemen und Proxys sicherstellen, dass jeder Auftragsschritt mit den mindestens erforderlichen Berechtigungen ausgeführt wird.

Rollen

Mitglieder der festen Datenbankrollen SQLAgentUserRole, SQLAgentReaderRole und SQLAgentOperatorRole in msdb und Mitglieder der festen Serverrolle sysadmin haben Zugriff auf den SQL Server-Agent. Ein Benutzer, der keiner dieser Rollen angehört, kann den SQL Server-Agent nicht verwenden. Weitere Informationen zu den Rollen, die vom SQL Server-Agent verwendet werden, finden Sie unter Implementieren der SQL Server-Agent-Sicherheit.

Subsysteme

Ein Subsystem ist ein vordefiniertes Objekt, das die für einen Auftragsschritt verfügbare Funktionalität darstellt. Jeder Proxy hat Zugriff auf mindestens ein Subsystem. Subsysteme bieten Sicherheit, weil sie den Zugriff auf die für ein Proxykonto verfügbare Funktionalität begrenzen. Jeder Auftragsschritt wird im Kontext eines Proxys ausgeführt. Ausgenommen sind lediglich Transact-SQL-Auftragsschritte. Bei Transact-SQL-Auftragsschritten wird der Sicherheitskontext mithilfe des EXECUTE AS-Befehls auf den Besitzer des Auftrags festgelegt.

SQL Server definiert die in der folgenden Tabelle aufgeführten Subsysteme:

Name des Subsystems BESCHREIBUNG
Microsoft ActiveX-Skript Ausführen eines ActiveX-Skriptauftragsschritts.

Warnung: Das Subsystem ActiveX-Skript wird in einer zukünftigen Version von Microsoft SQL Server aus dem SQL Server-Agent entfernt. Nutzen Sie diese Funktionen bei Neuentwicklungen nicht mehr, und planen Sie die Änderung von Anwendungen, die diese Funktion zurzeit verwenden.
Betriebssystem (CmdExec) Ausführen eines ausführbaren Programms.
PowerShell Ausführen eines PowerShell-Skripterstellungs-Auftragsschritts.
Replikationsverteiler Ausführen eines Auftragsschritts, der den Replikationsverteilungs-Agent aktiviert.
Replikationsmerge Ausführen eines Auftragsschritts, der den Replikationsmerge-Agent aktiviert.
Replikation-Warteschlangenleser Ausführen eines Auftragsschritts, der den Warteschlangenleser-Agent der Microsoft SQL Server-Replikation aktiviert.
Replikationsmomentaufnahme Ausführen eines Auftragsschritts, der den Replikationsmomentaufnahme-Agent aktiviert.
Replikationstransaktionsprotokoll-Leser Ausführen eines Auftragsschritts, der den Protokolllese-Agent aktiviert.
Analysis Services-Befehl Führen Sie einen Analysis Services-Befehl aus.
Analysis Services-Abfrage Führen Sie eine Analysis Services-Abfrage aus.
SSIS-Paketausführung Führen Sie ein SSIS-Paket aus.

Hinweis

Da Transact-SQL-Auftragsschritte keine Proxys verwenden, ist kein SQL Server-Agent-Subsystem für Transact-SQL-Auftragsschritte verfügbar.

Der SQL Server-Agent erzwingt Subsystemeinschränkungen auch dann, wenn der Sicherheitsprinzipal für den Proxy normalerweise über die Berechtigung zum Ausführen des Tasks im Auftragsschritt verfügen würde. Beispielsweise kann ein Proxykonto für einen Benutzer, der Mitglied der festen Serverrolle „sysadmin“ ist, nur einen SSIS-Auftragsschritt ausführen, wenn das Proxykonto Zugriff auf das SSIS-Subsystem hat. Der Benutzer kann jedoch SSIS-Pakete ausführen.

Proxys

Der SQL Server-Agent verwendet Proxys zum Verwalten von Sicherheitskontexten. Ein Proxy kann für mehrere Auftragsschritte verwendet werden. Mitglieder der festen Serverrolle sysadmin können Proxys erstellen.

Jeder Proxy entspricht einem Satz Sicherheitsanmeldeinformationen. Jeder Proxy kann einer Gruppe von Subsystemen und Anmeldenamen zugeordnet werden. Der Proxy kann nur für Auftragsschritte benutzt werden, die ein dem Proxy zugeordnetes Subsystem verwenden. Der Auftragsbesitzer muss einen Anmeldenamen verwenden, der diesem Proxy zugeordnet ist, oder ein Mitglied einer Rolle mit unbeschränktem Zugriff auf Proxys sein um einen Auftragsschritt zu erstellen, der einen bestimmten Proxy verwendet. Mitglieder der festen Serverrolle sysadmin haben unbeschränkten Zugriff auf Proxys. Mitglieder von SQLAgentUserRole, SQLAgentReaderRole oder SQLAgentOperatorRole können nur Proxys verwenden, für die Ihnen der Zugriff erteilt wurde. Jedem Benutzer, der Mitglied einer dieser festen Datenbankrollen des SQL Server-Agents ist, muss Zugriff auf bestimmte Proxys gewährt werden, damit er Auftragsschritte erstellen kann, bei denen diese Proxys verwendet werden.

Automatisieren der Administration

Führen Sie die folgenden Schritte aus, um den SQL Server-Agent so zu konfigurieren, dass die SQL Server-Administration automatisiert wird:

  1. Überprüfen Sie, welche administrativen Tasks oder Serverereignisse regelmäßig auftreten und ob diese Tasks oder Ereignisse programmgesteuert verwaltet werden können. Ein Task eignet sich für die Automatisierung, wenn er eine festgelegte Reihenfolge von Schritten umfasst und zu einem bestimmten Zeitpunkt oder als Reaktion auf ein bestimmtes Ereignis auftreten soll.

  2. Definieren Sie mehrere Aufträge, Zeitpläne, Warnungen sowie Operatoren, indem Sie SQL Server Management Studio, Transact-SQL-Skripts oder SQL Server Management Objects (SMO) verwenden. Weitere Informationen finden Sie unter Erstellen von Aufträgen.

  3. Führen Sie die SQL Server-Agent-Aufträge aus, die Sie definiert haben.

Hinweis

Für die Standardinstanz von SQL Server ist für den SQL Server-Dienst der Name SQLSERVERAGENT festgelegt. Für benannte Instanzen erhält der SQL Server-Agent-Dienst den Namen SQLAgent$instancename.

Falls Sie mehrere Instanzen von SQL Server ausführen, können Sie Tasks, die auf allen Instanzen ausgeführt werden müssen, mithilfe der Multiserververwaltung automatisieren. Weitere Informationen finden Sie unter Automatisierte Verwaltung in einem Unternehmen.

Verwenden Sie für die ersten Schritte mit dem SQL Server-Agent die folgenden Aufgaben:

Beschreibung Artikel
Beschreibt, wie der SQL Server-Agent konfiguriert wird. Konfigurieren des SQL Server-Agents
Beschreibt, wie der SQL Server-Agent-Dienst gestartet, beendet und angehalten wird. Starten, Beenden oder Anhalten des SQL Server-Agent-Diensts
Beschreibt Überlegungen zum Angeben eines Kontos für den SQL Server-Agent-Dienst. Auswählen eines Kontos für den SQL Server-Agent-Dienst
Beschreibt, wie das SQL Server-Agent-Fehlerprotokoll verwendet wird. SQL Server-Agent-Fehlerprotokoll
Beschreibt, wie Leistungsobjekte verwendet werden. Verwenden von Leistungsobjekten
Beschreibt den Wartungsplanungs-Assistenten. Hierbei handelt es sich um ein Hilfsprogramm, mit dem Sie Aufträge, Warnungen und Operatoren erstellen können, um die Verwaltung einer SQL Server-Instanz zu automatisieren. Verwenden des Wartungsplanungs-Assistenten
Beschreibt, wie administrative Aufgaben mit dem SQL Server-Agent automatisiert werden. Automatisierte Administrationstasks (SQL Server-Agent)

NOSQLPS

Ab SQL Server 2019 können Sie SQLPS deaktivieren. Fügen Sie hierzu der ersten Zeile eines Auftragsschritts des PowerShell-Moduls #NOSQLPS hinzu, wodurch der SQL-Agent aufhört, das SQLPS-Modul automatisch zu laden. Nun führt der SQL-Agent-Auftrag die auf dem Computer installierte PowerShell-Version aus. Sie können dann auch ein beliebiges anderes PowerShell-Modul verwenden.

Um das Modul SqlServer in Ihrem SQL-Agent-Auftragsschritt zu verwenden, können Sie diesen Code in den ersten beiden Skriptzeilen platzieren.

#NOSQLPS
Import-Module -Name SqlServer