sql >> データベース >  >> RDS >> Sqlserver

複数のSQLServerエージェントジョブ(T-SQL)に同じスケジュールを使用する方法

    SQL Serverエージェントジョブを作成する場合、そのジョブの新しいスケジュールを作成するか、既存のスケジュールを使用するかを選択できます。

    ジョブスケジュールは、ジョブとは独立して管理できます。 sp_add_scheduleを使用できます スケジュールとsp_attach_scheduleを作成します スケジュールをジョブに添付します。

    これにより、同じスケジュールを複数のジョブに添付できます。

    次のコードを使用してジョブを作成するとします。

    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

    そのコードにはsp_add_scheduleが含まれていました ストアドプロシージャ。この手順により、任意の数のジョブで使用できるスケジュールが作成されます。この例では、スケジュールをRunDailyAMと呼びました。 。

    次に、sp_attach_scheduleを使用しました そのスケジュールを、作成したSQLServerエージェントジョブに添付します。これは、同じスケジュールを後続のジョブに添付するために使用できるストアドプロシージャです。

    次に、別のSQL Serverエージェントジョブを作成しましょう。ただし、今回はsp_add_scheduleを含めません。 手順:

    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

    sp_add_scheduleは使用しませんでした 前のジョブで作成済みのスケジュールを使用したためです。

    ただし、sp_attach_scheduleを使用しました 以前に作成したスケジュールを新しいジョブに添付する必要があったため、ストアドプロシージャ。

    したがって、両方のジョブが同じスケジュールで実行されるようになります。

    スケジュールが添付されているジョブの数を確認する

    sp_help_jobcountを使用できます 特定のスケジュールが関連付けられているジョブの数を返す手順。プロシージャを呼び出すときに、スケジュール名またはIDを入力するだけです。

    例:

    EXEC sp_help_jobcount @schedule_name = 'RunDailyAM';

    結果:

    JobCount
    --------
     2


    1. JavaからPL/SQLに配列を返す方法は?

    2. Oracleでxmltableを使用する方法は?

    3. ActiveRecordクエリの時間ベースの優先度

    4. EntityFrameworkCoreで継承を操作する方法