客户希望能定期自动执行一些处理,大概是1分钟执行一次。我已经写好了一个存储过程,我想问问,怎么才能让这存储过程定期的自动执行呢?最好那位能提供一个脚本,只要客户自己执行一下,就可以完成定期自动执行的功能。补充一点,如果实现这样的功能,会对数据库的性能带来什么影响么?

解决方案 »

  1.   

    1 用job或Scheduler,10g建议后者。
    2 定时影响不大,主要看你的存储过程的影响
      

  2.   

    1楼说的对,使用OEM设定就行了。
      

  3.   

    begin
      sys.dbms_job.submit(job => :job,
                          what => 'up_jobpptn;',
                          next_date => to_date('29-12-2007 17:33:14', 'dd-mm-yyyy hh24:mi:ss'),
                          interval => 'SYSDATE+1/720');
      commit;
    end;
    /720=(24*60)/2也就是说两分钟运行一次比如1/24就是说一小时运行一次。。
      

  4.   

    BEGIN
    sys.dbms_scheduler.create_job(
    job_name => '"SYS"."MY_JOB"',
    job_type => 'EXECUTABLE',
    job_action => '/home/oracle/my_exec.sh',
    repeat_interval => 'FREQ=MINUTELY',
    start_date => systimestamp at time zone '+8:00',
    job_class => 'DEFAULT_JOB_CLASS',
    auto_drop => FALSE,
    enabled => FALSE);
    sys.dbms_scheduler.set_attribute( name => '"SYS"."MY_JOB"', attribute => 'job_priority', value => 2);
    sys.dbms_scheduler.enable( '"SYS"."MY_JOB"' );
    END;这个是用户SYS的调度作业。
    MY_JOB是调度作业名称,你自己定义的。
    /home/oracle/my_exec.sh 是要运行的脚本。你也可以用OEM操作,也很简单:
    数据库实例-》管理-》作业(数据库调度程序)-》创建
    在命令类型选项里选择“可执行文件”,然后定义调度,保存就可以了。