2017-05-03 8 views
0

DBMSスケジューラを使用して毎晩1amで実行されるデータベース上のジョブを持っています。スケジュールされたジョブを手動で実行しています。 LAST_RUN_DATEは更新されません

私はいつでも手動でジョブを実行できるようにしたいと思います。

私は私が DBA_SCHEDULER_JOBSで仕事を探すときしかし LAST_RUN_DATE列はまだ唯一の仕事その日付を保持している、これはすべて正常に動作し、ジョブが実行さん

execute dbms_scheduler.run_job('JOB_NAME'); 

を実行することにより、これを行います私は手動でそれを実行したときではなく、(午前1時)スケジューラから最後に実行されました。これは誰にも意味があるのですか?ジョブを実行した最後の時間を取得できるようにして、ユーザーが実行中であることを示すことができます。

これは、周りの私の仕事は最後の日付を取得するには、これを使用することですが、それはないと思える

SELECT LAST_START_DATE 
    FROM DBA_SCHEDULER_JOBS 
WHERE job_name='JOB_NAME'; 

、私はLAST_RUN_DATEを探していますクエリです:

select log_date, job_name, status, run_duration 
    from dba_scheduler_job_run_details 
where job_name='JOB_NAME' 
+0

「これは正しくないと思われます」:詳しく教えてください。 –

答えて

2

dbms_scheduler.run_jobのオプションのパラメータuse_current_sessionは、省略時にはTRUEに設定されています。

execute dbms_scheduler.run_job('JOB_NAME', use_current_session => false); 

ただし、このパラメータを設定することによって、結果として他の副作用を持っていることがあります。このパラメータをFALSEに設定すると、last_start_dateを更新します。詳細は、ご使用のOracleのバージョンに関するOracleのドキュメントを参照してください。

12.1 docs(強調鉱山):

use_current_session:

これは、ジョブの実行が手順がfrom.Theジョブはいつものように実行される呼び出されたのと同じ セッションで発生するかどうかを指定しますジョブ所有者のジョブ所有者の が指定されている場合を除き、ジョブ所有者のスキーマでは、ジョブは信任状で指定されたユーザーを使用して実行されます。 use_current_sessionをTRUEに設定した場合

あなたは仕事をテストして、コマンドライン上の任意の可能なエラーを見ることができます。

* run_count、last_start_date、last_run_duration、および * _scheduler_jobsのfailure_countは更新されません。

RUN_JOBは、定期的にスケジュールされたジョブの実行と並行して実行できます。

use_current_sessionがFALSEに設定されている場合:

あなたは、エラー情報を見つけるために、ジョブ・ログをチェックする必要があります。 関連するすべての * _scheduler_jobsのフィールドが更新されます。定期的に スケジュールされたジョブが実行されている場合、RUN_JOBは失敗します。

+0

ありがとうございます。これはまさに私が探していたものです。 – kev670

関連する問題