web-dev-qa-db-ja.com

SQLサーバーでのストアドプロシージャのスケジュールされた実行

ストアドプロシージャを定期的に実行するようにMicrosoft SQL Serverを何らかの形でセットアップすることは可能ですか?

59

はい、MS SQL Serverでは、スケジュールされたジョブを作成できます。 SQL Management Studioで、サーバーに移動し、SQL Server Agentアイテムを展開し、最後にJobsフォルダーを展開して、スケジュールされたジョブを表示、編集、追加します。

98
Jeb

MS SQL Server Express Editionが使用されている場合、SQL Serverエージェントは使用できません。すべてのエディションで以下が機能することがわかりました。

USE Master
GO

IF  EXISTS( SELECT *
            FROM sys.objects
            WHERE object_id = OBJECT_ID(N'[dbo].[MyBackgroundTask]')
            AND type in (N'P', N'PC'))
    DROP PROCEDURE [dbo].[MyBackgroundTask]
GO

CREATE PROCEDURE MyBackgroundTask
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- The interval between cleanup attempts
    declare @timeToRun nvarchar(50)
    set @timeToRun = '03:33:33'

    while 1 = 1
    begin
        waitfor time @timeToRun
        begin
            execute [MyDatabaseName].[dbo].[MyDatabaseStoredProcedure];
        end
    end
END
GO

-- Run the procedure when the master database starts.
sp_procoption    @ProcName = 'MyBackgroundTask',
                @OptionName = 'startup',
                @OptionValue = 'on'
GO

いくつかのメモ:

38
Thomas Bratt

はい、SQL Serverエージェントを使用する場合。

Enterprise Managerを開き、目的のSQL Serverインスタンスの下の[管理]フォルダーに移動します。SQLServerエージェントが表示され、その下に[ジョブ]セクションが表示されます。

ここで、新しいジョブを作成できます。作成する必要があるステップのリストが表示されます。新しいステップを作成するとき、ストアドプロシージャを実際に実行するステップを指定できます(TSQLスクリプトを入力)。データベースを選択してから、コマンドセクションに次のように入力します。

exec MyStoredProcedure

これが概要です。さらにアドバイスが必要な場合は、ここに投稿してください。

[私は実際に私はこれに最初に入るかもしれないと思った、少年は私が間違っていた:)]

17
Ciaran Archer

おそらくあなたが探している答えではありませんが、単純に Windows Server Task Scheduler を使用する方が便利だと思います

sqlcmd.exe -S "." -d YourDataBase -Q "exec SP_YourJob"コマンドを直接使用できます

または、.batファイルを作成することもできます。そのため、オンデマンドでタスクを2回クリックすることもできます。

これもこの方法でアプローチされました [〜#〜] here [〜#〜]

8
percebus

1つ追加します。私が今いる場所では、毎晩実行されるバッチジョブがたくさんありました。ただし、Windowsのスケジュールされたタスクでスケジュールされたクライアントアプリケーションを使用して、各ジョブを開始することに移行しています。これには、(少なくとも)3つの理由があります。

  1. 毎晩実行する必要があるコンソールプログラムもあります。このようにして、スケジュールされたすべてのタスクを1か所にまとめることができます。もちろん、これにより単一障害点が発生しますが、コンソールジョブが実行されない場合は、とにかく翌日の作業が失われます。
  2. ジョブを開始するプログラムは、サーバーから印刷メッセージとエラーをキャプチャし、すべてのバッチプロセスの共通ア​​プリケーションログに書き込みます。これにより、SQLジョブでのロギングが非常に簡単になります。
  3. サーバーをアップグレードする必要がある場合(そして、すぐにアップグレードすることを望んでいる場合)、ジョブを移動することを心配する必要はありません。アプリケーションを一度ポイントし直すだけです。

本当に短いVB.Netアプリです。興味のある方はコードを投稿できます。

6
Joel Coehoorn

SQL Server Service Brokerを使用して、カスタムメイドのメカニズムを作成できます。

アイデア(簡略化):

  1. 会話を開始するストアドプロシージャ/トリガーを記述する( BEGIN DIALOG )as loopback(FROM my_service TO my_service)-get conversation handler

    DECLARE @dialog UNIQUEIDENTIFIER;
    
    BEGIN DIALOG CONVERSATION @dialog
            FROM SERVICE   [name] 
            TO SERVICE      'name' 
            ...;
    
  2. 会話タイマーを開始します

    DECLARE @time INT;
    BEGIN CONVERSATION TIMER (@dialog)  TIMEOUT = @time;
    
  3. 指定した秒数が経過すると、メッセージがサービスに送信されます。関連するキューでキューに入れられます。

    CREATE QUEUE queue_name WITH STATUS = ON, RETENTION = OFF
                 , ACTIVATION (STATUS = ON, PROCEDURE_NAME = <procedure_name>
                 , MAX_QUEUE_READERS = 20, EXECUTE AS N'dbo')
                  , POISON_MESSAGE_HANDLING (STATUS = ON) 
    
  4. プロシージャは、特定のコードと再起動可能なタイマーを実行して再度起動します。


MichałGołośによって記述された完全に完成したソリューション(T-SQL)を見つけることができますタスクスケジューラ

ブログのキーポイント:

長所:

  • 各バージョンでサポートされています(ExpressからEnterpriseまで)。 SQL Server ExpressではSQL Serverエージェントジョブを使用できません
  • データベースレベルにスコープされます。関連するタスクでデータベースを簡単に移動できます(特に、ある環境から別の環境に約100個のジョブを移動する必要がある場合)
  • タスクの表示/操作に必要な低い権限(データベースレベル)

提案された区別:

SQL Serverエージェント(メンテナンス):

  • バックアップ
  • インデックス/統計の再構築
  • 複製

タスクスケジューラ(ビジネスプロセス):

  • 古いデータを削除する
  • 事前集計/巡回再計算
  • 非正規化

設定方法:

  • セクションからソースコードを取得:「Do pobrania」-ダウンロードするには(ブローカーの有効化/スキーマtsk /設定テーブル+トリガー+ストアドプロシージャの設定)/ブローカーの設定)
  • 構成テーブルをセットアップする[tsks].[tsksx_task_scheduler]新しいタスクを追加します(列名は自己記述的で、サンプルタスクが含まれています)

警告:ブログはポーランド語で書かれていますが、関連するソースコードは英語であり、簡単にフォローできます。

警告2:使用する前に、非本番環境でテストしたことを確認してください。

4
Lukasz Szozda

Management Studioを使用して、ジョブ(SQL Serverエージェントなし)を作成できます。1つのジョブには、T-SQLスクリプトからSSISパッケージまでの複数のステップを含めることができます

Jebはもっと速かった;)

4
Bluenuance
3
Cade Roux