sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man använder samma schema för flera SQL Server-agentjobb (T-SQL)

När du skapar ett SQL Server Agent-jobb har du möjlighet att skapa ett nytt schema för det jobbet eller använda ett som redan finns.

Arbetsscheman kan hanteras oberoende av jobb. Du kan använda sp_add_schedule för att skapa schemat och sp_attach_schedule för att bifoga schemat till ett jobb.

Detta gör att du kan koppla samma schema till flera jobb.

Exempel

Anta att vi skapar ett jobb med följande kod:

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

Den koden inkluderade sp_add_schedule lagrad procedur. Denna procedur skapar ett schema som kan användas av valfritt antal jobb. I vårt fall kallade vi schemat RunDailyAM .

Vi använde sedan sp_attach_schedule för att bifoga det schemat till SQL Server Agent-jobbet som vi just skapade. Detta är den lagrade proceduren som vi kan använda för att bifoga samma schema till efterföljande jobb.

Låt oss nu skapa ett annat SQL Server Agent-jobb, men den här gången kommer vi inte att inkludera sp_add_schedule procedur:

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

Vi använde inte sp_add_schedule proceduren, eftersom vi använde schemat som redan hade skapats i det föregående jobbet.

Vi använde dock sp_attach_schedule lagrad procedur, eftersom vi behövde bifoga det tidigare skapade schemat till vårt nya jobb.

Så båda jobben kommer nu att köras enligt samma schema.

Ta reda på hur många jobb som ett schema är kopplat till

Du kan använda sp_help_jobcount procedur för att returnera antalet jobb som ett givet schema är kopplat till. Ange bara schemats namn eller ID när du ringer proceduren.

Exempel:

EXEC sp_help_jobcount @schedule_name = 'RunDailyAM';

Resultat:

JobCount
--------
 2


  1. Topp 5 tidskrävande SQL-frågor i Oracle

  2. Introduktion till auto_explain:Hur man loggar långsamma Postgres-frågeplaner automatiskt

  3. Kombinera två tabeller som inte har några gemensamma fält

  4. Databasnamnkonventioner från Microsoft?