Oracle dbms_计划程序创建作业未运行作业

Oracle dbms_计划程序创建作业未运行作业,oracle,oracle11g,Oracle,Oracle11g,我正试图通过dbms_调度程序运行一个过程,但它只是被创建,而不是运行。数据库版本使用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_

我正试图通过dbms_调度程序运行一个过程,但它只是被创建,而不是运行。数据库版本使用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;
/

一些可能的原因如下所述。 作业队列进程可能太低 要检查,请执行下面的查询 从v$参数中选择值,其中name='job_queue_processes'

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

select count(*) from dba_scheduler_running_jobs;
select count(*) from dba_jobs_running;
select count(*) from dba_scheduler_running_jobs;
如果这是问题所在,您可以使用

alter system set job_queue_processes=1000;
2) 最大\u作业\u从\u进程可能太低 如果此参数不为NULL,则会限制可以执行的dbms_调度程序作业的数量 一次跑一次。检查w

select value from dba_scheduler_global_attribute
where attribute_name='MAX_JOB_SLAVE_PROCESSES';
然后检查正在运行的作业数

select count(*) from dba_scheduler_running_jobs;
select count(*) from dba_jobs_running;
select count(*) from dba_scheduler_running_jobs;
如果这是一个问题,您可以增加该数字或使用

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_属性('scheduler_disabled','false')

上述查询将告诉您作业的状态:已启用、已禁用、已计划

select JOB_NAME, STATUS, ERROR#, ADDITIONAL_INFO from ALL_SCHEDULER_JOB_RUN_DETAILS where job_name = 'partition_table' ;
上面的查询将告诉您在运行作业时出现了什么问题

一旦你发现你的工作有什么问题,我们可以进一步调查


如果您正在使用sqldeveloper(sql developer)创建和调度DBMS_调度程序(DBMS调度程序)作业,我建议您浏览此页面:

您是否确定它没有运行,或者您是否希望它的输出出现在某个地方?任何人都不会看到输出。@Tony Andrews是的,我们可以通过dba_调度程序_作业_日志中的select*进行检查。请尝试运行此命令并发布输出:
select JOB_name,enabled,state,start_date from user_SCHEDULER_jobs,其中JOB_name='My_Count_JOB'如果您的过程是有效的,则不会有任何影响。您还可以修复过程的错误:
user\u table
应该是
user\u tables
putline
应该是
put\u line
。作业队列\u进程为0,所以我对其进行了更改,它成功了。感谢@nitin.sharma0180为您提供的时间和答案