ジョブ・ステータス変更情報の受渡し

ジョブ・ステータス変更属性(新規ステータス、ジョブ名、ジョブ・タイプ、通知ルール、ルール所有者など)をPL/SQLプロシージャまたはOSコマンドやスクリプトに渡すことで、ステータス変更に対して自動化されたレスポンスをカスタマイズできます。たとえば、クリティカルなジョブの実行が失敗したときに、社内のサポート用トラブル・チケット・システムに関するトラブル・チケットを開くためにOSスクリプトをコールする場合があります。この場合、スクリプトに「問題」または「中断」などのステータスを渡してトラブル・チケットを開き、問題を重大化させる必要があります。

PL/SQLプロシージャへの情報の受渡し

通知システムは、MGMT_NOTIFY_JOBオブジェクトを介してジョブ・ステータス変更情報をPL/SQLプロシージャに渡します。このオブジェクトのインスタンスは、ステータス変更ごとに作成されます。ジョブがステータスを変更すると、通知システムは通知ルールに関連付けられているPL/SQLプロシージャをコールして、移入されたオブジェクトを渡します。これにより、プロシージャは渡されたMGMT_NOTIFY_JOBオブジェクトのフィールドにアクセスできます。

次の表に、受渡しできるすべてのジョブ・ステータスの変更属性を示します。

属性
データ型
追加情報

job_name

VARCHAR2(128)

ジョブ名

job_owner

VARCHAR2(256)

ジョブの所有者
job_type VARCHAR2(32) ジョブのタイプ

job_status

NUMBER

ジョブの新規ステータス

state_change_guid  

RAW(16)

状態変更レコードのGUID

job_guid

RAW(16)

ジョブの一意のID

execution_id

RAW(16)

実行の一意のID

targets

SMP_EMD_NVPAIR_ARRAY

ジョブが実行される対象のターゲット名/ターゲット・タイプのペアの配列

rule_owner

VARCHAR2(64)

通知が送信される原因となる通知ルールの名前。

rule_name

VARCHAR2(132)

通知が送信される原因となる通知ルールの所有者。

ジョブに対するジョブ・ステータス変更が発生すると、通知システムはMGMT_NOTIFY_JOBオブジェクトのインスタンスを作成し、ステータス変更の値を移入します。次のステータス・コードがMGMT_JOBSパッケージに制約として定義されています。これらのコードを使用すると、MGMT_NOTIFY_JOBオブジェクトのjob_statusフィールドのステータスのタイプを判別できます。

ジョブ・ステータス・コード

名前
データ型
値

SCHEDULED_STATUS

NUMBER(2)

1

EXECUTING_STATUS

NUMBER(2)

2

ABORTED_STATUS

NUMBER(2)

3

FAILED_STATUS

NUMBER(2)

4

COMPLETED_STATUS

NUMBER(2)

5

SUSPENDED_STATUS

NUMBER(2)

6

AGENTDOWN_STATUS

NUMBER(2)

7

STOPPED_STATUS

NUMBER(2)

8

SUSPENDED_LOCK_STATUS

NUMBER(2)

9

SUSPENDED_EVENT_STATUS

NUMBER(2)

10

SUSPENDED_BLACKOUT_STATUS

NUMBER(2)

11

STOP_PENDING_STATUS
NUMBER(2) 12
SUSPEND_PENDING_STATUS
NUMBER(2) 13
INACTIVE_STATUS
NUMBER(2) 14
QUEUED_STATUS
NUMBER(2) 15
FAILED_RETRIED_STATUS
NUMBER(2) 16
WAITING_STATUS
NUMBER(2) 17
SKIPPED_STATUS
NUMBER(2) 18
REASSIGNED_STATUS
NUMBER(2) 20

例: ステータス・コードを使用するPL/SQLプロシージャ

CREATE TABLE job_log (jobid RAW(16),
occured DATE);

PL/SQLプロシージャ

CREATE OR REPLACE PROCEDURE LOG_PROBLEM_JOBS(status_change IN MGMT_NOTIFY_JOB)
IS
BEGIN
-- すべての失敗したジョブをログ出力
IF status_change.job_status = MGMT_JOBS.FAILED_STATUS
THEN
BEGIN
INSERT INTO job_log (jobid, occured)
VALUES (status_change.job_guid, SYSDATE);
EXCEPTION
WHEN OTHERS
THEN
-- 問題が発生時に再試行の通知を取得する場合
RAISE_APPLICATION_ERROR(-20000, 'Please retry');
END;
COMMIT;
END IF;
END LOG_PROBLEM_JOBS;

PL/SQLプロシージャの使用方法

  1. 次のプロシージャ指定を使用して、リポジトリ・データベースにPL/SQLプロシージャを作成します。

    PROCEDURE p(status_change IN MGMT_NOTIFY_JOB)

    プロシージャの実行時にエラーが発生した場合、エラー・コード-20000を使用するユーザー定義例外を返すことによって、通知システムでプロシージャへの通知の送信を再試行できます。前述の例を参照してください。この再試行処理は最初1分後に行われ、2分後、3分後などのように続き、通知がパージされるポイントである1日後までそれが続きます。

  2. このPL/SQLプロシージャを、通知ルールでコールできる通知メソッドとして追加します。「PL/SQLプロシージャの追加」を参照してください。

    スキーマ所有者、パッケージ名およびプロシージャ名を含む完全修飾名を必ず使用してください。プロシージャはリポジトリ所有者によって実行されるため、リポジトリ所有者にプロシージャの実行権限があります。

  3. PL/SQLプロシージャを通知ルールに関連付けます。

OSスクリプトまたは実行可能ファイルへの情報の受渡し

通知システムは、システム環境変数を介してOSスクリプトまたは実行可能ファイルに重大度情報を渡します。環境変数へのアクセスに使用される表記規則は、オペレーティング・システムに応じて異なります。

通知システムは、スクリプトをコールする前に次の環境変数を設定します。

環境変数
説明

JOB_NAME

ジョブの名前

JOB_OWNER

ジョブの所有者

JOB_TYPE

ジョブのタイプ

JOB_STATUS

ジョブのステータス

TIMESTAMP

重大度が発生した時刻

NUM_TARGETS

ターゲットの数

TARGET_NAMEn
n番目のターゲットの名前(例: TARGET_NAME1、TARGET_NAME2)
TARGET_TYPEn
n番目のターゲットのタイプ(例: TARGET_TYPE1、TARGET_TYPE2)

RULE_NAME

重大度を発生させた通知ルールの名前。

RULE_OWNER

ルールを所有するEnterprise Manager管理者名。

スクリプトでは、これらの変数の一部またはすべてを参照できます。

OSスクリプトまたは実行可能ファイルの使用方法

 

関連トピック

Enterprise Managerの情報ロードマップ