赞
踩
DBMS_SCHEDULER
DBMS_SCHEDULER包也是兼容Oracle产品主要作业功能的系统包。DBMS_SCHEDULER包提供一系列调度相关的存储过程及方法供DMSQL调用,目前主要兼容ORACLE的DBMS_SCHEDULER包中常用的方法和数据字典视图。
使用方法
1.创建DBMS_SCHEDULER系统包
调用SP_INIT_DBMS_SCHEDULER_SYS创建DBMS_SCHEDULER系统包:
SP_INIT_DBMS_SCHEDULER_SYS(1);
创建完成之后,数据库模式下面多了SCHEDULER模式,该模式属于SYSDBA用户,SCHEDULER模式拥有DBMS_SCHEDULER系统包、相关表和视图。如下图所示。
2.赋予用户相关权限
调用DBMS_SCHEDULER系统包需要有执行该包的权限,使用管理员SYSDBA用户赋予XXX用户该权限。语句参考如下:
grant execute on dbms_scheduler to XXX;
SCHEDULE表示调度计划表。指定调度从什么时间开始,什么时候结束,以什么频度调度。使用DBMS_SCHEDULER.CREATE_SCHEDULE过程创建SCHEDULE。
创建的SCHEDULE对象可以在DBA_SCHEDULER_SCHEDULES或USER_SCHEDULER_SCHEDULES视图中查看。
PROGRAM表示调度应该做什么事情,支持DMSQL块和存储过程。使用DBMS_SCHEDULER.CREATE_PROGRAM创建PROGRAM。创建的PROGRAM对象,可以在视图DBA_SCHEDULER_PROGRAMS或USER_SCHEDULER_PROGRAMS中查看。
JOB表示按照指定的SCHEDULE,执行指定PROGRAM,完成用户指定的工作。使用DBMS_SCHEDULER.CREATE_JOB创建JOB。创建的JOB对象,可以在DBA_SCHEDULER_JOBS或USER_SCHEDULER_JOBS视图中查看。
创建DBMS_SCHEDULER系统包
DM数据库安装完成之后默认不创建DBMS_SCHEDULER系统包,如果要使用该系统包需要手工创建,创建或删除DBMS_SCHEDULER系统包语法如下:
void SP_INIT_DBMS_SCHEDULER_SYS ( CREATE_FLAG int )
参数详解
CREATE_FLAG为1时表示创建DBMS_SCHEDULER包;为0表示删除该系统包。
DBMS_SCHEDULER相关方法
CREATE_SCHEDULE过程
CREATE_SCHEDULE用于创建一个调度。语法如下:
PROCEDURE DBMS_SCHEDULER.CREATE_SCHEDULE( SCHEDULE_NAME IN VARCHAR, START_DATE IN TIMESTAMP WITH TIME ZONE DEFAULT NULL, REPEAT_INTERVAL IN VARCHAR, END_DATE IN TIMESTAMP WITH TIME ZONE DEFAULT NULL, COMMENTS IN VARCHAR DEFAULT NULL );
参数详解
SCHEDULE_NAME调度名称。要求在模式下名称唯一,不能为空。
START_DATE调度第一次有效日期或者时间。对于重复的调度,START_DATE是个参照值,这种情况START_DATE不是调度的开始时间,调用的开始决定于REPEATE_INTERVAL的设置。
REPEATE_INTERVAL调度重复间隔,用于指定调用隔多久重复一次。它是基于日历语法的表达式。
END_DATE作业停止运行时间。如果为未设置,作业则一直有效。
COMMENTS调度相关的描述或注释。默认为空。
CREATE_PROGRAM过程
CREATE_PROGRAM过程用于创建一个程序。语法如下:
PROCEDURE DBMS_SCHEDULER.CREATE_PROGRAM( PROGRAM_NAME IN VARCHAR, PROGRAM_TYPE IN VARCHAR, PROGRAM_ACTION IN VARCHAR, NUMBER_OF_ARGUMENTS IN INT DEFAULT 0, ENABLED IN BOOLEAN DEFAULT FALSE, COMMENTS IN VARCHAR DEFAULT NULL );
参数详解
PROGRAM_NAME程序名称。不能为空,要求在包模式下名称中名称唯一。
PROGRAM_TYPE程序类型。不能为空,支持类型如下:PLSQL_BLOCK:说明程序是一个DMSQL语句块,即DM的SQL程序设计里的语句块。此类型的程序或者作业不允许设置参数个数,也就是说设置的参数个数必须为0;STORED_PROCEURE:说明程序是一个存储过程。支持存储过程,不支持带有返回值的函数。包含输入输出或者输出参数的存储过程不支持。
PROGRAM_ACTION定义程序的动作。不能为空。可能的动作如下:对于DMSQL语句块,程序动作就是去执行DMSQL代码。对于存储过程,程序动作是存储过程的名称。如果存储过程与作业不属于同一个模式,则需要指定存储过程名称的时候,指定模式名。
NUMBER_OF_ARGUMENTS定义程序包含的参数的个数。若未设置,则默认为0。一个程序最多可以指定255个参数。
ENABLED指定程序是否以激活的方式创建。若设置为TRUE,则执行合法性检测,检测成功,则创建程序并置ENABLED状态。默认设置为FALSE,程序不以激活的方式创建,可以在程序使用之前通过调用ENABLE过程来激活。
COMMENTS程序的相关评论或者注释。默认为空。
CREATE_JOB过程
CREATE_JOB过程用来创建作业。支持三种方法创建JOB。
①不使用已经存在的程序(PROGRAM)或者调度(SCHEDULE)创建作业。语法如下:
PROCEDURE DBMS_SCHEDULER.CREATE_JOB( JOB_NAME IN VARCHAR, JOB_TYPE IN VARCHAR, JOB_ACTION IN VARCHAR, NUMBER_OF_ARGUMENTS IN INT DEFAULT 0, START_DATE IN TIMESTAMP WITH TIME ZONE DEFAULT NULL, REPEAT_INTERVAL IN VARCHAR DEFAULT NULL, END_DATE IN TIMESTAMP WITH TIME ZONE DEFAULT NULL, JOB_CLASS IN VARCHAR DEFAULT 'DEFAULT_JOB_CLASS', ENABLED IN BOOLEAN DEFAULT FALSE, AUTO_DROP IN BOOLEAN DEFAULT TRUE, COMMENTS IN VARCHAR DEFAULT NULL, CREDENTIAL_NAME IN VARCHAR DEFAULT NULL, DESTINATION_NAME IN VARCHAR DEFAULT NULL );
②使用命名程序(PROGRAM)和命名调度(SCHEDULE)创建作业。语法如下:
PROCEDURE DBMS_SCHEDULER.CREATE_JOB( JOB_NAME IN VARCHAR, PROGRAM_NAME IN VARCHAR, SCHEDULE_NAME IN VARCHAR, JOB_CLASS IN VARCHAR DEFAULT 'DEFAULT_JOB_CLASS', ENABLED IN BOOLEAN DEFAULT FALSE, AUTO_DROP IN BOOLEAN DEFAULT TRUE, COMMENTS IN VARCHAR DEFAULT NULL, JOB_STYLE IN VARCHAR DEFAULT 'REGULAR', CREDENTIAL_NAME IN VARCHAR DEFAULT NULL, DESTINATION_NAME IN VARCHAR DEFAULT NULL );
③使用命名程序(PROGRAM)和内置调度(SCHEDULE)创建作业。语法如下:
PROCEDURE DBMS_SCHEDULER.CREATE_JOB( JOB_NAME IN VARCHAR, PROGRAM_NAME IN VARCHAR, START_DATE IN TIMESTAMP WITH TIME ZONE DEFAULT NULL, REPEAT_INTERVAL IN VARCHAR DEFAULT NULL, END_DATE IN TIMESTAMP WITH TIME ZONE DEFAULT NULL, JOB_CLASS IN VARCHAR DEFAULT 'DEFAULT_JOB_CLASS', ENABLED IN BOOLEAN DEFAULT FALSE, AUTO_DROP IN BOOLEAN DEFAULT TRUE, COMMENTS IN VARCHAR DEFAULT NULL, JOB_STYLE IN VARCHAR DEFAULT 'REGULAR', CREDENTIAL_NAME IN VARCHAR DEFAULT NULL, DESTINATION_NAME IN VARCHAR DEFAULT NULL );
参数详解
JOB_NAME 作业名称。要求在包模式下名称中名称唯一,不能为空。可以使用GENERATE_JOB_NAME过程自动生成一个作业名。
JOB_TYPE、JOB_ACTION同CREATE_PROGRAM中PROGRAM_TYPE、PROGRAM_ACTION参数。不能为空。
PROGRAM_NAME,SCHEDULE_NAME 作业使用的PROGRAM和调度名称。
START_DATE,END_DATE、REPEAT_INTERVAL作业起始、结束日期和执行周期间隔。如果 START_DATE 和 REPEAT_INTERVAL 都为 NULL,表示作业在 ENABLE后立即执行。REPEAT_INTERVAL仅支持日历语法格式。
ENABLED 指定作业创建时是否启用。
AUTO_DROP 如果为TRUE,作业自动删除。默认为TRUE。自动删除的条件如下:①作业的结束日期已经过期;②作业不是重复执行作业,并且只执行一次。如果为NULL,则取值为FALSE,作业不会自动删除。
JOB_CLASS,JOB_STYLE,CREDENTIAL_NAME,DESTINATION_NAME不支持,只作兼容参数用。
日历表达式
日历表达式是Linux系统的crontab使用的格式,日历表达式分为三部分:
第一部分是频率,即“FREQ”关键字,它是必须指定的;取值YEARLY| MONTHLY | WEEKLY | DAILY | HOURLY | MINUTELY | SECONDLY。
第二部分是时间间隔,即“INTERVAL”关键字,取值范围是1-999。它是可选参数;
第三部分是附加的参数,可用于精确地指定日期和时间,也是可选参数。下面这些值都是合法的:BYMONTH,BYWEEKNO, BYYEARDAY, BYMONTHDAY, BYDAY, BYHOUR, BYMINUTE, BYSECOND。
举几个简单的日历写法。 例如:
每隔10分钟运行一次:
repeat_interval=> 'FREQ=MINUTELY; INTERVAL=10'
每天1点运行一次
repeat_interval=> 'FREQ=DAILY; BYHOUR=1'
每周的1,3,5运行
repeat_interval=> 'FREQ=WEEKLY; BYDAY=MON,WED,FRI"
每年的3,6,9,12月的1号运行:
repeat_interval=> 'FREQ=YEARLY; BYMONTH=MAR,JUN,SEP,DEC; BYMONTHDAY=1'
每月的最后一天执行一次:
repeat_interval=> 'FREQ=MONTHLY; BYMONTHDAY=-1’
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。