Oracle dbms_计划程序创建作业未运行作业
我正试图通过dbms_调度程序运行一个过程,但它只是被创建,而不是运行。数据库版本使用Oracle 11.2.x 程序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_
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为您提供的时间和答案