Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Erstellen Sie einen SQL Server-Agent-Auftrag mit T-SQL

SQL Server Agent ist ein Microsoft Windows-Dienst, der geplante Verwaltungsaufgaben ausführt, die als Jobs bezeichnet werden im SQL-Server.

T-SQL enthält eine große Sammlung gespeicherter Prozeduren, die sich mit Jobs des SQL Server-Agenten befassen.

Hier verwenden wir einige davon, um einen SQL Server-Agent-Job zu erstellen und zu planen.

Sie können SQL Server Agent-Jobs auch über die GUI (in SSMS) erstellen, wenn Sie dies bevorzugen.

Agent XPs aktivieren

Wenn Sie zum ersten Mal einen SQL Server-Agent-Auftrag auf Ihrer SQL Server-Instanz erstellen, müssen Sie wahrscheinlich die erweiterten gespeicherten Prozeduren des SQL Server-Agents (Agent XPs) aktivieren.

Hier erfahren Sie, wie Sie dies mit T-SQL und mit der SSMS-GUI tun.

Sobald Sie das getan haben, können Sie fortfahren und einen SQL Server Agent-Auftrag wie den folgenden erstellen.

Beispiel

Hier ist ein Beispiel für den Code, der zum Erstellen und Planen eines SQL Server-Agent-Jobs verwendet wird.

USE msdb;  
GO  
EXEC sp_add_job  
    @job_name = N'BackupPetHotelDB' ;  
GO  
EXEC sp_add_jobstep  
    @job_name = N'BackupPetHotelDB',  
    @step_name = N'Run the backup',  
    @subsystem = N'TSQL',  
    @command = N'BACKUP DATABASE [PetHotel] TO DISK = N''C:\Backups\PetHotel.bak'' WITH CHECKSUM',
    @retry_attempts = 5,  
    @retry_interval = 5;  
GO
EXEC sp_add_schedule 
    @schedule_name = N'RunDailyAM',
    @freq_type = 4,
    @freq_interval = 4,
    @active_start_time = 041000;
GO  
EXEC sp_attach_schedule  
   @job_name = N'BackupPetHotelDB',  
   @schedule_name = N'RunDailyAM';  
GO  
EXEC sp_add_jobserver  
    @job_name = N'BackupPetHotelDB';  
GO

Hier verwenden wir fünf gespeicherte Prozeduren, um den Job zu erstellen und zu planen. Die meisten dieser Prozeduren akzeptieren viel mehr (optionale) Argumente als die, die ich in diesem Beispiel verwendet habe. Eine vollständige Liste der für jede Prozedur verfügbaren Argumente finden Sie unter den Links in der Tabelle unten.

Diese gespeicherten Prozeduren befinden sich in der msdb Datenbank, und Sie können sehen, dass wir msdb gesetzt haben als aktuelle Datenbank, bevor wir sie ausgeführt haben. Alternativ könnten Sie sie mit dem Datenbanknamen qualifizieren (z. B. msdb.dbo.sp_add_job... , usw.)

Die folgende Tabelle bietet einen schnellen Überblick über die einzelnen Verfahren.

Gespeicherte Prozedur Beschreibung
sp_add_job Fügt einen neuen Job hinzu, der vom SQL Agent-Dienst ausgeführt wird.

Weitere Informationen finden Sie auf der Microsoft-Website.
sp_add_jobstep Fügt einen Schritt hinzu, der die eigentliche Operation für den Job durchführt, der mit sp_add_job hinzugefügt wurde .

Im obigen Beispiel fügen wir einen Schritt zum Sichern einer Datenbank hinzu. Wir geben dies an, indem wir einen T-SQL-Befehl bereitstellen.

Das @retry_interval ist in Minuten.

Weitere Informationen finden Sie auf der Microsoft-Website.
sp_add_schedule Erstellt einen Zeitplan, der von einer beliebigen Anzahl von Jobs verwendet werden kann.

In diesem Fall haben wir @freq_type angegeben einen Wert von 4 was täglich ist. Wir haben auch @freq_interval angegeben einen Wert von 4 , das ist auch täglich.

Die Uhrzeit basiert auf einem 24-Stunden-Format und wird in der Form HHMMSS eingegeben. Unser Beispiel verwendet 041000 , das ist 04:10:00.

Siehe den Microsoft-Link unten für die verschiedenen Optionen, die beim Einstellen der Frequenz verfügbar sind.

Weitere Informationen finden Sie auf der Microsoft-Website.
sp_attach_schedule Legt einen Zeitplan für einen Job fest. Hier hängen wir den Zeitplan an, den wir mit sp_add_schedule hinzugefügt haben zu dem Job, den wir mit sp_add_job hinzugefügt haben .

Beachten Sie, dass der Zeitplan und der Job denselben Eigentümer haben müssen.

Außerdem kann ein Zeitplan für mehr als einen Job festgelegt werden, und ein Job kann mit mehr als einem Zeitplan ausgeführt werden.

Weitere Informationen finden Sie auf der Microsoft-Website.
sp_add_jobserver Richtet den angegebenen Job auf den angegebenen Server aus. Dies akzeptiert auch einen @server_name Argument zur Angabe des Servers.

Der Standardwert ist (LOCAL) für die lokale Maschine. In unserem Beispiel haben wir den lokalen Computer verwendet und konnten dieses Argument daher weglassen.

Weitere Informationen finden Sie auf der Microsoft-Website.

Auftrag anzeigen

Sie können den sp_help_job verwenden gespeicherte Prozedur in der msdb Datenbank, um die SQL Server Agent-Jobs anzuzeigen, die auf dem Server erstellt wurden.

EXEC sp_help_job;

So sieht es auf meiner Testmaschine aus:

In diesem Fall gibt es drei Jobs.

Sie können die Jobs auch im Objekt-Explorer sehen, wenn Sie SQL Server Agent> Jobs haben Knoten erweitert.

Der sp_help_job Mit der gespeicherten Prozedur können Sie den Namen oder die ID eines Jobs angeben, um detailliertere Informationen zu diesem Job zu erhalten.

Beispiel:

EXEC sp_help_job @job_name= 'BackupPetHotelDB';

Ergebnis:

Die Ergebnisse werden in die Kernjobdetails, die Jobschritte, die Jobzeitpläne und die Jobzielserver unterteilt. Dies spiegelt ziemlich genau die gespeicherten Prozeduren wider, die wir ausgeführt haben, als wir den Job erstellt haben.

Siehe die Microsoft-Dokumentation für sp_help_job für weitere Informationen sowie eine Liste anderer Argumente, die Sie angeben können.

Testen Sie den Job

Sie können den sp_start_job verwenden gespeicherte Prozedur, um zu testen, ob Ihr Job ausgeführt wird. Diese Prozedur akzeptiert den Jobnamen oder die ID und führt den Job aus, sobald Sie die Prozedur ausführen.

Ein Beispiel finden Sie unter So führen Sie einen SQL Server-Agentenauftrag mit T-SQL aus.