Oracle中SCHEDULER的使用

SCHEDULER使用详解:

创建SCHEDULER:

BEGIN

sys.dbms_scheduler.create_schedule(

repeat_interval => 'FREQ=DAILY;BYHOUR=15;BYMINUTE=0;BYSECOND=0',

start_date => systimestamp at time zone '+8:00',

end_date => to_timestamp_tz('2014-03-15 +8:00', 'YYYY-MM-DD TZH:TZM'),

comments => 'REBUILD INDEX',

schedule_name => '"SYS"."IDX_REBUILD"');

END;

参数解释:

repeat_interval设置重复频率

FREQ(指定重复频率):

YEARLY:以年为单位,可以设置每年的哪天执行。INTERVAL重复次数。BYYEARDAY可以指定具体的日子。用1-365来表示每天,但到了闰年就是1-366。由于有二月这个不确定性的存在(例如如果设置69,则在平年指的是三月十号,闰年则会是三月九号),所以我们可以使用1-59来表示1月到2月28,-307至-1来表示2月29到12月31。之后BYHOUR,BYMINUTE,BYSECOND可以用来指定运行的具体时刻。

其他的还有MONTHLY、WEEKLY、DAILY、HOURLY、MINUTELY、SECONDLY

举例说明:

每年的1月14和3月10日的下午3点10分5秒执行,执行三年:

repeat_interval => 'FREQ=YEARLY;INTERVAL=3;BYYEARDAY=14,-297;BYHOUR=15;BYMINUTE=10;BYSECOND=5',

MONTHLY:以月为单位,设置每个月的哪天执行:

每个月的1日、3日下午3点10分5秒执行,执行三个月:

repeat_interval => 'FREQ=MONTHLY;INTERVAL=3;BYMONTHDAY=1,3;BYHOUR=15;BYMINUTE=10;BYSECOND=5',

每周二周三下午3点10分5秒执行,执行三周:

repeat_interval => 'FREQ=WEEKLY;INTERVAL=3;BYDAY=TUE,WED;BYHOUR=15;BYMINUTE=10;BYSECOND=5',

每天下午3点10分5秒执行,执行三天

repeat_interval => 'FREQ=DAILY;INTERVAL=3;BYHOUR=15;BYMINUTE=10;BYSECOND=5',

从第一次执行的时候开始每小时执行一次,执行三次:(MINUTELY、SECONDLY和此类似,就不写了)

repeat_interval => 'FREQ=HOURLY;INTERVAL=3',

调用当时执行一次,不重复执行:

repeat_interval => null,

start_date设置生效时间:

立即生效

start_date => systimestamp at time zone '+8:00',

2014-03-15 下午五点生效:

start_date => to_timestamp_tz('2014-03-15 17:00:00 +8:00', 'YYYY-MM-DD HH24:MI:SS TZH:TZM'),

end_date设置schedule失效时间:

如果没有失效时间则不用设置此行。

2014-03-15下午九点结束:

end_date => to_timestamp_tz('2014-03-15 21:10:00 +8:00', 'YYYY-MM-DD HH24:MI:SS TZH:TZM'),

comments 对于scheduler的一些描述,没有可以不写。

schedule_name:schedule的所属用户和名字

sys用户的,名字为IDX_REBUILD

schedule_name => '"SYS"."IDX_REBUILD"');

修改SCHEDULER:

BEGIN

sys.dbms_scheduler.set_attribute( name => '"SYS"."DAILYREBUILD"', attribute => 'repeat_interval', value => 'FREQ=WEEKLY;BYHOUR=14;BYMINUTE=0;BYSECOND=0');

sys.dbms_scheduler.set_attribute( name => '"SYS"."DAILYREBUILD"', attribute => 'start_date', value => systimestamp at time zone '+8:00');

sys.dbms_scheduler.set_attribute( name => '"SYS"."DAILYREBUILD"', attribute => 'end_date', value => to_timestamp_tz('2014-03-15 +8:00', 'YYYY-MM-DD TZH:TZM'));

END;

name :修改的scheduler的所属用户以及名字

attribute:修改的参数名

value:修改后的参数值

删除SCHEDULER:

BEGIN

dbms_scheduler.drop_schedule( schedule_name => ’DAILYREBUILD’, force => FALSE);

END;

只有两个参数

schedule_name:schedule的名字

force:如果是FALSE则如果有其他的job在使用这个schedule就不会删除这个schedule,如果是TRUE则不管有没有其他job使用这个schedule都会将这个schedule删除。

