ホームページ >データベース >Oracle >Oracle でストアド プロシージャを定期的に実行する方法

Oracle でストアド プロシージャを定期的に実行する方法

PHPz
PHPzオリジナル
2023-04-18 14:09:074215ブラウズ

エンタープライズレベルのアプリケーションでは、必要な機能を実現するためにユーザーが手動で操作を実行することに依存することはできません。したがって、スケジュールされたタスクは不可欠であり、特にバックグラウンド処理とデータの読み込みを実行する場合に役立ちます。 Oracle データベースは、開発者と管理者の作業を簡素化するストアド プロシージャとスケジュールされたタスクを提供します。この記事では、Oracle のスケジュールされたタスクを使用してストアド プロシージャを定期的に実行する方法に焦点を当てます。

Oracle スケジュール済みタスク

Oracle データベース内のスケジュール済みタスクは、DBMS_SCHEDULER パッケージを使用して作成できます。このパッケージを使用すると、複雑なスケジュール要件を持つジョブを作成できます。時間ごと、日ごと、週ごと、月ごと、年ごとなど、さまざまな頻度をサポートできます。スケジュールされたタスクは、特定の日時に実行したり、異なるタイムゾーンで実行したりすることもできます。 DBMS_SCHEDULER パッケージを使用して、次のタイプのオブジェクトを作成できます。

  • ジョブ (ジョブ): DBMS_SCHEDULER.CREATE_JOB 関数の実行時に作成されるタスク単位。スケジューラによって定期的にまたはリクエストに応じてスケジュールされます。
  • ジョブ クラス: 同じリソース消費制限ルールを共有する関連タスクのグループ。
  • リソース消費制限: ジョブとジョブ クラスを制御するために使用されるリソース消費ルール。
  • チェーン: 1 つのジョブの完了が別のジョブの実行をトリガーする一連のジョブ。
  • セッション: ジョブの実行に関連付けられたプロセス。セッションをログに記録し、監視してジョブの実行を理解できます。

この記事では、DBMS_SCHEDULER を使用してジョブを作成し、それを実行するストアド プロシージャにバインドする方法に焦点を当てます。

ストアド プロシージャを作成する

まず、完了したいタスク操作を実行するストアド プロシージャを作成する必要があります。以下は、現在の時刻をテーブルに挿入するストアド プロシージャの簡単な例です。

CREATE OR REPLACE PROCEDURE INSERT_TIME
AS 
BEGIN
  INSERT INTO TIME_LOG (LOG_TIME) VALUES (SYSDATE);
  COMMIT;
END INSERT_TIME;

ジョブの作成

ストアド プロシージャを使用して、次にジョブを作成してその実行をスケジュールする必要があります。これから作成するジョブでは、毎朝 6 時に現在時刻が挿入されます。 DBMS_SCHEDULER.CREATE_JOB 関数を使用してこのジョブを作成する例を次に示します。

BEGIN
  DBMS_SCHEDULER.CREATE_JOB (
          job_name        => 'INSERT_TIME_JOB',
          job_type        => 'STORED_PROCEDURE',
          job_action      => 'INSERT_TIME',
          start_date      => SYSTIMESTAMP,
          repeat_interval => 'FREQ=DAILY; BYHOUR=6;',
          enabled         => TRUE,
          comments        => 'Insert current time every day at 6 AM');
END;

CREATE_JOB 関数を使用してジョブを作成する場合は、次のパラメーターの説明に従う必要があります。

  • job_name: ジョブの名前。一意である必要があります。
  • job_type: ジョブのタイプ。通常は「STORED_PROCEDURE」です。
  • job_action: ジョブによって実行されるストアド プロシージャ、パッケージ、または実行可能ファイルの名前。
  • start_date: ジョブの開始時刻。日付またはタイムスタンプを指定できます。指定しない場合、デフォルトで現在時刻が設定されます。
  • repeat_interval: ジョブの実行頻度と時間間隔を指定します。この例では、「FREQ=DAILY; BYHOUR=6;」は毎日朝6時に実行されることを意味します。他のオプションには、時間ごと、毎週、毎月、毎年などがあります。このパラメータを使用して、ジョブを実行する曜日 (毎週月曜日、火曜日、木曜日など) を指定することもできます。
  • enabled: ジョブが有効かどうかを示します。
  • コメント: 割り当ての簡単な説明。

ジョブをストアド プロシージャにバインドする

上記の例では、ジョブを作成し、その実行用のストアド プロシージャを指定しました。ここで、指定された時刻に操作が実行されるように、このジョブをストアド プロシージャにバインドする必要があります。 DBMS_SCHEDULER.SET_ATTRIBUTE 関数を使用して、このタスクを実行できます。

BEGIN
  DBMS_SCHEDULER.SET_ATTRIBUTE (
          name => 'INSERT_TIME_JOB',
          attribute => 'program_action',
          value => 'INSERT_TIME;');
END;

この例では、SET_ATTRIBUTE 関数を使用して、ジョブ「INSERT_TIME_JOB」の「program_action」属性を「INSERT_TIME」に設定します。これにより、特定の時間に INSERT_TIME ストアド プロシージャを呼び出すように DBMS_SCHEDULER に指示されます。

DBMS_SCHEDULER パッケージを使用して、スケジュールされたジョブを作成し、ストアド プロシージャでタスクをバインドする方法を学習しました。これで、スケジュールされたタスクが実行されるのを待って、TIME_LOG テーブル内のレコードを表示できます。

結論

Oracle データベースのスケジュールされたタスク機能を使用すると、バックグラウンド処理タスクを簡単に実行できます。 DBMS_SCHEDULER パッケージには、繰り返し実行、並列実行、障害回復など、特定のアプリケーションのニーズを満たすための多くのオプションが用意されています。さらに、さまざまなタイムゾーン、日付、週、月などにまたがってジョブを実行できるため、スケジュールされたタスクが非常に柔軟になります。この記事では、Oracle のスケジュールされたタスクを使用してストアド プロシージャを定期的に実行する方法に焦点を当てます。この記事が有益なガイダンスを提供し、Oracle データベースに基づいたスケジュールされたタスクの使用と操作の原則をより深く理解するのに役立つことを願っています。

以上がOracle でストアド プロシージャを定期的に実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。