需要查询来查找特定 Oracle 作业上次运行的当前状态

问题描述 投票:0回答:1

我想要一个可以运行的查询来查找特定 Oracle 作业上次运行的状态。考虑下面的过程,然后使用

dbms_job.submit
命令调用。

CREATE OR REPLACE PROCEDURE USER1.fake_do_mv_refresh (
        p_sleep_secs int,
        p_user    VARCHAR2,
        p_cm_r_pm VARCHAR2 DEFAULT 'CM'
    )
AS
fake_error EXCEPTION;
BEGIN
  DBMS_LOCK.SLEEP(p_sleep_secs);
    raise fake_error;
    --INSERT INTO FDS_APPS.MSG VALUES (p_cm_r_pm, current_timestamp);
    --commit;
END fake_do_mv_refresh;
/
---------------------------------------------------
--Call the above procedure  with dbms_job.submit
---------------------------------------------------

DECLARE
l_jobid int := -1;
l_what varchar2(1000) := 'ok';
p_user varchar(10) := 'USER1';
p_cm_r_pm varchar(2) := 'CM';
p_sleep_secs int := 60;
BEGIN
  
    l_what :=  'USER1.fake_Do_mv_refresh(' || p_sleep_secs || ',''' || p_user  || ''',''' || p_cm_r_pm || ''');';    
    dbms_output.put_line(l_what);

    dbms_job.submit(job => l_jobid, what => l_what);
    dbms_output.put_line(l_jobid);
 
    COMMIT;
 
END;

-- Try to Find the job

select * FROM DBA_SCHEDULER_RUNNING_JOBS -- Shows the job while it is running 
select * FROM DBA_JOBS; --The "WHAT" column is useful in locating a particular job but this view, too, only seems to returns the job while it is running!
select * FROM all_scheduler_job_run_details order by log_date desc; --This view shows the job but with not column that contains identifiable info like the WHAT column above

令我惊讶的是,all_scheduler_job_run_details 视图没有为我提供更多信息来识别已提交的作业,而且它提供的内容,我无法关联到另一个表,例如 DBA_JOBS 表,该表确实有一个有用的 WHAT 列,但是后一个视图似乎只显示正在运行的作业...

关于如何编写 SQL 来获取此类型最后提交的作业的状态有什么建议吗?

oracle plsql
1个回答
0
投票

当您使用

dbms_job
创建旧作业而不是使用更新、更好的替代品
dbms_scheduler
时,Oracle 实际上会创建一个新的调度程序作业,您可以通过旧作业
dbms_job
作为一种包装器来控制该作业。调度程序中使用的实际作业名称 (
dba_scheduler_jobs
) 是使用旧版
job
(来自
dba_jobs
)进行系统命名的。

我建议不要再使用

dbms_job
来做任何事情。使用
dbms_scheduler
创建您的作业,以便您可以给它们起好名字并更轻松地使用它们,并具有新引擎提供的所有灵活性。

© www.soinside.com 2019 - 2024. All rights reserved.