本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

时间: 2024-09-20 00:26:46

Oracle中SCHEDULER的使用的相关文章

Oracle中基于SCHEDULER的job

基于scheduler的job的设置,基本的创建脚本: sys.dbms_scheduler.create_job( job_name => '"SYS"."REBUILD_JOB1"', program_name => '"SYS"."EMP_IND_REBUILD"', schedule_name => '"SYS"."DAILYREBUILD"', job_cla

关于java判断oracle中的表是否存在,不存在则创建一个表的问题

问题描述 关于java判断oracle中的表是否存在,不存在则创建一个表的问题 代码如下try{ Class.forName(""oracle.jdbc.driver.OracleDriver""); String url = ""jdbc:oracle:thin:@""+localhost+"":""+port+"":""+dbname; con

用sqoop将oracle中的表导入hadoop出现如图问题 求解决方案!

问题描述 用sqoop将oracle中的表导入hadoop出现如图问题 求解决方案! 解决方案 http://www.linuxidc.com/Linux/2014-02/96678.htm 照这个链接再搞一下 解决方案二: 我当初就是照他的方案弄得 不知道为什么连接不上去

在Oracle中计算时间差的方法

如何在Oracle中计算时间差呢?计算时间差是Oracle DATA数据类型的一个常见问题.Oracle支持日期计算,你可以创建诸如"日期1-日期2"这样的表达式来计算这两个日期之间的时间差. 一旦你发现了时间差异,你可以使用简单的技巧来以天.小时.分钟或者秒为单位来计算时间差.为了得到数据差,你必须选择合适的时间度量单位,这样就可以进行数据格式隐藏. 使用完善复杂的转换函数来转换日期是一个诱惑,但是你会发现这不是最好的解决方法. round(to_number(end-date-st

在ORACLE中移动数据库文件

在ORACLE中移动数据库文件 ---- ORACLE数据库由数据文件,控制文件和联机日志文件三种文件组成.由于磁盘空间的变化,或者基于数据库磁盘I/O性能的调整等,数据库管理员可能会考虑移动数据库文件.下面以UNIX平台为例,分别讨论三种数据库文件的移动方法. ---- 一.移动数据文件: ---- 可以用ALTER DATABASE,ALTER TABLESPACE两种方法移动数据文件. ---- 1. ALTER DATABASE方法: ---- 用此方法,可以移动任何表空间的数据文件.

ORACLE中序列-sequence的应用

oracle oracle中没有象Acces中自动编号的字段类型,所以在oracle中要想用一个字段自动增值,还比较麻烦,在此提供给大家一个方法,利用序列,来完成字段的自动增加,下边介绍一下怎么创建序列,使用序列,和删除序列. 1.创建序列--------------create sequence  create sequence  Seq_AutoID   //所起序列名叫 Seq_AutoID ,需要记住此序列名,以后方可调用 minvalue   1   //最小值从1开始 可以根据自己的

ORACLE中字符串比较

oracle|比较|字符串  在ORACLE中,将空字符串视为NULL,任何值与NULL比较结果都为NULL.如此一来,在比较两个字符串的时候就会出现意外.请看以下的例子:DECLARE     i VARCHAR2(10) := NULL;    v VARCHAR2(10) := 'ABC';BEGIN    IF(i = v) THEN        DBMS_OUTPUT.PUT_LINE('相等');    ELSE        DBMS_OUTPUT.PUT_LINE('不等');

Oracle Faq(如何在ORACLE中更改表的列名和顺序 )

oracle 如需转载,请注明出处!用过ORACLE的人都知道,要想在ORACLE中更改表的列名和顺序可是一件很烦琐的事,下面给大家提供一种简单的方法. SQL> select object_id from all_objects where owner='SCOTT' and object_name='T1'; OBJECT_ID----------6067SQL> select obj#,col#,name from sys.col$ where obj#=6067; OBJ# COL#-

用ASP.NET 2.0在Oracle中存取图片(文件)的操作

asp.net|oracle 有时由于某种需要(如安全性)须将图片或文件存放在数据库中,当然一般情况下特别是文件比较大的时候很多人不提倡将文件以二进制的形式存放在数据库中的,现将Oracle中文件的存取整理如下(思路和在SQL Server2000中存取一样,存储时在数据中存放图片或文件的二进制字节流,读出时将数据库中对应字段读取到字节数据,然后输出):       1.在TOAD或SQLPlus中创建一下数据库表. 1CREATE TABLE TEST_TABLE2(3  ID     VAR