【问题标题】:dbms_scheduler Create Job Not running Jobdbms_scheduler 创建作业 未运行作业
【发布时间】:2018-02-01 07:27:42
【问题描述】:

我正在尝试通过 dbms_scheduler 运行一个过程,但它只是被创建但没有运行。使用的数据库版本 Oracle 11.2.x

程序

create or replace procedure count_comp
as
Total_count number;
begin
select count(*) into Total_count from user_tables;
dbms_output.put_line('Number   '|| Total_count);
end;

创建工作

BEGIN
DBMS_SCHEDULER.CREATE_JOB (
        job_name => 'My_Count_Job',
        job_type => 'STORED_PROCEDURE',
        job_action => 'count_comp',
        start_date => '28-APR-08 07.00.00 PM Asia/Calcutta',
        repeat_interval => 'FREQ=DAILY;INTERVAL=2', /* every other day */
        auto_drop => FALSE,
        enabled =>TRUE,
        comments => 'My new job');
END;
/

【问题讨论】:

  • 您确定它没有运行,还是您希望它的输出出现在某个地方?输出将永远不会被任何人看到。
  • @Tony Andrews 是的,我们可以通过 select * from dba_SCHEDULER_JOB_LOGS 进行检查。
  • 请尝试运行并发布输出:SELECT job_name, enabled, state, start_date FROM user_scheduler_jobs where job_name = 'My_Count_Job';
  • 如果你的程序是有效的,这不会有什么坏处。您不妨修复程序的错误:user_table 应该是 user_tables.putline 应该是 put_line。

标签: oracle oracle11g


【解决方案1】:

一些可能的原因如下所述。 job_queue_processes 可能太低 检查执行下面的查询 从 v$parameter 中选择值,其中 name='job_queue_processes';

然后查看正在运行的作业数

select count(*) from dba_scheduler_running_jobs;
select count(*) from dba_jobs_running;

如果这是问题,您可以使用增加参数

alter system set job_queue_processes=1000;

2) max_job_slave_processes 可能太低 如果此参数不为 NULL,则它限制了 dbms_scheduler 作业的数量 一次运行。检查w

select value from dba_scheduler_global_attribute
where attribute_name='MAX_JOB_SLAVE_PROCESSES';

然后查看正在运行的作业数

select count(*) from dba_scheduler_running_jobs;

如果这是问题,您可以增加数字或使用 NULL 将其清空

exec dbms_scheduler.set_scheduler_attribute('max_job_slave_processes',null)

3) 会话数可能太低

4) 检查调度器是否被禁用

select value from dba_scheduler_global_attribute where attribute_name='SCHEDULER_DISABLED'

如果此查询返回 TRUE,那么您可以使用以下方法解决此问题 SQL>exec dbms_scheduler.set_scheduler_attribute('scheduler_disabled','false');

【讨论】:

  • Job_queue_processes 为 0,所以我对其进行了更改并且它起作用了。感谢@nitin.sharma0180 的时间和回答
【解决方案2】:
SELECT JOB_NAME, STATE FROM DBA_SCHEDULER_JOBS WHERE JOB_NAME = 'partition_table_plapp2';

上面的查询会告诉你你的 Job 的状态:ENABLED、DISABLED、SCHEDULED

select JOB_NAME, STATUS, ERROR#, ADDITIONAL_INFO from ALL_SCHEDULER_JOB_RUN_DETAILS where job_name = 'partition_table' ;

上面的查询会告诉你在运行你的工作时出了什么问题。

一旦您发现您的工作存在什么问题,我们就可以进一步调查。

如果您使用 sqldeveloper (sql developer) 创建和调度 DBMS_SCHEDULER (dbms scheduler) 作业,我建议您浏览此页面:http://www.opencodez.com/oracle/oracle-job-scheduler-guide-examples-part-1.htm

【讨论】:

    猜你喜欢
    • 2014-11-24
    • 2018-02-17
    • 2012-12-10
    • 2012-01-20
    • 2016-08-04
    • 2017-01-31
    • 2021-05-18
    • 2021-01-21
    • 2012-01-20
    相关资源
    最近更新 更多