Oracle定时执行计划任务

合集下载

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

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数据库中安排和管理定期执行
的任务或作业。

这些作业可以是数据库维护任务、数据备份任务、
报表生成任务等。

以下是关于Oracle作业计划的一些方面的详细解释:
1. 作业类型,Oracle作业可以分为多种类型,包括备份和恢复、性能优化、数据清理、统计信息收集等。

每种类型的作业都有
不同的特点和执行频率。

2. 作业调度,Oracle作业计划可以通过Oracle Scheduler来
进行调度和管理。

Oracle Scheduler提供了灵活的调度功能,可以
根据作业的执行时间、频率、依赖关系等进行配置。

3. 作业参数,在创建作业计划时,可以指定一些参数,如作业
的执行时间、执行频率、作业的优先级、作业的依赖关系等。

这些
参数可以根据实际需求进行配置,以确保作业能够按时、按需执行。

4. 监控和日志,Oracle作业计划提供了监控和日志功能,可
以实时查看作业的执行情况和日志信息,以便及时发现和解决问题。

5. 安全性,在配置作业计划时,需要考虑安全性因素,确保作业的执行不会对数据库的安全性造成影响。

可以通过合理的权限管理和作业执行策略来保证作业的安全性。

总之,Oracle作业计划是数据库管理中非常重要的一部分,合理的作业计划可以有效地提高数据库的运行效率和数据的安全性。

通过灵活的调度、合理的参数配置和及时的监控,可以确保作业按时、按需地执行,从而保证数据库的稳定和安全运行。

oracle 计划任务

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定时任务时间写法

在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定时任务(dbms_job)的时间设置参考

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执⾏结束后,就被从队列中删除。

ORACLE的执行计划

ORACLE的执行计划

ORACLE的执行计划
一、Oracle执行计划
1.概念
Oracle执行计划是指Oracle数据库根据用户提交的SQL语句以及其执行需要的资源,使用一系列步骤来完成数据库操作的一个流程。

Oracle 根据执行计划来选择最优的执行步骤,从而把用户提交的任务在经济高效的方式完成。

Oracle会在执行时分析语句,收集有关语句的信息,构建一个执行计划,并选择一些优化操作去完成SQL的执行,从而达到最优的性能。

2.作用
Oracle的执行计划不仅可以帮助我们识别SQL语句的生成过程,也可以识别其它的执行步骤,如执行的索引使用情况、连接的表数量、执行步骤的顺序等。

通过分析执行计划,我们可以找到瓶颈,分析出SQL语句的性能瓶颈,并根据瓶颈可以有效的改进SQL的性能,从而提高系统的效率。

3.类型
Oracle的执行计划可以分为Cost Based和Rule Base两种。

Cost Based执行计划是Oracle的主要执行计划,它会对查询中使用的资源(索引、表空间、大小等)进行评估,并根据评估结果来选择执行步骤,从而得到一个当前SQL最优的执行计划。

而Rule Base执行计划会根据Oracle的规则去生成一个执行计划,不会根据优化的考虑。

4.工具
在查看Oracle执行计划之前,我们首先要拿到Oracle的查询优化器产生的执行计划,有两种办法可以查看Oracle的执行计划:(1)SQL*Plus的Explain Plan命令:我们可以使用Explain Plan 命令。

linux设定定时执行任务_oracle,arcGIS-精选

linux设定定时执行任务_oracle,arcGIS-精选

Linux 设定定时执行任务说明一、编写定时执行时的命令1) 将需要定时执行的命令写入.sh 文件。

例如:停止weblogic 服务。

编写autoStop.sh 如下:su - w eblogic -c '/usr/weblogic103/user_projects/domains/base_domain/bin/stopWebLogic.sh '启动weblogic 服务。

编写autoStart.sh 如下:su -weblogic -c '/usr/weblogic103/user_projects/domains/base_domain/startWebLogic.sh '其中:weblogic 为安装weblogic 时创建的用户。

weblogic 服务必须使用安装时创建的用户启动。

