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的使用(定时执行)

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 计划任务

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的功能更强大,定义更灵活,增强了与系统的交互性。
oracle定时任务时间写法

在Oracle 数据库中,可以使用DBMS_SCHEDULER 包来创建和管理定时任务。
定时任务的时间写法遵循标准的cron 表达式语。
cron 表达式由个或六个字段组成,分表示分钟、小时日期、月份和星期几。
以下是cron 表达式的常见写法:
1. 每分钟执行次:`* * * * *`
2. 每小时的第30 分钟执行一次:`30 * * * *`
3. 每天的8 点执行一次`0 8 * * *`
4. 每周一的9 点执行一次:`0 9 * * 1`
5. 每的第一天12 点执行一次:`0 12 1 * *`
6. 每年的1 月1 日的00:00 执行一次:`0 0 1 1 *`
其中,`*` 表示匹配任意值,例如`* * * * *` 表示每分钟都执行;数字表示具体的数值例如`30 * * * *` 表示每小时的第30 分钟执行;多个数值可以用逗号分隔,例如`1,15,30 * * * *` 表示每小时的第1、15 和30 分钟执行。
此外,还可以使用特字符来表示一些特定的时间段例如:
- `/` 表示步,例如`*/5 * * * *` 表示每隔5 分钟执行一次。
- `-` 表示范围,例如`0 9-17 * * *` 表示每天9 点到17 点之每小时执行一。
以上是一些常见的定时任务时间写法,你可以根据具体求来编写适合的cro n 表式。
oracle 固定执行计划

oracle 固定执行计划Oracle数据库是目前应用最广泛的关系型数据库管理系统之一,它不仅具有丰富的高级功能和应用程序,还具备了极高的安全性能和稳定性,被广泛应用于企业级互联网应用、商业应用等领域。
其中固定执行计划是Oracle数据库中的一个重要概念之一,本文将为您详细介绍。
一、什么是固定执行计划顾名思义,固定执行计划就是一种在Oracle数据库中对SQL语句执行计划进行指定和固定的方法。
当数据库在执行一条SQL语句时,通常会根据优化器的分析结果自动确定最优执行计划,但有时候由于各种因素,这个最优的执行计划并不一定是我们想要的结果。
因此,我们可以通过固定执行计划的方式来指定SQL语句执行时的具体执行计划,从而达到所需的效果。
下面是一些使用固定执行计划的场景:1. 如果一条SQL语句的扫描方式受到了Oracle版本升级、系统参数修改等因素的影响,那么它的执行计划可能会发生变化,如果我们想保证其性能稳定,就需要使用固定执行计划的方式来避免由于自动计划变化而导致性能问题的发生。
2. 对于一些关键业务系统,其响应时间和吞吐量非常敏感,任何微小的变化都可能引起系统性能下降或者响应延迟。
此时我们可以通过固定执行计划来保证SQL语句的性能稳定,从而保证整个系统的正常运行。
3. 在数据库中,同一个SQL语句可能会被不同的应用程序或者用户调用,不同的调用方式需要使用不同的执行计划来保证最佳性能。
如果我们对一条SQL语句的执行计划进行了优化,那么将它固定下来可以确保所有的调用者都使用相同的执行计划,避免性能的波动。
Oracle数据库提供了多种方式来实现固定执行计划:1. 使用dbms_sqltune包该方法需要使用dbms_sqltune包中的create_sql_profile方法来创建一个SQL语句的profile,然后将其与该SQL语句相关联。
当SQL语句执行时,数据库会根据该profile 中指定的执行计划进行执行。
oracle定时任务(dbms_job)的时间设置参考

