oracle定时任务
oracle数据库定时任务dbms_job的用法详解

oracle数据库定时任务dbms_job的⽤法详解⼀、dbms_job涉及到的知识点1、创建job:variable jobno number;dbms_job.submit(:jobno, —-job号'your_procedure;',—-执⾏的存储过程, ';'不能省略next_date, —-下次执⾏时间'interval' —-每次间隔时间,interval以天为单位);–系统会⾃动分配⼀个任务号jobno。
2、删除job: dbms_job.remove(jobno);3、修改要执⾏的操作: job:dbms_job.what(jobno, what);4、修改下次执⾏时间:dbms_job.next_date(jobno, next_date);5、修改间隔时间:dbms_job.interval(jobno, interval);6、启动job: dbms_job.run(jobno);7、停⽌job: dbms.broken(jobno, broken, nextdate); –broken为boolean值⼆、初始化相关参数job_queue_processes1、job_queue_process表⽰oracle能够并发的job的数量,当job_queue_process值为0时表⽰全部停⽌oracle的job。
2、查看job_queue_processes参数⽅法⼀:show parameter job_queue_process;⽅法⼆:select * from v$parameter where name='job_queue_processes';3、修改job_queue_processes参数alter system set job_queue_processes = 10;三、user_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 正在运⾏任务的开始时间,如果没有运⾏任务则为nullthis_sec varchar2(8) 如hh24:mm:ss格式的this_date⽇期的⼩时,分钟和秒next_date date 下⼀次定时运⾏任务的时间以下使⽤⼀个案例来演⽰dbms_job的使⽤⼀、在plsql中创建表:create table t(id varchar2(30),name varchar2(30));⼆、在plsql中创建存储过程:create or replace procedure proce_t isbegininsert into t(id, name) values('1', to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss'));commit;end proce_t;/三、创建job任务(1分钟执⾏⼀次):在sql>后执⾏:variable jobno number;begindbms_job.submit(:jobno,'proce_t;', sysdate, 'sysdate+1/24/60');commit;end;/提交后提⽰:pl/sql procedure successfully completedjobno---------25四、跟踪任务的情况(查看任务队列):sql> select job, next_date, next_sec, failures, broken from user_jobs;job next_date next_sec failures broken---------- ----------- ---------------- ---------- ------25 2012/9/14 1 10:59:46 0 n说明任务已创建成功。
oracle 作业计划

oracle 作业计划
Oracle作业计划是指在Oracle数据库中安排和管理定期执行
的任务或作业。
这些作业可以是数据库维护任务、数据备份任务、
报表生成任务等。
以下是关于Oracle作业计划的一些方面的详细解释:
1. 作业类型,Oracle作业可以分为多种类型,包括备份和恢复、性能优化、数据清理、统计信息收集等。
每种类型的作业都有
不同的特点和执行频率。
2. 作业调度,Oracle作业计划可以通过Oracle Scheduler来
进行调度和管理。
Oracle Scheduler提供了灵活的调度功能,可以
根据作业的执行时间、频率、依赖关系等进行配置。
3. 作业参数,在创建作业计划时,可以指定一些参数,如作业
的执行时间、执行频率、作业的优先级、作业的依赖关系等。
这些
参数可以根据实际需求进行配置,以确保作业能够按时、按需执行。
4. 监控和日志,Oracle作业计划提供了监控和日志功能,可
以实时查看作业的执行情况和日志信息,以便及时发现和解决问题。
5. 安全性,在配置作业计划时,需要考虑安全性因素,确保作业的执行不会对数据库的安全性造成影响。
可以通过合理的权限管理和作业执行策略来保证作业的安全性。
总之,Oracle作业计划是数据库管理中非常重要的一部分,合理的作业计划可以有效地提高数据库的运行效率和数据的安全性。
通过灵活的调度、合理的参数配置和及时的监控,可以确保作业按时、按需地执行,从而保证数据库的稳定和安全运行。
OracleJob学习--两种不同Job使用区别

OracleJob学习--两种不同Job使⽤区别1.两种不同的JobOracle中有两种建⽴Job的⽅式:1)建⽴user_job定时任务declarejob number;BEGINDBMS_JOB.SUBMIT(JOB => job, /*⾃动⽣成JOB_ID*/WHAT => 'proc_add_test;', /*需要执⾏的存储过程名称或SQL语句*/NEXT_DATE => sysdate+3/(24*60), /*初次执⾏时间-下⼀个3分钟*/INTERVAL => 'trunc(sysdate,''mi'')+1/(24*60)' /*每隔1分钟执⾏⼀次*/);commit;end;执⾏之后可以通过:select * from user_jobs;2)通过调度器建⽴定时任务 begin sys.dbms_scheduler.create_job(job_name => 'job_name', job_type => 'PLSQL_BLOCK', job_action => 'declare PRM_ERRCODE number; PRM_ERRMSG varchar2(200); begin proc_add_test(PRM_ERRCODE,PRM_ERRMSG); end;', start_date => to_date('01-04-2021 00:00:00', 'dd-mm-yyyy hh24:mi:ss'), repeat_interval => 'Freq=Monthly;Interval=1', end_date => to_date(null), job_class => 'DEFAULT_JOB_CLASS', enabled => true, auto_drop => true, comments => '测试job'); end;2.两种Job定时任务的不同之处1)两种Job都可以调⽤已有的存储过程进⾏定时执⾏。
OracleJob的使用(定时执行)

