Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Modificar um trabalho do SQL Server Agent (T-SQL)


No SQL Server, você pode usar o sp_update_job procedimento armazenado para modificar um trabalho existente do SQL Server Agent.

Exemplo


Neste exemplo, criamos um trabalho e usamos sp_update_job para modificar esse trabalho.

Criar o trabalho


Primeiro, crie o trabalho:
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

O código acima usa cinco procedimentos armazenados, mas o sp_update_job procedimento atualiza apenas os detalhes que foram criados com o sp_add_job procedimento. Os outros procedimentos têm seu próprio procedimento de “atualização” correspondente.

Então, para ficar claro, a parte a seguir é a parte que podemos atualizar com o sp_update_job procedimento.
EXEC sp_add_job  
    @job_name = N'BakMovies',
    @description = N'Backup the Movies database.',
    @category_name = 'Database Maintenance';

Nesse caso, fornecemos apenas três argumentos ao criar o trabalho. Na verdade, o procedimento aceita muito mais do que isso, mas o único argumento necessário é o nome do trabalho.

Atualizar o trabalho


Agora podemos usar sp_update_job para modificar o trabalho acima.
EXEC sp_update_job  
    @job_name = N'BakMovies',
    @new_name = N'BackupMoviesDB',
    @description = N'Backup the Movies database.',
    @category_name = 'Database Maintenance';

A única coisa que este exemplo faz é alterar o nome do trabalho.

O sp_update_job O procedimento armazenado altera apenas as configurações para as quais os valores de parâmetro são fornecidos. Se um parâmetro for omitido, a configuração atual será mantida.

Portanto, neste caso, poderíamos ter omitido a descrição e o nome da categoria:
EXEC sp_update_job  
    @job_name = N'BakMovies',
    @new_name = N'BackupMoviesDB';

Desativar um trabalho


Você pode desabilitar um trabalho definindo @enabled para 0 :
EXEC sp_update_job  
    @job_name = N'BackupMoviesDB',
    @new_name = N'BackupMoviesDB (DISABLED)',
    @enabled = 0;

Neste exemplo, também alterei o nome do trabalho para tornar aparente que o trabalho está desabilitado.

Verifique o trabalho


Você pode usar sp_help_job para visualizar as configurações atuais de um trabalho.

Você pode usá-lo com ou sem parâmetros. Quando usado sem parâmetros, retorna todos os trabalhos.
EXEC sp_help_job;

Se você quiser ver apenas os detalhes de um trabalho, forneça o nome ou o ID do trabalho.

Assim:
EXEC sp_help_job 
	@job_name = 'BackupMoviesDB';

Veja como fica o resultado ao executá-lo no SSMS:

Embora, ao fornecer o nome, você precise lembrar o sobrenome que deu ao trabalho. No nosso caso, se executarmos este procedimento após o exemplo anterior (quando desabilitamos o trabalho), precisaríamos fazer isso:
EXEC sp_help_job 
	@job_name = 'BackupMoviesDB (DISABLED)';

No entanto, o ID do trabalho permanece constante, portanto, você pode usá-lo independentemente do nome do trabalho.

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

Ao usar o ID, você pode omitir o nome do parâmetro, se desejar.

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

O que acontece com as etapas do trabalho, cronograma, etc?


A modificação de um trabalho não interrompe as etapas desse trabalho e as informações de agendamento. As etapas e o cronograma de um trabalho permanecerão intactos depois que você fizer qualquer modificação.

Se você precisar modificar as etapas ou agendar, precisará usar o procedimento armazenado apropriado para elas (por exemplo, use sp_update_schedule para atualizar sua agenda e sp_update_jobstep para atualizar sua etapa de trabalho).

Sintaxe Completa


A sintaxe completa de sp_update_job fica assim:
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 ]

Consulte a documentação da Microsoft para sp_update_job para uma explicação de cada parâmetro, bem como os valores que cada um aceita.