PL/SQLプロシージャへのジョブ実行ステータスの受渡し
通知システムは、event_typeがjob_status_changeと等しいevent_msg.event_payloadオブジェクトを介してPL/SQLプロシージャにジョブ・ステータス変更情報を渡します。このオブジェクトのインスタンスは、ステータス変更ごとに作成されます。ジョブがステータスを変更すると、通知システムはインシデント・ルールに関連付けられているPL/SQL p(event_msg IN gc$notif_event_msg)プロシージャをコールして、移入されたオブジェクトをプロシージャに渡します。これにより、プロシージャは渡されたevent_msg.event_payloadオブジェクトのフィールドにアクセスできます。
表6-15に、受渡し可能なすべての修正処理ステータス変更の属性を示します。
表6-15 ジョブ・ステータス属性
| 属性 | データ型 | 詳細情報 |
|---|---|---|
|
event_msg.event_payload.source.source_name |
VARCHAR2(128) |
ジョブの名前。 |
|
event_msg.event_payload.source.source_owner |
VARCHAR2(256) |
ジョブの所有者。 |
|
event_msg.event_payload.source.source_sub_type |
VARCHAR2(32) |
ジョブのタイプ。 |
|
event_attrs(i).name=' execution_status'のevent_msg.event_payload. event_attrs(i).value |
NUMBER |
ジョブの新しいステータス。 |
|
event_attrs(i).name='state_change_guid'のevent_msg.event_payload. event_attrs(i).value |
RAW(16) |
状態変更レコードのGUID。 |
|
event_msg.event_payload.source.source_guid |
RAW(16) |
ジョブの一意のID。 |
|
event_attrs(i).name=' execution_id'のevent_msg target.event_payload. event_attrs(i).value |
RAW(16) |
実行の一意のID。 |
|
event_msg.event_payload.target |
gc$notif_target |
ターゲット情報オブジェクト。 |
|
event_msg.msg_info.rule_owner |
VARCHAR2(64) |
通知の送信を誘発する通知ルールの名前。 |
|
event_msg.msg_info.rule_name |
VARCHAR2(132) |
通知の送信を誘発する通知ルールの所有者。 |
|
event_msg.event_payload. reported_date |
DATE |
ステータス変更が発生した日時。 |
ジョブのジョブ・ステータス変更が発生すると、通知システムはevent_attrs(i).name=' execution_status'のevent_msg.event_payload. event_attrs(i).valueオブジェクトのインスタンスを作成し、ステータス変更の値を移入します。次のステータス・コードは、MGMT_JOBSパッケージに定数として定義され、event_attrs(i).name=' execution_status'のevent_msg.event_payload. event_attrs(i).valueオブジェクトのjob_statusフィールドのステータス・タイプを判断するために使用できます。
表6-16 ジョブ・ステータス・コード
| 名前 | データ型 | 値 |
|---|---|---|
|
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 |
例6-16 ステータス・コード(Job)を使用するPL/SQLプロシージャ
CREATE TABLE job_log (jobid RAW(16), status_code NUMBER(2), occured DATE);
CREATE OR REPLACE PROCEDURE LOG_JOB_STATUS_CHANGE(event_msg IN GC$NOTIF_EVENT_MSG)
IS
l_attrs gc$notif_event_attr_array;
exec_status_code NUMBER(2) := NULL;
occured_date DATE := NULL;
job_guid RAW(16) := NULL;
BEGIN
IF event_msg.event_payload.event_type = 'job_status_change'
THEN
l_attrs := event_msg.event_payload.event_attrs;
IF l_attrs IS NOT NULL
THEN
FOR i IN 1..l_attrs.COUNT
LOOP
IF l_attrs(i).name = 'exec_status_code'
THEN
exec_status_code := TO_NUMBER(l_attrs(i).value);
END IF;
END LOOP;
END IF;
occured_date := event_msg.event_payload.reported_date;
job_guid := event_msg.event_payload.source.source_guid;
-- Log all jobs' status
BEGIN
INSERT INTO job_log (jobid, status_code, occured)
VALUES (job_guid, exec_status_code, occured_date);
EXCEPTION
WHEN OTHERS
THEN
-- If there are any problems then get the notification retried
RAISE_APPLICATION_ERROR(-20000, 'Please retry');
END;
COMMIT;
ELSE
null; -- it is not a job_status_change event, ignore
END IF;
END LOG_JOB_STATUS_CHANGE;
/