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

Aktualisieren eines Auftragsschritts für einen SQL Server-Agent-Auftrag (T-SQL)

In SQL Server können Sie den sp_update_jobstep verwenden gespeicherte Prozedur zum Ändern eines vorhandenen Auftragsschritts eines SQL Server-Agent-Auftrags.

Wenn Sie einen SQL Server-Agent-Auftrag erstellen, erstellen Sie einen oder mehrere Auftragsschritte für diesen Auftrag. Der sp_update_jobstep Das Verfahren ermöglicht es Ihnen, einen bestimmten Jobschritt unabhängig vom eigentlichen Job oder anderen Jobschritten zu aktualisieren.

Beispiel

In diesem Beispiel erstellen wir einen Job mit einem Jobschritt, dann verwenden wir sp_update_jobstep um den Jobschritt zu ändern.

Job erstellen

Erstellen Sie zuerst den Job:

USE msdb;  
GO  
EXEC sp_add_job  
    @job_name = N'BackupMoviesDB',
    @description = N'Backup the Movies database.',
    @category_name = 'Database Maintenance';
GO  
EXEC sp_add_jobstep  
    @job_name = N'BackupMoviesDB',  
    @step_name = N'Run the backup',  
    @subsystem = N'TSQL',  
    @command = N'BACKUP DATABASE [Movies] TO DISK = N''C:\Backups\Movies.bak'' WITH CHECKSUM',
    @retry_attempts = 5,  
    @retry_interval = 5;
GO
EXEC sp_add_schedule 
    @schedule_name = N'Run_Sat_5AM',
    @freq_type = 8,
    @freq_interval = 64,
    @freq_recurrence_factor = 1,
    @active_start_time = 050000;
GO  
EXEC sp_attach_schedule  
   @job_name = N'BackupMoviesDB',  
   @schedule_name = N'Run_Sat_5AM';
GO  
EXEC sp_add_jobserver  
    @job_name = N'BackupMoviesDB';
GO

Der obige Code verwendet fünf gespeicherte Prozeduren, aber den sp_add_jobstep Die Prozedur ist die einzige, die die Details enthält, die mit sp_update_jobstep geändert werden können . Die anderen Prozeduren haben ihre eigenen passenden „Update“-Prozeduren (wie sp_update_job und sp_update_schedule ).

Nur um das klarzustellen, der folgende Teil ist der Teil, den wir mit dem sp_update_jobstep aktualisieren können Verfahren.

EXEC sp_add_jobstep  
    @job_name = N'BackupMoviesDB',  
    @step_name = N'Run the backup',  
    @subsystem = N'TSQL',  
    @command = N'BACKUP DATABASE [Movies] TO DISK = N''C:\Backups\Movies.bak'' WITH CHECKSUM',
    @retry_attempts = 5,  
    @retry_interval = 5;

In diesem Fall haben wir beim Erstellen des Jobs sechs Argumente angegeben. Das Verfahren akzeptiert eigentlich viel mehr als das, aber das reicht für unsere Zwecke.

Job-Step aktualisieren

Wir können jetzt sp_update_jobstep verwenden um den obigen Jobschritt zu ändern.

EXEC sp_update_jobstep  
    @job_name = N'BackupMoviesDB',
    @step_id = 1,  
    @step_name = N'Run the backup',  
    @subsystem = N'TSQL',  
    @command = N'BACKUP DATABASE [Movies] TO DISK = N''C:\Backups\Movies.bak'' WITH CHECKSUM',
    @retry_attempts = 10,  
    @retry_interval = 5;

Das einzige, was dieses Beispiel bewirkt, ist die Erhöhung der Wiederholungsversuche von 5 bis 10 .

Der sp_update_jobstep Die gespeicherte Prozedur ändert nur die Einstellungen, für die Parameterwerte bereitgestellt werden. Wird ein Parameter weggelassen, bleibt die aktuelle Einstellung erhalten.

Daher hätten wir in diesem Fall die anderen Argumente wie folgt weglassen können:

EXEC sp_update_jobstep  
    @job_name = N'BackupMoviesDB',
    @step_id = 1,
    @retry_attempts = 10;

Auftrag prüfen

Sie können sp_help_job verwenden um Informationen über die SQL Server Agent-Jobs im System zu erhalten.

Sie können es mit oder ohne Parameter verwenden, aber um die Jobschrittdetails zu erhalten, müssen Sie den Jobnamen oder die ID angeben.

So:

EXEC sp_help_job 
	@job_name = 'BackupMoviesDB';

So sieht das Ergebnis aus, wenn es in SSMS ausgeführt wird:

Hier ist ein Beispiel für den Code bei Verwendung der ID:

EXEC sp_help_job 
	@job_id = '158D714B-6686-48FD-BB41-D35C6EE70AED';

Wenn Sie die ID verwenden, können Sie den Parameternamen weglassen, wenn Sie möchten.

Beispiel:

EXEC sp_help_job '158D714B-6686-48FD-BB41-D35C6EE70AED';

Vollständige Syntax

Die vollständige Syntax von sp_update_jobstep geht so:

sp_update_jobstep   
     {   [@job_id =] job_id   
       | [@job_name =] 'job_name' } ,  
     [@step_id =] step_id  
     [ , [@step_name =] 'step_name' ]  
     [ , [@subsystem =] 'subsystem' ]   
     [ , [@command =] 'command' ]  
     [ , [@additional_parameters =] 'parameters' ]  
     [ , [@cmdexec_success_code =] success_code ]  
     [ , [@on_success_action =] success_action ]   
     [ , [@on_success_step_id =] success_step_id ]  
     [ , [@on_fail_action =] fail_action ]   
     [ , [@on_fail_step_id =] fail_step_id ]  
     [ , [@server =] 'server' ]   
     [ , [@database_name =] 'database' ]  
     [ , [@database_user_name =] 'user' ]   
     [ , [@retry_attempts =] retry_attempts ]  
     [ , [@retry_interval =] retry_interval ]   
     [ , [@os_run_priority =] run_priority ]  
     [ , [@output_file_name =] 'file_name' ]   
     [ , [@flags =] flags ]  
     [ ,  {   [ @proxy_id = ] proxy_id   
            | [ @proxy_name = ] 'proxy_name' }

Siehe die Microsoft-Dokumentation für sp_update_jobstep für eine Erklärung jedes Parameters sowie der Werte, die jeder akzeptiert.

Beachten Sie, dass durch das Aktualisieren eines Jobschritts die Jobversionsnummer erhöht wird.