2017-01-16 13 views

答えて

1

私は直接的な方法を知らないが、手順はあなたをすることができます実行しているときは、PL/SQLパッケージDBMS_APPLICATION_INFO

Procedure MY_Procedure is 
begin 

DBMS_APPLICATION_INFO.SET_MODULE('MY_Procedure', 'Starting'); 
... 

DBMS_APPLICATION_INFO.SET_ACTION('Still working, please be patient'); 
... 

DBMS_APPLICATION_INFO.SET_ACTION('Finished'); 

END; 

を使用することができ、いくつかの一定時間以上かかる場合も は、いくつかの操作を行うには

SELECT SID, serial#, username, module, action, sql_exec_start 
FROM v$session; 

必要に応じて、タイムスタンプや実行時間を設定することもできます(例: DBMS_APPLICATION_INFO.SET_ACTION('Started at '||systimestamp)

あなたが直接ジョブを監視し、停止することができスケジューラ・ジョブを使用して作業している場合:

BEGIN 
    DBMS_SCHEDULER.SET_ATTRIBUTE( 
     NAME  => 'MY_JOB', 
     ATTRIBUTE => 'MAX_RUN_DURATION', 
     VALUE  => INTERVAL '10' MINUTE); 
END; 

とコール頻繁にこの:このため

DECLARE 

    CURSOR Jobs IS 
    SELECT JOB_NAME, LAST_START_DATE, MAX_RUN_DURATION 
    FROM USER_SCHEDULER_JOBS 
    WHERE JOB_NAME = 'MY_JOB' 
     AND STATE = 'RUNNING' 
     AND SYSTIMESTAMP - LAST_START_DATE > MAX_RUN_DURATION; 

BEGIN 

    FOR aJob IN Jobs LOOP 
     DBMS_SCHEDULER.STOP_JOB('MY_JOB', FORCE => TRUE); 
    END LOOP; 

END; 
関連する問題