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

Criar um trabalho de agente do SQL Server de várias etapas (T-SQL)


Em um artigo anterior sobre como criar um trabalho do SQL Server Agent com T-SQL, demonstrei como criar um trabalho com uma única etapa.

Neste artigo, mostrarei como criar um trabalho com várias etapas.

Exemplo


Ao criar um trabalho do SQL Server Agent com T-SQL, você precisa usar vários procedimentos armazenados. Isso ocorre porque cada parte é tratada de forma independente das demais. Por exemplo, o sp_add_job procedimento cria o trabalho e o sp_add_jobstep procedimento cria uma etapa nesse trabalho.

Ao criar um trabalho com mais de uma etapa, você precisa chamar sp_add_jobstep várias vezes, cada chamada definindo uma etapa diferente.

Além disso, se você quiser que o trabalho progrida pelas etapas (e não saia do trabalho após a primeira etapa), será necessário especificar isso ao chamar o procedimento.

Aqui está um exemplo que faz tudo isso.
USE msdb;  
GO  
EXEC sp_add_job  
    @job_name = N'SqlAgentTest',
    @description = N'Backup the Movies database.',
    @category_name = 'Database Maintenance';
GO
EXEC sp_add_jobstep  
    @job_name = N'SqlAgentTest',  
    @step_name = N'Insert data for step 1',  
    @subsystem = N'TSQL',  
    @command = N'USE TestDB; INSERT INTO SqlAgentJobs VALUES (''SqlAgentTest'', 1, SYSDATETIME())',  
    @on_success_action = 3;
GO
EXEC sp_add_jobstep  
    @job_name = N'SqlAgentTest',  
    @step_name = N'Insert data for step 2',  
    @subsystem = N'TSQL',  
    @command = N'USE TestDB; INSERT INTO SqlAgentJobs VALUES (''SqlAgentTest'', 2, SYSDATETIME())',  
    @on_success_action = 1;
GO
EXEC sp_add_schedule 
    @schedule_name = N'Run_Sat_6AM',
    @freq_type = 8,
    @freq_interval = 64,
    @freq_recurrence_factor = 1,
    @active_start_time = 060000;
GO  
EXEC sp_attach_schedule  
   @job_name = N'SqlAgentTest',  
   @schedule_name = N'Run_Sat_6AM';
GO  
EXEC sp_add_jobserver  
    @job_name = N'SqlAgentTest',  
    @server_name = N'(LOCAL)';
GO

Esse código cria um trabalho com duas etapas de trabalho. Ele também cria um novo agendamento, anexa esse trabalho ao agendamento e direciona o trabalho para o servidor local.

A parte que cria as etapas do trabalho é esta:
EXEC sp_add_jobstep  
    @job_name = N'SqlAgentTest',  
    @step_name = N'Insert data for step 1',  
    @subsystem = N'TSQL',  
    @command = N'USE TestDB; INSERT INTO SqlAgentJobs VALUES (''SqlAgentTest'', 1, SYSDATETIME())',  
    @on_success_action = 3;
GO
EXEC sp_add_jobstep  
    @job_name = N'SqlAgentTest',  
    @step_name = N'Insert data for step 2',  
    @subsystem = N'TSQL',  
    @command = N'USE TestDB; INSERT INTO SqlAgentJobs VALUES (''SqlAgentTest'', 2, SYSDATETIME())',  
    @on_success_action = 1;
GO

Na primeira chamada, a parte que vai @on_success_action = 3 é o que faz o trabalho continuar para a próxima etapa.

O valor padrão é 1 , o que significa que o trabalho será encerrado após a conclusão da primeira etapa (que é o que especificamos na segunda etapa). Então, se não tivéssemos incluído o @on_success_action = 3 parte na primeira etapa, o trabalho seria encerrado sem prosseguir para a próxima etapa.

Você também pode especificar @on_fail_action , que especifica o que acontecerá se essa etapa falhar.

Os valores que você pode fornecer para @on_success_action e @on_fail_action são como segue:
1 Saia com sucesso. Este é o padrão para @on_success_action .
2 Sair com falha. Este é o padrão para @on_fail_action .
3 Vá para a próxima etapa.
4 Vá para a etapa (ID). É aqui que você fornece o ID de uma etapa para a qual deseja que o trabalho avance.

Visualizar as etapas do trabalho


Você pode usar sp_help_job para obter informações sobre os trabalhos do SQL Server Agent no sistema.

Você pode usá-lo com ou sem parâmetros, mas para obter os detalhes da etapa do trabalho, você precisa fornecer o nome ou ID do trabalho.

Podemos usá-lo para ver as duas etapas de trabalho que criamos para o trabalho.

Assim:
EXEC sp_help_job 
	@job_name = 'SqlAgentTest';

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

Aqui está um exemplo do código ao usar o ID:
EXEC sp_help_job 
	@job_id = '343D9F2A-070A-4367-BF69-4248FFF57D70';

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

Exemplo:
EXEC sp_help_job '343D9F2A-070A-4367-BF69-4248FFF57D70';

Você também pode usar sp_help_jobstep da mesma forma para retornar apenas as etapas do trabalho (sem todas as outras informações sobre o trabalho). Isso aceita o nome ou ID do trabalho, bem como um nome ou ID de etapa opcional.

Sintaxe Completa


A sintaxe completa de sp_add_jobstep fica assim:
sp_add_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 = ] 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' } ]

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