oracle定时任务(dbms_job)的时间设置参考最后那⼀项可以参考如下:每天午夜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)'其中li_jobno是它的ID,可以通过这个ID停掉这个任务,最后想说的是不要执⾏多次,你可以在⾥⾯管理起来,发现已经运⾏了就不SUBMIT select TRUNC(SYSDATE,'MONTH'),last_day(sysdate) from dual--每个⽉的第⼀天和最后⼀天每天运⾏⼀次 'SYSDATE + 1'每⼩时运⾏⼀次 'SYSDATE + 1/24'每10分钟运⾏⼀次 'SYSDATE + 10/(60*24)'每30秒运⾏⼀次 'SYSDATE + 30/(60*24*60)'每隔⼀星期运⾏⼀次 'SYSDATE + 7'不再运⾏该任务并删除它 NULL每年1⽉1号零时 trunc(last_day(to_date(extract(year from sysdate)||'12'||'01','yyyy-mm-dd'))+1-------------------Job的参数:⼀:时间间隔执⾏(每分钟,每天,每周,:每⽉,每季度,每半年,每年)interval是指上⼀次执⾏结束到下⼀次开始执⾏的时间间隔,当interval设置为null时,该job执⾏结束后,就被从队列中删除。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oracle 定时执行计划任务Oracle 在 10g 版本以前, 计划任务用的是 DBMS_JOB包, 10g 版本引入DBMS_SCHEDULER来替代先前的 DBMS_JOB,在功能方面 , 它比 DBMS_JOB提供了更强大的功能和更灵活的机制管理, 但 DBMS_JOB包的使用相对比较简单, 也基本能够满足定时执行计划任务的需求, 故接下来就先看看 DBMS_JOB包的使用方法。
1. DBMS_JOB我们可以在命令窗口输入 show parameter job_queue_processes查看数据库中定时任务的最多并发数,一般设置为 10(设置方法:alter system setjob_queue_processes=10 ,如果设为 0,那么数据库定时作业是不会运行的。
oracle 定时执行 job queue 的后台进程是 SNP , 要启动 snp, 首先看系统模式是否支持 sql> alter system enable restricted session;或 sql> alter system disenable restricted session; 利用上面的命令更改系统的会话方式为 disenable restricted,为 snp 的启动创建条件 .接下来我们尝试实现以下功能:每隔一分钟自动向 job_test表中插入当前的系统时间。
1、创测试表create table job_test(updatetime date;2、创建 JOBvariable v_job_no number;begindbms_job.submit(:v_job_no, 'insert into job_test values(sysdate;', sysdate,'sysdate+1/1440';end;/其中最后一个参数 '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'。
select * from user_jobs;--查看当前用户的调度任务select * from dba_jobs_running;--查看正在执行的调度任务select * from dba_jobs;--查看执行完的调度任务select * from all_jobs; -- 查看数据库系统所有任务实例 1:1. 创建测试表create table a(a date;2. 创建一个存储过程create or replace procedure test asbegininsert into a values(sysdate;end;/3. 创建 JOB (任务计划variable job1 number;begindbms_job.submit(:job1,'test;',sysdate,'sysdate+1/1440'; end;/--每天 1440分钟,即一分钟运行 test 存储过程一次4. 运行 JOBbegindbms_job.run(:job1;end;/5. 查看执行结果select to_char(a,'yyyy/mm/dd hh24:mi:ss' 时间 from a; 6. 删除 JOB begindbms_job.remove(:job1;end;/job 的使用说明:DBMS_JOB.SUBMIT(:jobno,//job号'your_procedure;',//要执行的过程trunc(sysdate+1/24,//下次执行时间'trunc(sysdate+1/24+1'//每次间隔时间;删除 job:dbms_job.remove(jobno;修改要执行的操作 :job:dbms_job.what(jobno,what; 修改下次执行时间:dbms_job.next_date(job,next_date; 修改间隔时间:dbms_job.interval(job,interval;停止 job:dbms.broken(job,broken,nextdate;启动 job:dbms_job.run(jobno;例子:VARIABLE jobno number;beginDBMS_JOB.SUBMIT(:jobno,'Procdemo;',//Procdemo为过程名称SYSDATE, 'SYSDATE + 1/720';commit;end;/2. DBMS_SCHEDULERDBMS_SCHEDULER的功能更强大,定义更灵活,增强了与系统的交互性。
可以有两种方式来定义 " 计划 " :1 使用 DBMS_SCHDULER.CREATE_SCHEDULE //定义一个计划,计划再调用job;2 调用 DBMS_SCHDULER.CREATE_JOB //过程直接定义 job例子 1:用 DBMS_SCHDULER.CREATE_JOBE直接创建 jobBEGINDBMS_SCHEDULER.CREATE_JOB (job_name => 'update_bb', //job的名字job_type => 'STORED_PROCEDURE', //job的类型为“执行存储过程” job_action => 'OPS.SALES_PKG.UPDATE_SALES_SUMMARY', //存储过程的名字start_date => '28-APR-10 07.00.00 PM Australia/Sydney', //这里把时区去掉也可以!repeat_interval => 'FREQ=DAILY;INTERVAL=2', /* every other day */enabled =>true, //启动该 jobcomments => 'My new job'; //注释END;/参数说明:·job_name: 顾名思义 , 每个 job 都必须有一个的名称·schedule_name: 如果定义了计划,在这里指定计划的名称·job_type: 目前支持三种类型 :·PLSQL_BLOCK : PL/SQL块 : 需要输入完整的 PL/SQL代码 ;·STORED_PROCEDURE : 存储过程 : 需要指定存储过程的名字 ;·EXECUTABLE: 外部程序 : (外部程序可以是一个 shell 脚本 , 也可以是操作系统级别的指令 . 需要输入 script 的名称或者操作系统的指令名·enabled: 上面已经说过了,指定 job 创建完毕是否自动激活·comments: 对于 job 的简单说明例子 2:BEGINDBMS_SCHEDULER.CREATE_JOB (job_name => 'zbb_job3',job_type => 'PLSQL_BLOCK', //job的类型是执行 sql 语句 job_action => 'insert into bb values(1,sysdate;',start_date => sysdate,repeat_interval => 'freq = minutely; interval=1', //每分钟执行一次enabled => true,comments => 'my love';END;/注意: enabled 默认为 false , oracle 不会运行此 job ,所有我们需要 enable 它SQL> exec dbms_scheduler.enable ('zbb_job3';例子 3:使用 DBMS_SCHDULER.CREATE_SCHEDULE建立 scheduler(控制时间和频率,然后给它添加几个 jobs (动作!BEGINDBMS_SCHEDULER.CREATE_SCHEDULE ( //创建计划任务schedule_name => 'zbb_schedule',repeat_interval => 'FREQ=MINUTELY; INTERVAL=5', //执行间隔:每 5分钟comments => 'Every 5 MINUTS';END;/接下来往“ zbb_schedule”里添加一个job “ zbb_job2”:BEGINDBMS_SCHEDULER.CREATE_JOB ( //创建 job 并把它加入到 scheduler 里面job_name => 'zbb_job2',job_type => 'PLSQL_BLOCK',job_action => 'insert into bb values(1,sysdate;',schedule_name => 'ZBB_SCHEDULE';END;/再往“ zbb_schedule”里添加一个job “ zbb_job3”:BEGINDBMS_SCHEDULER.CREATE_JOB (job_name => 'zbb_job3',job_type => 'PLSQL_BLOCK',job_action => 'insert into bb values(1,sysdate;',schedule_name => 'ZBB_SCHEDULE';END;/运行“ select job_name,schedule_name from user_scheduler_jobs;”可以查看到所有的 job 。