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

T-SQLを使用してSQLServerエージェントジョブを作成する

    SQL Serverエージェントは、スケジュールされた管理タスクを実行するMicrosoft Windowsサービスであり、ジョブと呼ばれます。 SQLServerで。

    T-SQLには、SQLServerエージェントジョブを処理するストアドプロシージャの大規模なコレクションが含まれています。

    ここでは、それらのいくつかを使用して、SQLServerエージェントジョブを作成およびスケジュールします。

    必要に応じて、GUI(SSMS内)を介してSQLServerエージェントジョブを作成することもできます。

    エージェントXPを有効にする

    SQLServerインスタンスでSQLServerエージェントジョブを作成するのが初めての場合は、SQL Serverエージェント拡張ストアドプロシージャ(エージェントXP)を有効にする必要があります。

    T-SQLを使用して実行する方法と、SSMSGUIを使用して実行する方法を次に示します。

    それが完了したら、次のようなSQLServerエージェントジョブを続行して作成できます。

    これは、SQLServerエージェントジョブの作成とスケジュールに使用されるコードの例です。

    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

    ここでは、ジョブを作成してスケジュールするために5つのストアドプロシージャを使用します。これらの手順のほとんどは、この例で使用したものよりもはるかに多くの(オプションの)引数を受け入れます。各プロシージャで使用できる引数の完全なリストについては、以下の表のリンクを参照してください。

    これらのストアドプロシージャはmsdbにあります データベースを作成すると、 msdbが設定されていることがわかります。 それらを実行する前の現在のデータベースとして。または、データベース名で修飾することもできます(例:msdb.dbo.sp_add_job... 、など)

    次の表に、各手順の概要を示します。

    ストアドプロシージャ 説明
    sp_add_job SQLAgentサービスによって実行される新しいジョブを追加します。

    詳細については、MicrosoftのWebサイトを参照してください。
    sp_add_jobstep sp_add_jobで追加されたジョブの実際の操作を実行するステップを追加します 。

    上記の例では、データベースをバックアップするステップを追加しています。 T-SQLコマンドを提供することを指定します。

    @retry_interval 分単位です。

    詳細については、MicrosoftのWebサイトを参照してください。
    sp_add_schedule 任意の数のジョブで使用できるスケジュールを作成します。

    この場合、@freq_typeを指定しました 4の値 これは毎日です。 @freq_intervalも提供しました 4の値 、これも毎日です。

    時間は24時間制に基づいており、HHMMSSの形式で入力されます。この例では、041000を使用しています 、04:10:00です。

    頻度を設定するときに使用できるさまざまなオプションについては、以下のMicrosoftリンクを参照してください。

    詳細については、MicrosoftのWebサイトを参照してください。
    sp_attach_schedule ジョブのスケジュールを設定します。ここでは、追加したスケジュールをsp_add_scheduleで添付します sp_add_jobで追加したジョブに 。

    スケジュールとジョブの所有者は同じである必要があることに注意してください。

    また、スケジュールを複数のジョブに設定したり、ジョブを複数のスケジュールで実行したりすることもできます。

    詳細については、MicrosoftのWebサイトを参照してください。
    sp_add_jobserver 指定されたサーバーで指定されたジョブを対象とします。これは@server_nameも受け入れます サーバーを指定する引数。

    デフォルト値は(LOCAL)です。 ローカルマシン用。この例では、ローカルマシンを使用したため、この引数を省略できました。

    詳細については、MicrosoftのWebサイトを参照してください。

    ジョブを表示

    sp_help_jobを使用できます msdbのストアドプロシージャ サーバー上に作成されたSQLServerエージェントジョブを表示するデータベース。

    EXEC sp_help_job;

    テストマシンでの表示は次のとおりです。

    この場合、3つのジョブがあります。

    SQLServerエージェント>ジョブがある場合は、オブジェクトエクスプローラーでジョブを確認することもできます。 ノードが拡張されました。

    sp_help_job ストアドプロシージャを使用すると、ジョブの名前またはIDを指定して、そのジョブに関するより詳細な情報を取得できます。

    例:

    EXEC sp_help_job @job_name= 'BackupPetHotelDB';

    結果:

    結果は、コアジョブの詳細、ジョブステップ、ジョブスケジュール、およびジョブターゲットサーバーに分けられます。これは、ジョブの作成時に実行したストアドプロシージャをほぼ反映しています。

    sp_help_jobについては、Microsoftのドキュメントを参照してください。 詳細、および提供できるその他の引数のリストについては、

    ジョブをテストする

    sp_start_jobを使用できます ジョブが実行されることをテストするためのストアドプロシージャ。このプロシージャはジョブ名またはIDを受け入れ、プロシージャを実行するとすぐにジョブを実行します。

    例については、T-SQLを使用してSQLServerエージェントジョブを実行する方法を参照してください。


    1. いつカーソルとデータベースを閉じる必要がありますか?

    2. SQL Serverデータベースの現在のrowversion値を返す方法(T-SQLの例)

    3. NodeJSとPostgresを使用したトランザクションチェーンのオプションのINSERTステートメント

    4. 複数の列の間にセットのような一意性を適用するにはどうすればよいですか?