Oracle job定时操作

一、ORACLE JOB概述

定时在后台执行相关操作。

例如:每天晚上点将一张表的数据保存到另一张表中;定时备份数据库等操作。

二、创建ORACLE JOB

1、  创建表

/*1、创建表*/

create table job_table(

       j_id number(12),

       j_date date

)

2、  创建序列

/*2、创建序列*/

create sequence job_seq

minvalue 1 maxvalue 999999999999 start with 1 increment by 1;

3、  创建过程

/*3、创建存储过程*/

create or replace procedure job_pro

            is

            begin

                   insert into system.job_table values(job_seq.nextval,sysdate);

 end;

4、  创建job

declare job number;

begin

                         sys.dbms_job.submit(job => job,

                      what => 'job_pro;',

              next_date => to_date('13-07-2011 00:01:00',

'dd-mm-yyyy hh24:mi:ss'),

                      interval => 'trunc(sysdate)+1+1/1440');

               commit;

end;


注:pl/sql 创建DBMS_JOB时 job =:> job这里会有一个冒号,执行sql时会提示 “并非所有变量都已绑定”,去掉即可。 这里的Job 要与 declare job number名字一致

5、删除job

begin
  dbms_job.remove(1);
  commit;
  end;

说明:1 为 job查询列表  select * from user_jobs;     中的id编号,删除后必须提交事务才能彻底删除。

6、停止job(不能立即停止job)

begin
  dbms_job.broken(1,true);
  commit;
  end;

 说明:1 为 job查询列表  select * from user_jobs;  中的id编号。

   7、  select * from user_jobs;可以查询所有的job状态。


            代码讲解:

            job:该参数是工作号(由submit()过程返回的binary_integer),它在问题中唯一标识工作。

            what: 可以理解为,具体要做的操作,这里指向一个存储过程。

            next_date:该参数指示何时此操作被执行。

            interval:该参数指示一个工作重复执行的频度。

            no_parse:该蚕食指示此工作在提交时或执行时是否应进行语法分析,TRUE:标识第一次执行时进行语法分析;FALSE:指示立即进行语法分析



三、详细参数说明及日期格式定义:

DBA_JOBS
===========================================
字段(列) 类型 描述

JOB NUMBER 任务的唯一标示号

LOG_USER VARCHAR2(30) 提交任务的用户

PRIV_USER VARCHAR2(30) 赋予任务权限的用户

SCHEMA_USER VARCHAR2(30) 对任务作语法分析的用户模式

LAST_DATE DATE 最后一次成功运行任务的时间

LAST_SEC VARCHAR2(8) 如HH24:MM:SS格式的last_date日期的小时,分钟和秒

THIS_DATE DATE 正在运行任务的开始时间,如果没有运行任务则为null

THIS_SEC VARCHAR2(8) 如HH24:MM:SS格式的this_date日期的小时,分钟和秒

NEXT_DATE DATE 下一次定时运行任务的时间

NEXT_SEC VARCHAR2(8) 如HH24:MM:SS格式的next_date日期的小时,分钟和秒

TOTAL_TIME NUMBER 该任务运行所需要的总时间,单位为秒

BROKEN VARCHAR2(1) 标志参数,Y标示任务中断,以后不会运行

INTERVAL VARCHAR2(200) 用于计算下一运行时间的表达式

FAILURES NUMBER 任务运行连续没有成功的次数

WHAT VARCHAR2(2000) 执行任务的PL/SQL块,比喻触发器,存储过程等等

CURRENT_SESSION_LABEL RAW MLSLABEL 该任务的信任Oracle会话符

CLEARANCE_HI RAW MLSLABEL 该任务可信任的Oracle最大间隙

CLEARANCE_LO RAW MLSLABEL 该任务可信任的Oracle最小间隙

NLS_ENV VARCHAR2(2000) 任务运行的NLS会话设置

MISC_ENV RAW(32) 任务运行的其他一些会话参数

描述 INTERVAL参数值

每天午夜12点 'TRUNC(SYSDATE + 1)'

每天早上8点30分 'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)'

每星期二中午12点 'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24'

每个月第一天的午夜12点 'TRUNC(LAST_DAY(SYSDATE ) + 1)'

每个季度最后一天的晚上11点 'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24'

每星期六和日早上6点10分 'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)' 


四、dbms_job package包含以下过程:


 ·Broken()过程;

·change()过程;

·interval()过程;

·isubmit()过程;

·next_date()过程;

·remove()过程;

·run()过程;

·submit()过程;

·user_export()过程;

·what()过程;


五、创建JOB遇到的几个问题

问题1:

如果在job => job, 这里,改成“job => :job,”,oracle则会报“并非所有变量都已绑定”异常。声明了变量后,请把这个冒号去掉!

问题2:

存储过程 创建失败了。






 

阅读更多

没有更多推荐了,返回首页