sql >> Databáze >  >> RDS >> Sqlserver

Jak používat stejný plán pro více úloh SQL Server Agent (T-SQL)

Když vytvoříte úlohu SQL Server Agent, máte možnost vytvořit nový plán pro tuto úlohu nebo použít ten, který již existuje.

Plány úloh lze spravovat nezávisle na zakázkách. Můžete použít sp_add_schedule vytvořte plán a sp_attach_schedule pro připojení rozvrhu k úloze.

To vám umožní připojit stejný plán k více úlohám.

Příklad

Předpokládejme, že vytvoříme úlohu pomocí následujícího kódu:

USE msdb;  
GO  
EXEC sp_add_job  
    @job_name = N'BackupPetHotelDB' ;  
GO  
EXEC sp_add_jobstep  
    @job_name = N'BackupPetHotelDB',  
    @step_name = N'Run the backup',  
    @subsystem = N'TSQL',  
    @command = N'BACKUP DATABASE [PetHotel] TO DISK = N''C:\Backups\PetHotel.bak'' WITH CHECKSUM',
    @retry_attempts = 5,  
    @retry_interval = 5;  
GO
EXEC sp_add_schedule 
    @schedule_name = N'RunDailyAM',
    @freq_type = 4,
    @freq_interval = 4,
    @active_start_time = 041000;
GO  
EXEC sp_attach_schedule  
   @job_name = N'BackupPetHotelDB',  
   @schedule_name = N'RunDailyAM';  
GO  
EXEC sp_add_jobserver  
    @job_name = N'BackupPetHotelDB';  
GO

Tento kód obsahoval sp_add_schedule uložené procedury. Tento postup vytvoří plán, který může použít libovolný počet úloh. V našem případě jsme plán nazvali RunDailyAM .

Poté jsme použili sp_attach_schedule připojit tento plán k úloze SQL Server Agent, kterou jsme právě vytvořili. Toto je uložená procedura, kterou můžeme použít k připojení stejného plánu k dalším úlohám.

Nyní vytvoříme další úlohu SQL Server Agent, ale tentokrát nezahrneme sp_add_schedule postup:

USE msdb;  
GO  
EXEC dbo.sp_add_job  
    @job_name = N'BackupWorldDB' ;  
GO  
EXEC sp_add_jobstep  
    @job_name = N'BackupWorldDB',  
    @step_name = N'Run the backup',  
    @subsystem = N'TSQL',  
    @command = N'BACKUP DATABASE [World] TO DISK = N''C:\Backups\World.bak'' WITH CHECKSUM',
    @retry_attempts = 5,  
    @retry_interval = 5;  
GO
EXEC sp_attach_schedule  
   @job_name = N'BackupWorldDB',  
   @schedule_name = N'RunDailyAM';  
GO  
EXEC sp_add_jobserver  
    @job_name = N'BackupWorldDB',
    @server_name = N'(LOCAL)';  
GO

Nepoužili jsme sp_add_schedule postup, protože jsme použili rozvrh, který již byl vytvořen v předchozí zakázce.

My jsme však použili sp_attach_schedule uložená procedura, protože jsme potřebovali připojit dříve vytvořený plán k naší nové úloze.

Obě úlohy tedy nyní poběží podle stejného plánu.

Zjistěte, kolik úloh, ke kterým je plán připojen

Můžete použít sp_help_jobcount postup pro vrácení počtu úloh, ke kterým je daný plán připojen. Stačí zadat název plánu nebo ID při volání procedury.

Příklad:

EXEC sp_help_jobcount @schedule_name = 'RunDailyAM';

Výsledek:

JobCount
--------
 2


  1. Práce s MyISAM v MySQL

  2. Kolekce Oracle PL/SQL – Vytvořte vnořenou tabulku v databázi

  3. Kombinujte více příkazů SELECT

  4. Existuje v JPQL takový výraz CASE?