- 浏览: 187269 次
- 性别:
- 来自: 杭州
文章分类
最新评论
Oracle 10g新增了scheduler的功能,功能比job强大的很多,Oracle官方也建议将job转移到scheduler 。
先解释一下基础概念,scheduler 包含了以下几个实体对象
Program -- 提供了scheduler 将要运行什么,包含program name,program type(PLSQL块、存储过程、外部程序),program action(具体的程序实体,比如说一个PLSQL块、或者是存储过程的名称、或者是外部程序的路径加名称) 。
Schedules -- 指定何时何种频率来运行job,可以被不同的job重复的利用。比如说我有两个job都要求在每天的凌晨4点运行,那么两个job可以同时指定相同的schedule。
Jobs -- 具体的作业的名称,依赖于那个program、schedule。也可以不指定program、schedule,而直接写入program、schedule的相应参数。
Chains -- 把一组program像一个单独的实体连接在一起,作为一个对象。Job可以指向Chains代替单一的program 。这样就能完成类似如下功能:运行A,然后运行B,当A、B都运行成功则运行C,否则运行D。
下面参考文档边看边做。
1.创建一张表 create table scheduler_test(id number,instime date);
2.创建一个存储过程,实现往表中插入资料。
create or replace procedure p_insSysdate as
id number;
begin
select count(*) into id from scheduler_test;
insert into scheduler_test values(id,sysdate);
commit;
end;
/
3.创建一个schedule,这个仅仅是一个时间上的安排,由DBMS_SCHEDULER.CREATE_JOB调用。这样就可以重用schedule,并且schedule在时间的安排上强大与原先的JOB 。语法如下:
BEGIN
SYS.DBMS_SCHEDULER.CREATE_SCHEDULE
(
schedule_name => 'SCOTT.EVERY_MINUTE'
,start_date => NULL
,repeat_interval => 'FREQ=MINUTELY'
,end_date => NULL
,comments => NULL
);
END;
/
以下给出部分repeat_interval的写法实例,以供参考
EVERY DAY 'FREQ=DAILY;INTERVAL=1'
EVERY MINUTE 'FREQ=MINUTELY;INTERVAL=1'
EVERY 4 HOURS ON THE HOUR 'FREQ=HOURLY;INTERVAL=4;BYMINUTE=0;BYSECOND=0'
1st DAY OF EVERY MONTH 'FREQ=DAILY;BYMONTHDAY=1'
WEEKDAYS AT 7am and 3pm 'FREQ=DAILY; BYDAY=MON,TUE,WED,THU,FRI; BYHOUR=7,15; BYMINUTE=0;BYSECOND=0'
4.创建DBMS_SCHEDULER.CREATE_PROGRAM,指定运行什么样的程序。
BEGIN
SYS.DBMS_SCHEDULER.CREATE_PROGRAM
(
program_name => 'SCOTT.PRG_INSSYSDATE'
,program_type => 'STORED_PROCEDURE'
,program_action => 'p_insSysdate'
,number_of_arguments => 0
,enabled => TRUE
,comments => NULL
);
END;
/
program_type有三类 'PLSQL_BLOCK','STORED_PROCEDURE','EXECUTABLE'分别表示program_action为PLSQL块、存储过程、外部操作系统程序。number_of_arguments表需要传入的参数个数,至于参数如何传入,以后再来研究。
5. 现在来创建一个JOB,并使用先前的schedule、program 。
BEGIN
SYS.DBMS_SCHEDULER.CREATE_JOB
(
job_name => 'SCOTT.JOB_INSSYSDATE'
,schedule_name => 'SCOTT.EVERY_MINUTE'
,program_name => 'SCOTT.PRG_INSSYSDATE'
,comments => NULL
);
END;
/
DBMS_SCHEDULER.CREATE_JOB中有一个参数auto_drop,如果设置成TRUE,job执行完成或者job变成disabled则job自动被删除。如下三种情况job被认为是completed
1) Its end date (or its schedule's end date) has passed.
2) It has runmax_runsnumber of times.max_runsmust be set withSET_ATTRIBUTE.
3) It is not a repeating job and has run once.
下面来查看一下
select * from scheduler_test;
ID INSTIME
---------- ------------
0 14-AUG-08
1 14-AUG-08
2 14-AUG-08
表中已经有内容,说明job已经运行起来了。
如何让job停下来?分为两种情况:一种是停止正在运行的job,
begin
dbms_scheduler.STOP_JOB('job_insSysdate');
end;
会提示如下错误:ORA-27366 job 'scott.job_insSysdate' is not running .
另一种是使job disabled,
begin
dbms_scheduler.DISABLE('job_insSysdate');
end;
可以通过查看job的状态,确认是否使job失效。
select enabled,status from user_scheduler_jobs;
dbms_scheduler.DISABLE 的name参数可以是program、schedule、job等对象。可以disabled的前提是该对象没有被其他的对象引用,比如job_insSysdate引用了prg_insSysdate,如果job_insSysdate为enabled,这时不能直接disabled prg_insSysdate .
发表评论
-
oracle树操作,异步查询,子节点过多分批查询
2014-04-11 15:31 1033oracle树操作链接 select ... -
oracle数组游标批量插入
2013-12-07 16:40 3348declare type ary is table ... -
MERGE into (用法笔记)
2013-11-05 14:01 984MERGE INTO trackedVehicleBus ... -
Oracle 随机取一行数据
2012-11-19 19:34 1297从表中随机取一条数据 select * from ( ... -
(原) ORACLE10g创建SCHEDULER_JOB
2012-08-03 16:07 1680BEGIN SYS.DBMS_SCHEDULER ... -
PL/SQL Developer使用技巧
2012-07-18 14:12 18791、PL/SQL Developer记住登陆密码 ... -
Oracle体系结构之-物理结构(transshipment)
2012-06-16 09:35 846一、物理文件的分类 ... -
oracle Toad使用指南
2012-06-19 08:34 6151一.Toad功能综述二. ... -
Oracle 超长字段的处理
2012-06-17 08:50 3195ORACLE中的大对象: LONG: 可变长的字符 ... -
oracle Optimizer CBO RBO (优化器)
2012-06-13 08:34 1078Oracle 的优化器有两 ... -
共享锁和排它锁
2012-06-12 08:23 9641.共享锁【S锁】 又称读锁,若事务T对数据对象 ... -
oracle with admin option 和with grant option
2012-06-20 08:29 1575with admin option 用于系统权限授权,w ... -
ORACLE 用户自定义异常
2012-06-21 12:57 58481CREATE OR REPLACE PROCEDURE te ... -
ORACLE SGA的结构、功能和一般设置
2012-06-17 08:50 1050System global area(SGA) 是一组共享的内 ... -
oracle中的检查点Ckpt和SCN号
2012-06-12 08:28 5623Checkpoint checkpoint是用来减少在数 ... -
oracle表之间的关联方式
2012-06-14 08:42 1417oracle表之间的关联方 ... -
oracle中使用on delete cascade
2012-06-15 08:38 7772oracle中使用on delete ca ... -
关于oracle的行级锁
2012-06-17 08:52 985在oracle中,行级锁只对用户正在访问的行进行锁定。 ... -
oracle 10g 创建job 相关-dbms_scheduler.create_job
2012-06-19 08:35 8529grant create job to somebody ... -
PGA与SGA的区别,PGA的功能介绍
2012-06-15 08:39 1214当用户进程连接到数 ...
相关推荐
Oracle DOM编程 文档,有要的没 Start from toc.htm DBMS_XMLDOM DBMS_XMLPARSER DBMS_XMLQUERY
oracle dbms_lob
Oracle 18c bug 执行 DBMS_PDB.CHECK_PLUG_COMPATIBILITY报错_ITPUB博客.mhtml
ORA-04063: package body SYS.DBMS_REGISTRY_SYS has errors
作用:DBMS_STATS.GATHER_TABLE_STATS统计表,列,索引的统计信息. DBMS_STATS.GATHER_TABLE_STATS的语法如下: DBMS_STATS.GATHER_TABLE_STATS ( ownname VARCHAR2, tabname VARCHAR2, partname VARCHAR2, estimate_...
NULL 博文链接:https://wuaner.iteye.com/blog/717793
DBMS_PROFILER使用指南 介绍详细,从安装到使用都一目明了
dbms_obfuscation_toolkit加密解密数据
ORACLE数据库使用dbms_stats包手动收集关于表的、索引的统计信息。
Oracle实用工具RMAN的应用为DBA管理多个Oracle数据库提供了集中备份管理与恢复控制的机制,大大地减轻了DBA的工作压力,而DBMS_JOB包的使用增强了存储过程的应用功能,这样,他们就可以从备份数据及重复处理数据的...
DBMS STATS Package Fails with Error 'ORA-04063: package body "SYS.DBMS_REGISTRY_SYS" has errors'
Oracle统计分析-dbms_stats.pdf
ORACLE数据库封装过程DBMS_SQL的应用.pdf
Oracle动态SQL之DBMS_SQL系统包的使用.pdf
DBMS_XPLAN是Oracle提供的一个用于查看SQL计划,包括执行计划和解释计划的包;在以前查看SQL执行计划的时候,我都是使用set autotrace命令,不过现在看来,DBMS_XPLAN包给出了更加简化的获取和显示计划的方式。 这5...
支持ArcGIS10.2版本的PostgreSQL_DBMS_for_windows_922,ESRI官方原版资源。
有用的代码段,它将DBMS_JOB间隔值转换为日历语法。
通过此版本可以把oracle时区版本调整到为最新版本,一般配合时区补丁使用 可以参考https://blog.csdn.net/weixin_43885834/article/details/105745901 https://download.csdn.net/download/weixin_43885834/12360971...
oracle中DBMS_SQL的使用,详细讲解oracle DBMS_SQL的使用办法
ORACLE 数据库备份分为物理备份和逻辑备份。物理备份是数据库文件拷贝的备份,冷备份、热备份属于物理备份。 导出/导入(EXPORT/IMPORT)工具用于进行逻辑备份。冷备份是在数据库被正常关闭之后进行的数据文件的物理...