sql >> Database >  >> RDS >> Sqlserver

Een SQL Server Agent-taak wijzigen (T-SQL)

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

Voorbeeld

In dit voorbeeld maken we een taak aan, daarna gebruiken we sp_update_job om die taak te wijzigen.

Maak de taak

Maak eerst de taak:

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

De bovenstaande code gebruikt vijf opgeslagen procedures, maar de sp_update_job procedure werkt alleen die details bij die zijn gemaakt met de sp_add_job procedure. De andere procedures hebben hun eigen bijpassende "update" procedure.

Dus voor de duidelijkheid, het volgende deel is het deel dat we kunnen updaten met de sp_update_job procedure.

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

In dit geval hebben we slechts drie argumenten gegeven bij het maken van de taak. De procedure accepteert eigenlijk veel meer dan dat, maar het enige vereiste argument is de naam van de taak.

De taak bijwerken

We kunnen nu sp_update_job . gebruiken om de bovenstaande taak te wijzigen.

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

Het enige dat dit voorbeeld doet, is de naam van de taak wijzigen.

De sp_update_job 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 beschrijving en de categorienaam kunnen weglaten:

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

Een taak uitschakelen

U kunt een taak uitschakelen door @enabled in te stellen naar 0 :

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

In dit voorbeeld heb ik ook de naam van de taak gewijzigd om duidelijk te maken dat de taak is uitgeschakeld.

Controleer de taak

U kunt sp_help_job . gebruiken om de huidige instellingen van een taak te bekijken.

U kunt het met of zonder parameters gebruiken. Als het zonder parameters wordt gebruikt, worden alle taken geretourneerd.

EXEC sp_help_job;

Als u slechts de details van één taak wilt zien, kunt u de naam of het ID van de taak opgeven.

Zoals dit:

EXEC sp_help_job 
	@job_name = 'BackupMoviesDB';

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

Hoewel u bij het opgeven van de naam de achternaam moet onthouden die u de taak hebt gegeven. In ons geval, als we deze procedure uitvoeren na het vorige voorbeeld (wanneer we de taak hebben uitgeschakeld), zouden we dit moeten doen:

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

De ID van de taak blijft echter constant, dus u kunt die gebruiken, ongeacht de naam van de taak.

Voorbeeld:

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

Wat gebeurt er met de taakstappen, het schema, enz.?

Het wijzigen van een taak verbreekt de stappen en planningsinformatie van die taak niet. De stappen en het schema van een taak blijven intact nadat u wijzigingen heeft aangebracht.

Als u de stappen of het schema moet wijzigen, moet u daarvoor de juiste opgeslagen procedure gebruiken (gebruik bijvoorbeeld sp_update_schedule om het schema bij te werken en sp_update_jobstep om de taakstap bij te werken).

Volledige syntaxis

De volledige syntaxis van sp_update_job gaat als volgt:

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 ]

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


  1. MySQL Unieke beperking toevoegen

  2. Hoe om te gaan met daglichtbesparing in de Oracle-database?

  3. Registreer en voer PostgreSQL 9.0 uit als Windows-service

  4. Een benadering van indexafstemming - Deel 2