我正在尝试通过dbms_scheduler运行一个过程但它刚刚创建但没有运行。 DataBase版本使用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;
/
答案 0 :(得分:3)
下面提到的一些可能的原因。 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;
如果这是问题,您可以使用
增加数字或将其清空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');
答案 1 :(得分:0)
SELECT JOB_NAME, STATE FROM DBA_SCHEDULER_JOBS WHERE JOB_NAME = 'partition_table_plapp2';
以上查询会告诉您工作的状态:已启用,已禁用,已安排
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