/usr/weblogic103/user_projects/domains/base_domain/startWebLogic.sh 为weblogic 启动命令所在的路径。

其他su 的参数请参考附录之“1)su 命令的使用”来了解深入。

2) autoStart.sh ,autoStop.sh 必须有被执行的权限。

root 用户登录,执行下列命令。

chmod a+x autoStop.shchmod a+x autoStart.sh3) oracle 服务启动,编写批处理文件autoStart.sh 如下:export ORACLE_HOME=/u01/oracle/product/10.2.0/db_1 // 设置oracle_homeexport PATH=$ORACLE_HOME/bin:/usr/sbin:$PATHsu - oracle //oracle 为安装oralce 时创建的用户名sqlplus /nologconnect / as sysdbalsnrctl startstartupexitexit停止oracle 服务,编写批处理文件autoStop.sh 如下:export ORACLE_HOME=/u01/oracle/product/10.2.0/db_1 // 设置oracle_homeexport PATH=$ORACLE_HOME/bin:/usr/sbin:$PATHsu - oracle //oracle 为安装oralce 时创建的用户名sqlplus /nologconnect / as sysdbashutdown immediatelsnrctl stopexitexit4) ArcGIS 服务的启动也类似。

oracle定制定时执行任务

oracle定制定时执行任务

oracle定制定时执行任务1.引言定制定时执行的任务有两种形式,系统级别和数据库级别,从操作系统级别来讲,windows系统我们可以使用任务计划来实现,对于winXP系统,设置步骤如下,开始---设置---控制面板---任务计划,然后添加任务计划,按向导完成配置即可;对于win7系统,设置步骤如下,点击开始,然后在搜索程序和文件框中输入 [任务计划],然后点击出来的任务计划程序,创建一个基本任务即可;linux系统我们可以使用crontab命令来是实现,从数据库级别来讲,我们可以采用数据库的job来实现;本节主要介绍通过oracle数据库的job来定制一个简单的定时执行任务。

本节会采用oracle定制一个定时向一个表中插入语句。

这里聊一下我做这个oracle定时任务的缘由:项目中要在固定的时间,把一个数据库中某些表的数据同步到另外一个数据库,显然这些工作我不能每次都自己去做,那么,我要怎么来做呢?这个时候oracle的定时执行任务JOB无疑是我的最佳选择。

我把同步的脚本放在一个存储过程中,然后在固定的时间去执行这个存储过程就OK了。

注意:以下所有的操作都是在sytem用户下执行。

采用PL/SQL做的客户端登陆。

2.项目环境安装oracle10g,然后再安装PL/SQL,然后用管理员用户system登陆,打开SQL Window输入图中的SQL语句,操作环境详细的信息如下:3.环境准备(1)新建一个表,命令为test,建表语句如下:test09161 create table system.test09162 (3 seq NUMBER(2) PRIMARY KEY,4 seqtime DATE5 )在SQL窗口执行以上语句;(2)新建一个存储过程,命名为test_proc,存储过程的语句如下:test_proc1 CREATE OR REPLACE PROCEDURE test_proc IS2 BEGIN3 INSERT INTO SYSTEM.TEST0916(SEQ, SEQTIME) VALUES(NVL((SELECT MAX(SEQ) FROM SYSTEM.TEST0916) + 1, 0), SYSDATE);4 COMMIT;5 EXCEPTION6 WHEN OTHERS THEN7 DBMS_OUTPUT.PUT_LINE('Exception happened,data was rollback');8 ROLLBACK;9 END;在SQL Window窗口中执行以上存储过程,执行完成以后,查看Objects下的Procedures菜单,可以看到新建的存储过程如图:TEST_PROC前面的图标没有红色的标记,表示存储过程正常;(3)检查oracle的JOB运行环境我这里遇到的只是要检查一下oracle的JOB队列的进程数,如果为0表示不运行JOB,虽然网上说一般默认为10,但是我安装oracle以后就不知道为什么是0。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 set job_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.删除JOBbegindbms_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。

相关文档
最新文档