Oracle定时执行计划任务

上传人:德****1 文档编号:1089324 上传时间:2017-05-27 格式:PDF 页数:8 大小:451.31KB
返回 下载 相关 举报
Oracle定时执行计划任务_第1页
第1页 / 共8页
Oracle定时执行计划任务_第2页
第2页 / 共8页
Oracle定时执行计划任务_第3页
第3页 / 共8页
Oracle定时执行计划任务_第4页
第4页 / 共8页
Oracle定时执行计划任务_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《Oracle定时执行计划任务》由会员分享,可在线阅读,更多相关《Oracle定时执行计划任务(8页珍藏版)》请在金锄头文库上搜索。

1、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 syste

2、m 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、

3、创测试表 create table job_test(updatetime date); 2、创建 JOB variable v_job_no number; begin dbms_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 点

4、执行,则此参数可设置为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 *

5、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 as begin insert into a values(sysdate); end; / 3. 创建 JOB(任务计划) variab

6、le job1 number; begin dbms_job.submit(:job1,test;,sysdate,sysdate+1/1440); end; / -每天 1440 分钟,即一分钟运行 test 存储过程一次 4. 运行 JOB begin dbms_job.run(:job1); end; / 5. 查看执行结果 select to_char(a,yyyy/mm/dd hh24:mi:ss) 时间 from a; 6.删除 JOB begin dbms_job.remove(:job1); end; / job 的使用说明: DBMS_JOB.SUBMIT(:jobno,/j

7、ob 号 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_

8、job.run(jobno); 例子: VARIABLE jobno number; begin DBMS_JOB.SUBMIT(:jobno, Procdemo;,/Procdemo 为过程名称 SYSDATE, SYSDATE + 1/720); commit; end; / 描述 Interval 参数值 每天运行一次 SYSDATE + 1 每小时运行一次 SYSDATE + 1/24 每 10 分钟运行一次 SYSDATE + 10/( 60*24) 每 30 秒运行一次 SYSDATE + 30/(60*24*60) 每隔一星期运行一次 SYSDATE + 7 不再运行该任务并删除

9、它 NULL 每天午夜 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(SYSDA

10、TE, SATURDAY), NEXT_DAY(SYSDATE, SUNDAY) + ( 660+10) /( 2460) 2. DBMS_SCHEDULER DBMS_SCHEDULER 的功能更强大,定义更灵活,增强了与系统的交互性。 可以有两种方式来定义 计划 : 1) 使用 DBMS_SCHDULER.CREATE_SCHEDULE /定义一个计划,计划再调用 job; 2) 调用 DBMS_SCHDULER.CREATE_JOB /过程直接定义 job 例子 1: 用 DBMS_SCHDULER.CREATE_JOBE 直接创建 job BEGIN DBMS_SCHEDULER.CR

11、EATE_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, /启动该 job

12、comments = My new job); /注释 END; / 参数说明: job_name: 顾名思义 ,每个 job 都必须有一个的名称 schedule_name: 如果定义了计划,在这里指定计划的名称 job_type: 目前支持三种类型 : PLSQL_BLOCK : PL/SQL 块 : 需要输入完整的 PL/SQL 代码 ; STORED_PROCEDURE : 存储过程 : 需要指定存储过程的名字 ; EXECUTABLE: 外部程序 : (外部程序可以是一个 shell 脚本 ,也可以是操作系统级别的指令 ). 需要输入 script 的名称或者操作系统的指令名 ena

13、bled: 上面已经说过了,指定 job 创建完毕是否自动激活 comments: 对于 job 的简单说明 例子 2: BEGIN DBMS_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 (

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号