OracleJob的使⽤(定时执⾏)oracle中的job能为你做的就是在你规定的时间格式⾥执⾏存储过程,定时执⾏⼀个任务。
下⾯是⼀个⼩案例,定时每15分钟向⼀张表插⼊⼀条数据⼀1.创建⼀张测试表-- Create tablecreate table A8(a1 VARCHAR2(500))tablespace DSP_DATApctfree 10initrans 1maxtrans 255storage(initial 64Knext 1Mminextents 1maxextents unlimited);2.创建存储过程实现向测试表插⼊数据create or replace procedure proc_add_test asbegininsert into a8 values (to_char(sysdate, 'yyyy-mm-dd hh:mi'));/*向测试表插⼊数据*/commit;end;3.创建job定时任务实现⾃动调⽤存储过程(当前时间 17:03)declarejob number;BEGINDBMS_JOB.SUBMIT(JOB => job, /*⾃动⽣成JOB_ID*/WHAT =>'proc_add_test;', /*需要执⾏的存储过程名称或SQL语句*/NEXT_DATE => sysdate+3/(24*60), /*初次执⾏时间-下⼀个3分钟*/INTERVAL =>'trunc(sysdate,''mi'')+1/(24*60)'/*每隔1分钟执⾏⼀次*/);commit;end;4.也就是应该从17:06开始每隔1分钟执⾏⼀次存储过程下⾯是截⽌17:12分的测试表的数据⼆1.可以通过查询系统表查看该job信息select*from user_jobs;2.⼿动sql调⽤job (直接调⽤job可以忽略开始时间)beginDBMS_JOB.RUN(40); /*40 job的id*/end;3.删除任务begin/*删除⾃动执⾏的job*/dbms_job.remove(40);end;4.停⽌jobdbms.broken(job,broken,nextdate);dbms_job.broken(v_job,true,next_date); /*停⽌⼀个job,⾥⾯参数true也可是false,next_date(某⼀时刻停⽌)也可是sysdate(⽴刻停⽌)。
【Oracle学习笔记】定时任务(dbms_job)

【Oracle学习笔记】定时任务(dbms_job)⼀、概述Oralce中的任务有2种:Job和Dbms_job,两者的区别有:1. jobs是oracle数据库的对象, dbms_jobs只是jobs对象的⼀个实例,就像对于tables, emp和dept都是表的实例。
2.创建⽅式也有差异,Job是通过调⽤dbms_scheduler.create_job包创建的,Dbms_job则是通过调⽤dbms_job.submit包创建的。
3.两种任务的查询视图都分为dba和普通⽤户的,Job对应的查询视图是dba_scheduler_jobs和user_scheduler_jobs,dbms_jobs对应的查询视图为dba_jobs和user_jobs。
这⾥主要是介绍Dbms_job。
⼆、使⽤1、创建job:1BEGIN2 DBMS_JOB.SUBMIT(3 JOB OUT BINARY_INTERGER,--输出变量,是此任务在任务队列中的编号,也可以⾃定义,⼀般不传4 WHAT IN VARCHAR2,--执⾏的任务的名称及其输⼊参数5 NEXT_DATE IN DATE DEFAULT SYSDATE,--任务执⾏的时间6 INTERVAL IN VARCHAR2DEFAULT NULL,--任务执⾏的时间间隔7 NO_PARSE IN BOOLEAN DEFAULT FALSE,--⽤于指定是否需要解析与作业相关的过程8 INSTANCE IN BINARY_INTEGER DEFAULT ANY_INSTANCE,--⽤于指定哪个例程可以运⾏作业9 FORCE IN BOOLEAN DEFAULT FALSE--⽤于指定是否强制运⾏与作业相关的例程10 );11END新⼿可以使⽤窗⼝创建:2、删除job: dbms_job.remove(jobno); -- jobno任务号3、修改要执⾏的操作: job:dbms_job.what(jobno, what); --指定任务号以及存储过程4、修改下次执⾏时间:dbms_job.next_date(jobno, next_date); --指定任务号的时间5、修改间隔时间:dbms_job.interval(jobno, interval); --指定任务号的间隔时间6、改变与作业相关的所有信息,包括作业操作,作业运⾏⽇期以及运⾏时间间隔等.1 dbms_job.change(2 job in binary_integer,3 what in varchar2,4 next_date in date,5 interval in varchar2,6 instance in binary_integer default null,7 force in boolean default false8 );例⼦:dbms_job.change(2,null,null,'sysdate+2');6、启动job: dbms_job.run(jobno); --指定任务号启动7、停⽌job: dbms.broken(jobno, broken, nextdate); –broken为boolean值 N代表启动,Y代表没启动(STOP)三、Interval 说明间隔/interval是指上⼀次执⾏结束到下⼀次开始执⾏的时间间隔,当interval设置为null时,该job执⾏结束后,就被从队列中删除。
Oracle定时任务(执行某一SQL语句)

Oracle定时任务(执⾏某⼀SQL语句)Oracle定时任务,是定时调⽤存储过程,执⾏存储过程中的SQl语句SQl实例-- 建⽴存储过程CREATE or replace PROCEDURE UPDATE_AGENCYisBEGINUPDATE AGENCY SET AGENCY.STATUS ='Y'WHERE ='@太和县先明商贸'OR ='凤阳县府城润鑫伟业酒业经营部'OR ='永城市东城区锋伟名酒⾏'; -- 需要执⾏的SQl语句end;-- 根据存储过程昵称查看存储任务Select text from user_source where name='UPDATE_AGENCY'order by line;-- 删除存储过程DROP PROCEDURE UPDATE_AGENCY;-- 创建任务declare tm_jobb number; --tm_joba定时任务名称beginsys.dbms_job.submit(tm_jobb, --任务名称'UPDATE_AGENCY;',--执⾏的过程sysdate,--执⾏时间'TRUNC(SYSDATE + 1) + (11*60+55)/(24*60)');--下次执⾏时间 11:55COMMIT;end;-- 查看定时任务SELECT*FROM user_jobs;-- ⼿动启动BEGINdbms_job.run(25);END;-- 停⽌任务BEGINdbms_job.broken(25,true);END;-- 删除任务begindbms_job.remove(25);--ALL_JOBS.job的值end;存job信息的表user_jobs主要字段说明: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)''每3秒钟执⾏⼀次 'sysdate+3/(24*60*60)'每2分钟执⾏⼀次 'sysdate+2/(24*60)'每分钟执⾏Interval => TRUNC(sysdate,'mi') + 1/ (24*60) --每分钟执⾏interval => 'sysdate+1/(24*60)' --每分钟执⾏interval => 'sysdate+1' --每天interval => 'sysdate+1/24' --每⼩时interval => 'sysdate+2/24*60' --每2分钟interval => 'sysdate+30/24*60*60' --每30秒每天定时执⾏Interval => TRUNC(sysdate+1) --每天凌晨0点执⾏Interval => TRUNC(sysdate+1)+1/24 --每天凌晨1点执⾏Interval => TRUNC(SYSDATE+1)+(8*60+30)/(24*60) --每天早上8点30分执⾏每周定时执⾏Interval => TRUNC(next_day(sysdate,'星期⼀'))+1/24 --每周⼀凌晨1点执⾏Interval => TRUNC(next_day(sysdate,1))+2/24 --每周⼀凌晨2点执⾏每⽉定时执⾏Interval =>TTRUNC(LAST_DAY(SYSDATE)+1) --每⽉1⽇凌晨0点执⾏Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24 --每⽉1⽇凌晨1点执⾏每季度定时执⾏Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'q') --每季度的第⼀天凌晨0点执⾏Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'q') + 1/24 --每季度的第⼀天凌晨1点执⾏Interval => TRUNC(ADD_MONTHS(SYSDATE+ 2/24,3),'q')-1/24 --每季度的最后⼀天的晚上11点执⾏每半年定时执⾏Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24 --每年7⽉1⽇和1⽉1⽇凌晨1点每年定时执⾏Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24 --每年1⽉1⽇凌晨1点执⾏注意:存储过程中执⾏的SQL语句⼀定要以;结尾。
Oracle存储过程定时任务

DBMS_JOB系统包是Oracle“任务队列”子系统的API编程接口。
DBMS_JOB包对于任务队列提供了下面这些功能:提交并且执行一个任务、改变任务的执行参数以及删除或者临时挂起任务等。
DBMS_JOB包是由ORACLE_HOME目录下的rdbms/admin子目录下的DBMSJOB.SQL和PRVTJOB.PLB 这两个脚本文件创建的。
这两个文件被CATPROC.SQL脚本文件调用,而CATPROC.SQL 这个文件一般是在数据库创建后立即执行的。
脚本为DBMS_JOB包创建了一个公共同义词,并给该包授予了公共的可执行权限,所以所有的Oracle用户均可以使用这个包。
下面几个数据字典视图是关于任务队列信息的,主要有DBA_JOBS, USER_JOBS和DBA_JOBS_RUNNING。
这些字典视图是由名为CATJOBQ.SQL的脚本文件创建的。
该脚本文件和创建DBMS_JOB包的脚本文件一样在ORACLE_HOME目录的rdbms/admin子目录中,同样也是由脚本文件CATPROC.SQL调用。
最后,要使任务队列能正常运行,还必须启动它自己专有的后台过程。
启动后台过程是通过在初始化文件init*.ora(实例不同,初始化文件名也略有不同)中设置初始化参数来进行的。
下面就是该参数:JOB_QUEUE_PROCESSES = n其中,n可以是0到36之间的任何一个数。
除了该参数以外,还有几个关于任务队列的初始化参数,本文后面将会对其进行详细讨论。
DBMS_JOB包中包含有许多过程,见表1所示。
表1 DBMS_JOB包三、DBMS_JOB包参数DBMS_JOB包中所有的过程都有一组相同的公共参数,用于定义任务,任务的运行时间以及任务定时运行的时间间隔。
这些公共任务定义参数见表2所示。
表2 DBMS_JOB过程的公共参数下面我们来详细讨论这些参数的意义及用法。
1、job参数job是一个整数,用来唯一地标示一个任务。
oracle 计划任务

Oracle计划任务博客分类:OracleOracle在10g版本以前,计划任务用的是DBMS_JOB包,10g版本引入DBMS_SCHEDULER来替代先前的DBMS_JOB,在功能方面,它比DBMS_JOB提供了更强大的功能和更灵活的机制管理。
一、 DBMS_JOB1、查看数据库中定时任务的最多并发数,一般设置为102、设置数据库中定时任务的最多并发数,如果设置为0,那么数据库定时作业是不会执行的。
Sql代码3、Job的使用说明:4、创建Job事例1:Job执行间隔时间的Interval参数说明Sql代码5、创建Job事例2:其中最后一个参数'sysdate+1/1440'表示时间间隔为每分钟。
其它常用的时间间隔的设置如下:(1)如果想每天凌晨1点执行,则此参数可设置为'trunc(sysdate)+25/24';(2)如果想每周一凌晨1点执行,则此参数可设置为'trunc(next_day(sysdate,1))+25/24';(3)如果想每月1号凌晨1点执行,则此参数可设置为'trunc(last_day(sysdate))+25/24';(4)如果想每季度执行一次,则此参数可设置为'trunc(add_months(sysdate,3),'Q')+1/24';(5)如果想每半年执行一次,则此参数可设置为'add_months(trunc(sysdate,'yyyy'),6)+1/24';(6)如果想每年执行一次,则此参数可设置为'add_months(trunc(sysdate,'yyyy'),12)+1/24'。
6、Job调度任务查看操作7、Job其它操作(1)启动运行JobSql代码(2)删除job: dbms_job.remove(jobno);(3)修改要执行的操作job: dbms_job.what(jobno,what);(4)修改下次执行时间:dbms_job.next_date(job,next_date);(5)修改间隔时间: dbms_job.interval(job,interval);(6)停止job: dbms.broken(job,broken,nextdate);二、DBMS_SCHEDULER1、 DBMS_SCHEDULER的功能更强大,定义更灵活,增强了与系统的交互性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
今天总结下oracle的任务队列管理器(job queue ),以后也方便查询.我们要做定时任务时,有两种办法一种是: 操作系统的定时,win的定时任务,unix的crontab一种是: 数据库级的定时,她的效率更高,再有大量的表级操作时,建议用数据库本身的job queue,这样方便,效率高;如果用系统级定时, 会增加很多编程工作,成本增加了,还很容易出错,事情越简单出错的几率越小.再使用job queue之前,我们还要简单配置下,oracle定时执行job queue 的后台进程是SNP,要启动snp,首先看系统模式是否支持sql> alter system enable restricted session;或sql> alter system disenable restricted session;利用上面的命令更改系统的会话方式为disenable restricted,为snp的启动创建条件.再有就是配置job queue的启动参数,snp的启动参数位于oracle的初始化文件中,job_queue_processes=10 (oracle10gde 默认值)job_queue_interval=N第一行定义snp进程的启动个数为10,正常得女冠一范围是0-36,根据任务的多少,可以配置不同的数值.第二行定义系统每隔几秒唤醒该进程一次.缺省是60,正常范围是1-3600秒.事实上,该进程执行完当前任务后,就进入睡眠状态,睡眠一段时间后,由系统的总控负责将其唤醒。
如果该文件中没有上面两行,请按照如上配置添加。
配置完成后,需要重新启动数据库,使其生效。
注意:如果任务要求执行的间隔很短的话,N的配置也要相应地小一点。
查看job queue的详细信息,查询数据库字典user_jobssql> select job,next_date,next_sec,broken from user_jobs;包含以下子过程:Broken()过程。
change()过程。
Interval()过程。
Isubmit()过程。
Next_Date()过程。
Remove()过程。
Run()过程。
Submit()过程。
User_Export()过程。
What()过程。
1、Broken()过程更新一个已提交的工作的状态,典型地是用来把一个已破工作标记为未破工作。
这个过程有三个参数:job 、broken与next_date。
PROCEDURE Broken (job IN binary_integer, Broken IN boolean, next_dateIN date :=SYSDATE)job参数是工作号,它在问题中唯一标识工作。
broken参数指示此工作是否将标记为破——TRUE说明此工作将标记为破,而FLASE说明此工作将标记为未破。
next_date参数指示在什么时候此工作将再次运行。
此参数缺省值为当前日期和时间。
2、Change()过程用来改变指定工作的设置。
这个过程有四个参数:job、what 、next_date与interval。
PROCEDURE Change (job IN binary_integer, What IN varchar2,next_date IN date, interval IN varchar2)此job参数是一个整数值,它唯一标识此工作。
What参数是由此工作运行的一块PL/SQL代码块。
next_date参数指示何时此工作将被执行。
interval参数指示一个工作重执行的频度。
3、Interval()过程用来显式地设置重执行一个工作之间的时间间隔数。
这个过程有两个参数:job与interval。
PROCEDURE Interval (job IN binary_integer, Interval IN varchar2)job参数标识一个特定的工作。
interval参数指示一个工作重执行的频度。
4、ISubmit()过程用来用特定的工作号提交一个工作。
这个过程有五个参数:job、what、next_date、interval与no_parse。
PROCEDURE ISubmit (job IN binary_ineger, What IN varchar2, next_date IN date,interval IN varchar2, no_parse IN booean:=FALSE)这个过程与Submit()过程的唯一区别在于此job参数作为IN型参数传递且包括一个由开发者提供的工作号。
如果提供的工作号已被使用,将产生一个错误。
5、Next_Date()过程用来显式地设定一个工作的执行时间。
这个过程接收两个参数:job与next_date。
PROCEDURE Next_Date(job IN binary_ineger, next_date IN date)job标识一个已存在的工作。
next_date参数指示了此工作应被执行的日期与时间。
6、Remove()过程来删除一个已计划运行的工作。
这个过程接收一个参数:PROCEDURE Remove(job IN binary_ineger);job参数唯一地标识一个工作。
这个参数的值是由为此工作调用Submit()过程返回的job参数的值。
已正在运行的工作不能由调用过程序删除。
7、Run()过程用来立即执行一个指定的工作。
这个过程只接收一个参数:PROCEDURE Run(job IN binary_ineger)job参数标识将被立即执行的工作。
8、使用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代码应立即进行语法分析。
9、User_Export()过程返回一个命令,此命令用来安排一个存在的工作以便此工作能重新提交。
此程序有两个参数:job与my_call。
PROCEDURE User_Export(job IN binary_ineger, my_call IN OUT varchar2)job参数标识一个安排了的工作。
my_call参数包含在它的当前状态重新提交此工作所需要的正文。
10、What()过程应许在工作执行时重新设置此正在运行的命令。
这个过程接收两个参数:job 与what。
PROCEDURE What (job IN binary_ineger, What IN OUT varchar2)job参数标识一个存在的工作。
what参数指示将被执行的新的PL/SQL代码。
一个简单例子:创建测试表SQL> create table a(a date);表已创建。
创建一个自定义过程SQL> create or replace procedure test as2 begin3 insert into a values(sysdate);4 end;5 /过程已创建。
创建JOBSQL> variable job1 number;SQL>SQL> begin2 dbms_job.submit(:job1,'test;',sysdate,'sysdate+1/1440');--每天1440分钟,即一分钟运行test过程一次3 end;4 /PL/SQL 过程已成功完成。
运行JOBSQL> begin2 dbms_job.run(:job1);3 end;4 /PL/SQL 过程已成功完成。
SQL> select to_char(a,'yyyy/mm/dd hh24:mi:ss') 时间from a;时间-------------------2001/01/07 23:51:212001/01/07 23:52:222001/01/07 23:53:24删除JOBSQL> begin2 dbms_job.remove(:job1);3 end;4 /PL/SQL 过程已成功完成。
下面说下常用的视图与参数:任务队列中关于任务的数据字典视图视图名描述DBA_JOBS 本数据库中定义到任务队列中的任务DBA_JOBS_RUNNING 目前正在运行的任务USER_JOBS 当前用户拥有的任务JOB_QUEUE_PROCESSES >= 1 (如果系统在同一时间会运行很多的job, 或者还有大量需要自动refresh的snapshot, 适当加大)JOB_QUEUE_INTERV AL : 秒数(缺省为60秒), 根据你的job的调度频度而定, 对于一般的一天运行一次的job, 设为缺省值或者几分钟都可以. (不要设置过小, 以免影响性能)JOB_QUEUE_KEEP_CONNECTION (系统默认就可以,我没发现他的作用)DBA_JOBS 和USER_JOBS.字典视图的字段含义字段(列)类型描述JOB NUMBER 任务的唯一标示号LOG_USER V ARCHAR2(30) 提交任务的用户PRIV_USER V ARCHAR2(30) 赋予任务权限的用户SCHEMA_USER V ARCHAR2(30) 对任务作语法分析的用户模式LAST_DATE DATE 最后一次成功运行任务的时间LAST_SEC V ARCHAR2(8) 如HH24:MM:SS格式的last_date日期的小时,分钟和秒THIS_DA TE DATE 正在运行任务的开始时间,如果没有运行任务则为nullTHIS_SEC V ARCHAR2(8) 如HH24:MM:SS格式的this_date日期的小时,分钟和秒NEXT_DATE DATE 下一次定时运行任务的时间NEXT_SEC V ARCHAR2(8) 如HH24:MM:SS格式的next_date日期的小时,分钟和秒TOTAL_TIME NUMBER 该任务运行所需要的总时间,单位为秒BROKEN V ARCHAR2(1) 标志参数,Y标示任务中断,以后不会运行INTERV AL V ARCHAR2(200) 用于计算下一运行时间的表达式FAILURES NUMBER 任务运行连续没有成功的次数WHAT V ARCHAR2(2000) 执行任务的PL/SQL块RAW MLSLABEL 该任务的信任Oracle会话符CURRENT_SESSION_LABELCLEARANCE_HI RAW MLSLABEL 该任务可信任的Oracle最大间隙CLEARANCE_LO RAW MLSLABEL 该任务可信任的Oracle最小间隙NLS_ENV V ARCHAR2(2000) 任务运行的NLS会话设置MISC_ENV RAW(32) 任务运行的其他一些会话参数视图DBA_JOBS_RUNNING的字段含义字段(列)类型描述SID NUMBER 目前正在运行任务的会话IDJOB NUMBER 任务的唯一标示符FAILURES NUMBER 连续不成功执行的累计次数LAST_DATE DATE 最后一次成功执行的日期LAST_SEC V ARCHAR2(8) 如HH24:MM:SS格式的last_date日期的小时,分钟和秒THIS_DA TE DATE 目前正在运行任务的开始日期THIS_SEC V ARCHAR2(8) 如HH24:MM:SS格式的this_date日期的小时,分钟和秒任务重复运行间隔和间隔设计算法任务重复运行的时间间隔取决于interval参数中设置的日期表达式。