暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 无法运行已经创建的作业

askTom 2017-06-08
348

问题描述

嗨,汤姆,

我需要你帮忙修理这个。

我已经创建了应该在触发时调用shell脚本的作业。但不幸的是,我收到错误,因为test_job必须是一项工作。
以下是我用来创建作业的脚本。

如果我错过了这里的东西,请告诉我。

提前谢谢。


SYS>BEGIN
  2  DBMS_SCHEDULER.create_program
  3  (
program_name => 'test',
program_type => 'EXECUTABLE',
program_action => '/scripts/AUTOMATION/GENERIC_REFRESH_SCRIPT/mail.sh',
  4    5    6    7  number_of_arguments => 0,
enabled => TRUE,
  8    9  comments => 'Test Program'
);
 10   11  end;
/ 12

PL/SQL procedure successfully completed.


SYS>BEGIN
  DBMS_SCHEDULER.create_schedule (
  schedule_name => 'test_schedule',
  start_date => SYSTIMESTAMP,
  repeat_interval => NULL,
  end_date => NULL,
  comments => 'Test.');
END;
/
  2    3    4    5    6    7    8    9
PL/SQL procedure successfully completed.


SYS>BEGIN
DBMS_SCHEDULER.CREATE_JOB_CLASS (
   job_class_name             =>  'test_job_class'
);
END;
/  2    3    4    5    6

PL/SQL procedure successfully completed.


SYS>BEGIN
  2    DBMS_SCHEDULER.create_job (
  3    job_name => 'TEST_JOB',
  program_name => 'test',
  4    5    schedule_name => 'test_schedule',
  job_class => 'test_job_class',
  6    7    enabled => TRUE,
  8    comments => 'Job defined by an existing program and schedule and assigned toa job class.');
END;
  9   10  /

PL/SQL procedure successfully completed.

SYS>select JOB_NAME , STATE from dba_scheduler_jobs where JOB_NAME like 'TEST_JOB' or JOB_NAME like 'test_job';

no rows selected

SYS>BEGIN
  DBMS_SCHEDULER.RUN_JOB(
    JOB_NAME            => 'TEST_JOB',
    USE_CURRENT_SESSION => FALSE);
END;
/  2    3    4    5    6
BEGIN
*
ERROR at line 1:
ORA-27475: "SYS.TEST_JOB" must be a job
ORA-06512: at "SYS.DBMS_ISCHED", line 185
ORA-06512: at "SYS.DBMS_SCHEDULER", line 486
ORA-06512: at line 2
复制

亲切的问候,
赛莱什

专家解答

你没有在日程表中定义重复间隔!

这意味着作业将运行一次,然后自行丢弃。如果你查看user_scheduler_job_run_details,你应该看到你的作业刚刚运行:

begin
  dbms_scheduler.create_program(
    program_name          => 'test',
    program_type          => 'EXECUTABLE',
    program_action        => '/scripts/AUTOMATION/GENERIC_REFRESH_SCRIPT/mail.sh',
    number_of_arguments   => 0,
    enabled               => true,
    comments              => 'Test Program'
  );
end;
/

begin
  dbms_scheduler.create_schedule(
    schedule_name     => 'test_schedule',
    start_date        => systimestamp,
    repeat_interval   => null,
    end_date          => null,
    comments          => 'Test.'
  );
end;
/

begin
  dbms_scheduler.create_job_class(
    job_class_name   => 'test_job_class'
  );
end;
/

begin
  dbms_scheduler.create_job(
    job_name        => 'TEST_JOB',
    program_name    => 'test',
    schedule_name   => 'test_schedule',
    job_class       => 'test_job_class',
    enabled         => true,
    comments        => 'Job defined by an existing program and schedule and assigned toa job class.'

  );
end;
/

select * from (
select job_name, status from user_scheduler_job_run_details
order  by log_date desc
)
where  rownum = 1;

JOB_NAME  STATUS  
TEST_JOB  FAILED  
复制


如果你想让它留下来,你需要定义这个。或将其禁用,以便您可以在需要时启用并启动它。

begin
  dbms_scheduler.set_attribute(
    'test_schedule',
    'repeat_interval', 
    'FREQ=DAILY'
  );
end;
/

begin
  dbms_scheduler.create_job(
    job_name        => 'TEST_JOB',
    program_name    => 'test',
    schedule_name   => 'test_schedule',
    job_class       => 'test_job_class',
    enabled         => true,
    comments        => 'Job defined by an existing program and schedule and assigned toa job class.'

  );
end;
/

select job_name, next_run_date
from dba_scheduler_jobs
where job_name like 'TEST_JOB'
  or job_name like 'test_job';

JOB_NAME  NEXT_RUN_DATE                       
TEST_JOB  10-JUN-2017 01.56.27.800000000 -07
复制

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论