Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Modifica di un processo di SQL Server Agent (T-SQL)

In SQL Server puoi usare sp_update_job stored procedure per modificare un processo di SQL Server Agent esistente.

Esempio

In questo esempio, creiamo un lavoro, quindi utilizziamo sp_update_job per modificare quel lavoro.

Crea il lavoro

Innanzitutto, crea il lavoro:

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

Il codice precedente utilizza cinque stored procedure ma il sp_update_job la procedura aggiorna solo quei dettagli che sono stati creati con il sp_add_job procedura. Le altre procedure hanno la propria procedura di "aggiornamento" corrispondente.

Quindi, solo per essere chiari, la parte seguente è la parte che possiamo aggiornare con sp_update_job procedura.

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

In questo caso abbiamo fornito solo tre argomenti durante la creazione del lavoro. La procedura in realtà accetta molto di più, ma l'unico argomento richiesto è il nome del lavoro.

Aggiorna il lavoro

Ora possiamo usare sp_update_job per modificare il lavoro di cui sopra.

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

L'unica cosa che fa questo esempio è cambiare il nome del lavoro.

Il sp_update_job stored procedure modifica solo le impostazioni per le quali vengono forniti i valori dei parametri. Se un parametro viene omesso, l'impostazione corrente viene mantenuta.

Pertanto, in questo caso, avremmo potuto omettere la descrizione e il nome della categoria:

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

Disabilita un lavoro

Puoi disabilitare un lavoro impostando @enabled a 0 :

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

In questo esempio ho anche cambiato il nome del lavoro per rendere evidente che il lavoro è disabilitato.

Controlla il lavoro

Puoi usare sp_help_job per visualizzare le impostazioni correnti di un lavoro.

Puoi usarlo con o senza parametri. Se utilizzato senza parametri, restituisce tutti i lavori.

EXEC sp_help_job;

Se desideri visualizzare i dettagli di un solo lavoro, puoi fornire il nome o l'ID del lavoro.

In questo modo:

EXEC sp_help_job 
	@job_name = 'BackupMoviesDB';

Ecco come appare il risultato quando lo si esegue in SSMS:

Anche se, quando fornisci il nome, dovrai ricordare il cognome che hai assegnato al lavoro. Nel nostro caso, se eseguiamo questa procedura dopo l'esempio precedente (quando abbiamo disabilitato il lavoro), dovremmo farlo:

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

Tuttavia, l'ID del lavoro rimane costante, quindi puoi utilizzarlo indipendentemente dal nome del lavoro.

Esempio:

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

Quando si utilizza l'ID, se lo si desidera, è possibile omettere il nome del parametro.

Esempio:

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

Cosa succede alle fasi del lavoro, alla pianificazione e così via?

La modifica di un lavoro non interrompe i passaggi del lavoro e le informazioni sulla pianificazione. I passaggi e la pianificazione di un lavoro rimarranno intatti dopo aver apportato modifiche.

Se è necessario modificare i passaggi o la pianificazione, è necessario utilizzare la procedura memorizzata appropriata per essi (ad esempio, utilizzare sp_update_schedule per aggiornare la sua pianificazione e sp_update_jobstep per aggiornare la sua fase di lavoro).

Sintassi completa

La sintassi completa di sp_update_job va così:

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 ]

Consulta la documentazione di Microsoft per sp_update_job per una spiegazione di ciascun parametro, nonché dei valori che ciascuno accetta.