sql >> Database >  >> RDS >> Sqlserver

Een taakstap bijwerken voor een SQL Server Agent-taak (T-SQL)

In SQL Server kunt u de sp_update_jobstep . gebruiken opgeslagen procedure om een ​​bestaande taakstap van een SQL Server Agent-taak te wijzigen.

Wanneer u een SQL Server Agent-taak maakt, maakt u een of meer taakstappen voor die taak. De sp_update_jobstep procedure stelt u in staat om een ​​specifieke taakstap bij te werken, onafhankelijk van de eigenlijke taak of andere taakstappen.

Voorbeeld

In dit voorbeeld maken we een taak met één taakstap, daarna gebruiken we sp_update_jobstep om de taakstap te wijzigen.

Maak de taak

Maak eerst de taak:

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

De bovenstaande code gebruikt vijf opgeslagen procedures, maar de sp_add_jobstep procedure is de enige die de details bevat die kunnen worden gewijzigd met sp_update_jobstep . De andere procedures hebben hun eigen overeenkomende "update" procedures (zoals sp_update_job en sp_update_schedule ).

Voor alle duidelijkheid:het volgende deel is het deel dat we kunnen updaten met de sp_update_jobstep procedure.

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 dit geval hebben we zes argumenten gegeven bij het maken van de taak. De procedure accepteert eigenlijk veel meer dan dat, maar dit is voldoende voor onze doeleinden.

De taakstap bijwerken

We kunnen nu sp_update_jobstep . gebruiken om de bovenstaande taakstap te wijzigen.

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;

Het enige dat dit voorbeeld doet, is het aantal nieuwe pogingen verhogen van 5 tot 10 .

De sp_update_jobstep opgeslagen procedure verandert alleen die instellingen waarvoor parameterwaarden worden opgegeven. Als een parameter wordt weggelaten, blijft de huidige instelling behouden.

Daarom hadden we in dit geval de andere argumenten kunnen weglaten, zoals deze:

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

Controleer de taak

U kunt sp_help_job . gebruiken om informatie te krijgen over de SQL Server Agent-taken in het systeem.

U kunt het met of zonder parameters gebruiken, maar om de details van de taakstap te krijgen, moet u de taaknaam of ID opgeven.

Zoals dit:

EXEC sp_help_job 
	@job_name = 'BackupMoviesDB';

Hier is hoe het resultaat eruit ziet wanneer het wordt uitgevoerd in SSMS:

Hier is een voorbeeld van de code bij gebruik van de ID:

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

Als u de ID gebruikt, kunt u desgewenst de parameternaam weglaten.

Voorbeeld:

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

Volledige syntaxis

De volledige syntaxis van sp_update_jobstep gaat als volgt:

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

Zie de documentatie van Microsoft voor sp_update_jobstep voor een uitleg van elke parameter, evenals de waarden die elke parameter accepteert.

Houd er rekening mee dat het bijwerken van een taakstap het versienummer van de taak verhoogt.


  1. MySQL-fout omzeilen Deadlock gevonden bij het proberen te vergrendelen; probeer de transactie opnieuw te starten

  2. 7 manieren om dubbele rijen met een primaire sleutel in MariaDB te retourneren

  3. Is er een functie om een ​​string te splitsen in PL/SQL?

  4. Alternatief voor lead lag-functie in SQL Server 2008