2012-03-23 4 views
0

Oracle 11.2データベースにテーブルがあります。私は、テーブル1の特定のセルが1の値に更新され、テーブル2の既存の行の数が0より大きい場合、データベースにリモートサーバ上の実行可能ファイルを実行させたい。これを達成するためには、以下のことが可能ですか?初心者Oracleスケジューラを使用してイベントに基づいてジョブを開始する

  1. Oracle Schedulerを使用してジョブを作成します。ジョブはすぐに実行され、リモートサーバー上で外部実行可能プログラムを実行するために使用されます。ジョブは存在しますが、下のステップ5まで実行されません(これは可能ですか?)。 http://docs.oracle.com/cd/E11882_01/server.112/e17120/schedadmin001.htm#BAJHIDDC

  2. UPDATEステートメントで起動するテーブルの列にDMLトリガを添付します。表1に、特定のセルが1に等しい場合、ANDの数場合: http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/triggers.htm#CIHEHBEB

  3. はトリガーが、PL/SQLサブプログラムで http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/triggers.htm#CIHEGACF

  4. PL/SQLサブプログラムを起動し、次のビジネスロジックを実行してい表2の行が0より大きい場合は手順5に進み、そうでない場合は停止(終了、終了)します。仕事/スケジューラは、この機能を提供するために行われていない場合

  5. は、ステップ1

内のジョブを実行したり、同じことを達成するための別の方法は何ですか?つまり、データベーステーブルを変更して外部ジョブをトリガーします。

UPDATE 1:

それだけでパラメータevent_conditionを使用してDBMS_SCHEDULER.CREATE_JOBとOracleのスケジューラを使用することにより、上記1-5のステップを実施することが可能ですかしら?

http://docs.oracle.com/cd/E11882_01/server.112/e25494/scheduse005.htm#CHDIAJEB

ここで、上記のリンクの例は次のとおり

BEGIN 
DBMS_SCHEDULER.CREATE_JOB (
    job_name   => 'process_lowinv_j1', 
    program_name  => 'process_lowinv_p1', 
    event_condition  => 'tab.user_data.event_type = ''LOW_INVENTORY''', 
    queue_spec   => 'inv_events_q, inv_agent1', 
    enabled    => TRUE, 
    comments   => 'Start an inventory replenishment job'); 
END; 

上記のコードは、アプリケーションがアイテムの在庫レベルが低閾値まで低下したことをスケジューラに信号を送るときに開始するジョブを作成しレベル。

上記のコードを何らかの形で修正して、目的の手順を実行できますか?たとえば、ここではevent_conditionを代わりに使用して、上記のステップ2〜4を省略できますか?もしそうなら、たとえば、queue_specの設定方法はどうでしょうか?

答えて

2

リモート・サーバーにOracle Scheduler Agentをインストールすると、DBMS_SCHEDULERはリモート・マシン上で実行可能ファイルを実行できます。 DMLトリガーでOracle Advanced Queue(AQ)にメッセージをエンキューし、そのキューを使用してevent-based jobを作成します(DMLトリガーはトランザクションをコミットまたはロールバックできませんが、DBMS_SCHEDULERジョブを実行すると暗黙的にコミットが発行されるためDMLトリガーは実行できません)。ジョブを直接実行する)。イベントベースのジョブとリモート実行可能ファイルを実行するジョブは、job chainの一部になります。

+0

ありがとうJustin、はい、リモートサーバーにエージェントを配置する予定でした。上記の説明に従っているかどうかはわかりません(プロセスはかなり複雑です)。上記のアップデート1を参照してください。これは、使用できる場合には私が従う/実装する方が簡単かもしれません。 – ggkmath

関連する問題