文章出自以下两个地方,进行整理.
1. 创建ORACLE JOB : http://www.cnblogs.com/conqueror/archive/2010/10/10/1847085.html .
2. oracle job中时间间隔设置 : http://www.2cto.com/database/201208/145035.html .
一. 创建ORACLE JOB
oracle job简介
主要的使用情景
定时在后台执行相关操作:如每天晚上0点将一张表的数据保存到另一张表中,2:定时备份数据库等
俗话说万事开头难,这里我只简单记述一个创建一个简单的job
步骤如下:
1、创建一张表g_test
create table G_TEST ( ID NUMBER(12), C_DATE DATE ) ;
2、创建一个sequence
create sequence G_SEQ minvalue 1 maxvalue 999999999999999999999999999 start with 141 increment by 1 cache 20;
3、创建一个存储过程
create or replace procedure prc_g_test is begin insert into g_test values(g_seq.nextval,sysdate); end prc_g_test;
4、创建job
使用Submit()过程,工作被正常地计划好。
这个过程有五个参数:job、what、next_date、interval与no_parse。
PROCEDURE Submit ( job OUT binary_ineger, What IN varchar2, next_date IN date, interval IN varchar2, no_parse IN booean:=FALSE)
job参数 : 是由Submit()过程返回的binary_ineger。这个值用来唯一标识一个工作。
what参数 : 是将被执行的PL/SQL代码块。
next_date参数 : 指识何时将运行这个工作。
interval参数 : 何时这个工作将被重执行。
no_parse参数 : 指示此工作在提交时或执行时是否应进行语法分析——TRUE
指示此PL/SQL代码在它第一次执行时应进行语法分析,
而FALSE指示本PL/SQL代码应立即进行语法分析。
在command window窗口中执行下面脚本:
variable job number; begin sys.dbms_job.submit(job => :job, what => 'prc_g_test;', next_date => to_date('22-10-2008 10:06:41', 'dd-mm-yyyy hh24:mi:ss'), interval => 'sysdate+1/1440');--每天1440分钟,即一分钟运行test过程一次 commit; end; /
在plSQL中我的做法是:
declare job number; begin sys.dbms_job.submit(job,'prc_g_test;',sysdate,'sysdate+1/1440'); end;
5、查看创建的job
查看相关job信息
相关视图
dba_jobs
all_jobs
user_jobs
dba_jobs_running 包含正在运行job相关信息。
如:
select * from dba_jobs
6、运行JOB
说明:Run()过程用来立即执行一个指定的工作。这个过程只接收一个参数:
begin dbms_job.run(:job); end; /
在plSQL中我的做法是:
begin dbms_job.run(3017); end;
7、删除JOB
begin dbms_job.remove(:job);--:job可以用dba_jobs.job的值代替如:1198 end; /
说明:在sqlplus命令行直接定义变量要variable!!!!
二. oracle job中时间间隔设置
=========================================== 字段(列) 类型 描述 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 任务运行连续没有成功的次数 www.2cto.com 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)'