簡體   English   中英

使用oracle Scheduler調度時的Sql過程

[英]Pl Sql Procedure handle exception while scheduled using oracle scheduler

我已經編寫了一個將使用Oracle調度程序進行調度的過程,並且正在嘗試使用以下異常塊來處理異常:

EXCEPTION
   WHEN OTHERS THEN
      raise_application_error(-20001,'An error was encountered - '
      || SQLCODE || ' -ERROR- ' || SQLERRM);
END;

我還想確定是否使用我的上述支持團隊或DBA,以防萬一發生任何異常,他們可以采取適當的措施,並且所有事務都應回滾。

如果導致異常阻止的唯一原因是通知支持團隊-不要這樣做,因為它完全是多余的。

Oracle在視圖XX_SCHEDULER_JOB_RUNS / XX_SCHEDULER_JOB_RUN_DETAILS記錄每個作業運行的結果,其中XX是DBA / ALL / USER (用戶包含當前登錄用戶的所有運行,所有包含當前登錄用戶的所有運行可以看到,DBA(需要特殊特權)包含數據庫中的所有運行。

因此,您的支持團隊所需要做的就是監視XX_SCHEDULER_JOB_RUN_DETAILS並檢查狀態為FAILURE所有條目。

創建一個總是失敗的作業,然后運行一次:

begin
  dbms_scheduler.create_job(
      job_name => 'JOB_RAISE_DEMO'
     ,job_type => 'PLSQL_BLOCK'
     ,job_action => 'begin raise_application_error(-20001, ''custom error''); end; '

     ,start_date      => to_timestamp_tz('2015-11-20 13:00:00 Europe/Berlin',
                                         'yyyy-mm-dd hh24:mi:ss tzr')
     ,repeat_interval => null
     ,enabled => TRUE
     ,auto_drop => false);
end;

begin
  dbms_scheduler.run_job('JOB_RAISE_DEMO', use_current_session => false);
end;

然后,檢查作業狀態:

select log_date, job_name, status, error# 
from user_scheduler_job_run_details 
where job_name = 'JOB_RAISE_DEMO';

返回:

LOG_DATE                        JOB_NAME        STATUS  ERROR#
20.11.15 12:35:53,516000 +01:00 JOB_RAISE_DEMO  FAILED  20001

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM