- 浏览: 191574 次
- 性别:
- 来自: 杭州
文章分类
最新评论
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 1066oracle树操作链接 select ... -
oracle数组游标批量插入
2013-12-07 16:40 3390declare type ary is table ... -
MERGE into (用法笔记)
2013-11-05 14:01 1023MERGE INTO trackedVehicleBus ... -
Oracle 随机取一行数据
2012-11-19 19:34 1383从表中随机取一条数据 select * from ( ... -
(原) ORACLE10g创建SCHEDULER_JOB
2012-08-03 16:07 1723BEGIN SYS.DBMS_SCHEDULER ... -
PL/SQL Developer使用技巧
2012-07-18 14:12 19151、PL/SQL Developer记住登陆密码 ... -
Oracle体系结构之-物理结构(transshipment)
2012-06-16 09:35 885一、物理文件的分类 ... -
oracle Toad使用指南
2012-06-19 08:34 6214一.Toad功能综述二. ... -
Oracle 超长字段的处理
2012-06-17 08:50 3306ORACLE中的大对象: LONG: 可变长的字符 ... -
oracle Optimizer CBO RBO (优化器)
2012-06-13 08:34 1124Oracle 的优化器有两 ... -
共享锁和排它锁
2012-06-12 08:23 9991.共享锁【S锁】 又称读锁,若事务T对数据对象 ... -
oracle with admin option 和with grant option
2012-06-20 08:29 1610with admin option 用于系统权限授权,w ... -
ORACLE 用户自定义异常
2012-06-21 12:57 58971CREATE OR REPLACE PROCEDURE te ... -
ORACLE SGA的结构、功能和一般设置
2012-06-17 08:50 1082System global area(SGA) 是一组共享的内 ... -
oracle中的检查点Ckpt和SCN号
2012-06-12 08:28 5665Checkpoint checkpoint是用来减少在数 ... -
oracle表之间的关联方式
2012-06-14 08:42 1477oracle表之间的关联方 ... -
oracle中使用on delete cascade
2012-06-15 08:38 7808oracle中使用on delete ca ... -
关于oracle的行级锁
2012-06-17 08:52 1037在oracle中,行级锁只对用户正在访问的行进行锁定。 ... -
oracle 10g 创建job 相关-dbms_scheduler.create_job
2012-06-19 08:35 8577grant create job to somebody ... -
PGA与SGA的区别,PGA的功能介绍
2012-06-15 08:39 1286当用户进程连接到数 ...
相关推荐
dbms_scheduler是另一个重要的调度工具,它可以替代dbms_job,提供更高级的作业调度和管理功能,支持复杂的作业计划和事件驱动的作业执行。 总的来说,Oracle系统包是数据库管理员和开发人员的强大工具集,涵盖了从...
8. **DBMS_SCHEDULER**: 更高级的任务调度器,取代了DBMS_JOB,提供了更多灵活性和功能,如重复频率、依赖关系等。 9. **DBMS_OUTPUT.PUT_LINE 和 DBMS_OUTPUT.GET_LINE**: 分别用于写入和读取调试信息。 10. **...
1. **DBMS_SCHEDULER介绍**:DBMS_SCHEDULER是Oracle 11g引入的新的调度包,取代了旧的DBMS_JOB,提供了更灵活和安全的定时任务管理。它可以创建一次性或重复性的作业,支持多种执行模式,如PL/SQL程序、操作系统...
首先,Oracle数据库使用DBMS_SCHEDULER包来创建和管理这些定时任务。DBMS_SCHEDULER是一组存储过程和函数,用于创建、修改和控制数据库作业的执行。它取代了早期版本的DBMS_JOB,提供了更强大的功能和灵活性。 1. *...
在Oracle 10g及以后版本中,推荐使用更强大的`DBMS_SCHEDULER`包来替代`DBMS_JOB`。`DBMS_SCHEDULER`提供了更灵活的调度选项,支持复杂的重复规则,并且具有更好的性能。 ##### 创建定时任务 ```sql BEGIN sys....
Oracle的Job定时器通过DBMS_SCHEDULER或旧的DBMS_JOB包来实现。 在Oracle中,创建一个Job主要涉及以下几个步骤: 1. **定义存储过程**:首先,我们需要编写一个存储过程来封装要定时执行的操作。例如,如果要每天...
DBMS_JOB 是早期版本 Oracle 提供的接口,而 DBMS_SCHEDULER 是从 Oracle 10g 开始引入的,功能更加强大且灵活。DBMS_SCHEDULER 包含了更多的调度选项,如重复频率、依赖性管理以及作业链等功能。 1. **创建 Oracle...
2. **DBMS_SCHEDULER**: 这是Oracle 10g引入的新版调度器,功能更强大且灵活。你可以创建一个程序(program)来封装你的PL/SQL逻辑,并通过调度器(scheduler)在特定时间执行。例如: ```sql -- 创建一个程序 ...
你可以使用`DBMS_JOB.INFO`查询Job的状态,或者使用`DBMS_SCHEDULER`包(在Oracle 10g及以后版本推荐)进行更高级的Job管理,包括查看Job日志、暂停、恢复和删除Job。 8. **注意事项**: - 修改`next_date`以适应...
8. **DBMS_SCHEDULER**: Oracle 10g及以后版本引入的更强大的调度器,替代了DBMS_JOB。它支持更复杂的调度策略,如周期性、依赖性和条件触发。`DBMS_SCHEDULER.CREATE_JOB`用于创建新作业,`DBMS_SCHEDULER.RUN_JOB`...
自Oracle 10g版本起,引入了DBMS_SCHEDULER包,它相较于旧有的DBMS_JOB包拥有许多新的特性。DBMS_SCHEDULER不仅可以执行存储程序和匿名PL/SQL块,还能执行OS可执行文件、脚本(包括shell脚本)等。其程序单元作为...
4. **启用作业**:创建并配置好作业后,你需要通过`DBMS_SCHEDULER.RUN_JOB`或`DBMS_SCHEDULER.enable`来启动或启用作业,使其能够按照预定的时间计划执行。 5. **监控和管理作业**:使用`DBA_JOBS`和`DBA_...
DBMS_JOB更适合早期版本的Oracle,而DBMS_SCHEDULER则在新版本中提供了更高级的功能,如作业链和资源管理。 在事务控制方面,DBMS_TRANSACTION包可以帮助我们管理事务的局部和全局标识符,这对于跟踪和回滚特定事务...
4. **使用DBMS_SCHEDULER**:Oracle 10g引入了更先进的DBMS_SCHEDULER,提供了更多的调度选项和控制。考虑将旧的DBMS_JOB作业迁移到DBMS_SCHEDULER,以利用其增强的功能,如错误处理、依赖管理、资源计划等。 5. **...
DBMS_SCHEDULER是Oracle 10g及以后版本推荐使用的模块,它提供了更高级的功能,如任务调度、任务依赖性、资源限制等。而DBMS_JOB则是较早版本的工具,虽然功能相对简单,但在许多环境中仍然被广泛使用。 首先,DBMS...
另外,Oracle 12c引入了新的调度器(DBMS_SCHEDULER),它提供了更高级的功能,如重复模式、依赖管理等,但DBMS_JOB仍然在旧版本的Oracle数据库中广泛使用。 总结起来,Oracle的JOB功能对于定期执行数据库维护任务...