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

Ändern eines SQL Server-Agent-Auftrags (T-SQL)

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

Beispiel

In diesem Beispiel erstellen wir einen Job und verwenden dann sp_update_job um diesen Job zu ändern.

Job erstellen

Erstellen Sie zuerst den Job:

USE msdb;  
GO  
EXEC sp_add_job  
    @job_name = N'BakMovies',
    @description = N'Backup the Movies database.',
    @category_name = 'Database Maintenance';
GO  
EXEC sp_add_jobstep  
    @job_name = N'BakMovies',  
    @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'BakMovies',  
   @schedule_name = N'Run_Sat_5AM';
GO  
EXEC sp_add_jobserver  
    @job_name = N'BakMovies';
GO

Der obige Code verwendet fünf gespeicherte Prozeduren außer dem sp_update_job Die Prozedur aktualisiert nur die Details, die mit sp_add_job erstellt wurden Verfahren. Die anderen Prozeduren haben ihre eigene passende „Aktualisierungs“-Prozedur.

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

EXEC sp_add_job  
    @job_name = N'BakMovies',
    @description = N'Backup the Movies database.',
    @category_name = 'Database Maintenance';

In diesem Fall haben wir beim Erstellen des Jobs nur drei Argumente angegeben. Die Prozedur akzeptiert tatsächlich viel mehr als das, aber das einzige erforderliche Argument ist der Name des Jobs.

Aktualisieren Sie den Job

Wir können jetzt sp_update_job verwenden um den obigen Job zu ändern.

EXEC sp_update_job  
    @job_name = N'BakMovies',
    @new_name = N'BackupMoviesDB',
    @description = N'Backup the Movies database.',
    @category_name = 'Database Maintenance';

In diesem Beispiel wird lediglich der Name des Jobs geändert.

Der sp_update_job 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 Beschreibung und den Kategorienamen weglassen können:

EXEC sp_update_job  
    @job_name = N'BakMovies',
    @new_name = N'BackupMoviesDB';

Einen Job deaktivieren

Sie können einen Job deaktivieren, indem Sie @enabled setzen auf 0 :

EXEC sp_update_job  
    @job_name = N'BackupMoviesDB',
    @new_name = N'BackupMoviesDB (DISABLED)',
    @enabled = 0;

In diesem Beispiel habe ich auch den Namen des Jobs geändert, um deutlich zu machen, dass der Job deaktiviert ist.

Auftrag prüfen

Sie können sp_help_job verwenden um die aktuellen Einstellungen eines Jobs anzuzeigen.

Sie können es mit oder ohne Parameter verwenden. Bei Verwendung ohne Parameter werden alle Jobs zurückgegeben.

EXEC sp_help_job;

Wenn Sie nur die Details eines Jobs sehen möchten, können Sie den Namen oder die ID des Jobs angeben.

So:

EXEC sp_help_job 
	@job_name = 'BackupMoviesDB';

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

Wenn Sie den Namen angeben, müssen Sie sich jedoch an den Nachnamen erinnern, den Sie der Stelle gegeben haben. Wenn wir diese Prozedur in unserem Fall nach dem vorherigen Beispiel ausführen (wenn wir den Job deaktiviert haben), müssten wir Folgendes tun:

EXEC sp_help_job 
	@job_name = 'BackupMoviesDB (DISABLED)';

Die ID des Jobs bleibt jedoch konstant, sodass Sie diese unabhängig vom Namen des Jobs verwenden können.

Beispiel:

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';

Was passiert mit den Arbeitsschritten, dem Zeitplan usw.?

Durch das Ändern eines Jobs werden die Schritte und Zeitplaninformationen dieses Jobs nicht unterbrochen. Die Schritte und der Zeitplan eines Jobs bleiben intakt, nachdem Sie Änderungen vorgenommen haben.

Wenn Sie die Schritte oder den Zeitplan ändern müssen, müssen Sie die entsprechende gespeicherte Prozedur dafür verwenden (verwenden Sie beispielsweise sp_update_schedule um seinen Zeitplan und sp_update_jobstep zu aktualisieren um seinen Jobschritt zu aktualisieren).

Vollständige Syntax

Die vollständige Syntax von sp_update_job geht so:

sp_update_job [ @job_id =] job_id | [@job_name =] 'job_name'  
     [, [@new_name =] 'new_name' ]   
     [, [@enabled =] enabled ]  
     [, [@description =] 'description' ]   
     [, [@start_step_id =] step_id ]  
     [, [@category_name =] 'category' ]   
     [, [@owner_login_name =] 'login' ]  
     [, [@notify_level_eventlog =] eventlog_level ]  
     [, [@notify_level_email =] email_level ]  
     [, [@notify_level_netsend =] netsend_level ]  
     [, [@notify_level_page =] page_level ]  
     [, [@notify_email_operator_name =] 'operator_name' ]  
     [, [@notify_netsend_operator_name =] 'netsend_operator' ]  
     [, [@notify_page_operator_name =] 'page_operator' ]  
     [, [@delete_level =] delete_level ]   
     [, [@automatic_post =] automatic_post ]

Siehe die Microsoft-Dokumentation für sp_update_job für eine Erläuterung jedes Parameters sowie der Werte, die jeder akzeptiert.