DBMS_SCHEDULER
Vastbase在Oracle兼容模式下支持DBMS_SCHEDULER内置包,其提供了一组可以从任何PL/pgSQL程序调用的调度函数和过程。
注意事项
该功能仅在数据库兼容模式为Oracle时支持(即数据库初始化时指定DBCOMPATIBILITY='A')。
不支持记录job_log全量日志,日志默认不会删除。
DBMS_SCHEDULER内置包的权限与创建它的对象相同。
子程序
该内置包包含以下存储过程:
存储过程名 | 描述 |
---|---|
CREATE_JOB | 创建单个作业。 |
RUN_JOB | 立即运行作业。 |
STOP_JOB | 停止当前正在运行的作业或作业类中的所有作业。 |
DROP_JOB | 删除一个或多个作业类中的一个或多个作业或所有作业。删除作业也会丢弃为该作业设置的所有参数值。 |
CREATE_SCHEDULE | 创建计划。 |
DROP_SCHEDULE | 删除计划。 |
CREATE_PROGRAM | 创建一个程序。 |
DROP_PROGRAM | 删除程序。删除程序时,也会删除与程序相关的所有参数。 |
CREATE_JOB_CLASS | 创建一个作业类。作业类在【SYS模式】中创建。 |
DROP_JOB_CLASS | 删除作业类。删除作业类意味着将从数据库中删除有关作业类的所有元数据。 |
CREATE_JOB
功能说明
创建一个作业。可通过ALL_SCHEDULER_JOBS视图查看通过DBMS_SCHEDULER.CREATE_JOB创建的JOB对象。
语法格式
在不使用现有程序(PROGRAM)或调度(SCHEDULE)的情况下创建作业:
DBMS_SCHEDULER.CREATE_JOB ( job_name IN VARCHAR2, job_type IN VARCHAR2, job_action IN VARCHAR2, number_of_arguments IN PLS_INTEGER DEFAULT 0, start_date IN TIMESTAMP WITH TIME ZONE DEFAULT NULL, repeat_interval IN VARCHAR2 DEFAULT NULL, end_date IN TIMESTAMP WITH TIME ZONE DEFAULT NULL, job_class IN VARCHAR2 DEFAULT 'DEFAULT_JOB_CLASS', enabled IN BOOLEAN DEFAULT FALSE, auto_drop IN BOOLEAN DEFAULT TRUE, comments IN VARCHAR2 DEFAULT NULL, credential_name IN VARCHAR2 DEFAULT NULL, destination_name IN VARCHAR2 DEFAULT NULL);
使用命名调度(SCHEDULE)和命名程序(PROGRAM)对象创建作业:
DBMS_SCHEDULER.CREATE_JOB ( job_name IN VARCHAR2, program_name IN VARCHAR2, schedule_name IN VARCHAR2, job_class IN VARCHAR2 DEFAULT 'DEFAULT_JOB_CLASS', enabled IN BOOLEAN DEFAULT FALSE, auto_drop IN BOOLEAN DEFAULT TRUE, comments IN VARCHAR2 DEFAULT NULL, job_style IN VARCHAR2 DEFAULT 'REGULAR', credential_name IN VARCHAR2 DEFAULT NULL, destination_name IN VARCHAR2 DEFAULT NULL);
使用命名程序(PROGRAM)和内联调度(SCHEDULE)创建作业:
DBMS_SCHEDULER.CREATE_JOB ( job_name IN VARCHAR2, program_name IN VARCHAR2, start_date IN TIMESTAMP WITH TIME ZONE DEFAULT NULL, repeat_interval IN VARCHAR2 DEFAULT NULL, end_date IN TIMESTAMP WITH TIME ZONE DEFAULT NULL, job_class IN VARCHAR2 DEFAULT 'DEFAULT_JOB_CLASS', enabled IN BOOLEAN DEFAULT FALSE, auto_drop IN BOOLEAN DEFAULT TRUE, comments IN VARCHAR2 DEFAULT NULL, job_style IN VARCHAR2 DEFAULT 'REGULAR', credential_name IN VARCHAR2 DEFAULT NULL, destination_name IN VARCHAR2 DEFAULT NULL);
使用命名调度(SCHEDULE)和内联程序(PROGRAM)创建作业:
DBMS_SCHEDULER.CREATE_JOB ( job_name IN VARCHAR2, schedule_name IN VARCHAR2, job_type IN VARCHAR2, job_action IN VARCHAR2, number_of_arguments IN PLS_INTEGER DEFAULT 0, job_class IN VARCHAR2 DEFAULT 'DEFAULT_JOB_CLASS', enabled IN BOOLEAN DEFAULT FALSE, auto_drop IN BOOLEAN DEFAULT TRUE, comments IN VARCHAR2 DEFAULT NULL, credential_name IN VARCHAR2 DEFAULT NULL, destination_name IN VARCHAR2 DEFAULT NULL);
使用内联程序(PROGRAM)和事件创建作业:
本函数仅做兼容性,功能暂不支持。
DBMS_SCHEDULER.CREATE_JOB ( job_name IN VARCHAR2, job_type IN VARCHAR2, job_action IN VARCHAR2, number_of_arguments IN PLS_INTEGER DEFAULT 0, start_date IN TIMESTAMP WITH TIME ZONE DEFAULT NULL, event_condition IN VARCHAR2 DEFAULT NULL, queue_spec IN VARCHAR2, end_date IN TIMESTAMP WITH TIME ZONE DEFAULT NULL, job_class IN VARCHAR2 DEFAULT 'DEFAULT_JOB_CLASS', enabled IN BOOLEAN DEFAULT FALSE, auto_drop IN BOOLEAN DEFAULT TRUE, comments IN VARCHAR2 DEFAULT NULL, credential_name IN VARCHAR2 DEFAULT NULL, destination_name IN VARCHAR2 DEFAULT NULL);
使用命名程序(PROGRAM)和事件创建作业:
本函数仅做兼容性,功能暂不支持。
DBMS_SCHEDULER.CREATE_JOB ( job_name IN VARCHAR2, program_name IN VARCHAR2, start_date IN TIMESTAMP WITH TIME ZONE, event_condition IN VARCHAR2, queue_spec IN VARCHAR2, end_date IN TIMESTAMP WITH TIME ZONE, job_class IN VARCHAR2 DEFAULT 'DEFAULT_JOB_CLASS', enabled IN BOOLEAN DEFAULT FALSE, auto_drop IN BOOLEAN DEFAULT TRUE, comments IN VARCHAR2 DEFAULT NULL, job_style IN VARCHAR2 DEFAULT 'REGULAR', credential_name IN VARCHAR2 DEFAULT NULL, destination_name IN VARCHAR2 DEFAULT NULL);
参数说明
job_name
指定作业名称。
要求在包模式下名称中名称唯一,在其它模式下使用时,必须加模式名前缀。若未设置,则报错。
job_type
指定要创建的作业类型。
创建作业类型。未设置则报错。可选值为如下:
'PLSQL_BLOCK'
指定作业是匿名PL/pgSQL块。当作业或程序类型为PLSQL_BLOCK时,不支持作业或程序参数,在这种情况下参数的数量必须为0。
'STORE_PROCEDURE'
指定作业是PL/pgSQL或Java存储过程,或者外部C程序,仅支持存储过程,而不支持具有返回值的函数。
job_action
指定作业的操作。可能的动作如下:
对于 PL/pgSQL 语句块,程序动作就是去执行 PL/pgSQL代码。
对于存储过程,程序动作是存储过程的名称。如果存储过程与作业不属于同一个模式,则需要指定存储过程名称的时候,指定模式名。
number_of_arguments
指定作业预期的参数个数。若未设置,则默认为0。一个程序最多可以指定 255 个参数。
start_date
作业起始日期。如果START_DATE和REPEAT_INTERVAL都为NULL,表示启用后立即执行。
repeat_interval
作业重复执行及间隔时长。仅支持日历语法格式。
end_date
作业结束日期。
job_class
工作类的名称,可参见DBMS_SCHEDULER. CREATE_JOB_CLASS。
enabled
指定是否已启用作业。可选项为TRUE或FALSE。默认为FALSE,即作业创建为已禁用,意味着已捕获有关作业的元数据,且作业作为数据库对象存在,但SCHEDULER会忽略改作业。
若要使得SCHEDULER处理作业,则必须启用作业,用户可通过将此参数设置为TRUE来启用作业。
- 作业创建时设置为TRUE,则会检查作业是否有效。作业启用时,如果作业所使用的PROGRAM无效,作业创建失败。
- 如果为NULL,则取值为FALSE。
auto_drop
此标志(如果为TRUE )会导致作业在完成或自动禁用后自动删除。默认为TRUE。自动删除的条件如下:
作业的结束日期已经过期。
作业不是重复执行作业,并且只执行一次。
如果此标志设置为FALSE ,则不会删除作业,并保留其元数据,直到使用DBMS_SCHEDULER.DROP_JOB过程显式删除作业。
job_style
正在创建的作业的样式。此参数可以具有以下值之一:
REGULAR:创建一个常规作业。这是默认设置。
LIGHTWEIGHT:创建轻量级的作业。
IN_MEMORY_RUNTIME:创建内存运行时作业。
IN_MEMORY_FULL:创建内存已满作业。
comments
程序的相关评论或者注释。默认为空。
credential_name
与作业一起使用的默认凭据。仅适用于远程数据库作业、远程外部作业、本地外部作业、脚本作业以及处理文件到达事件的基于事件的作业。凭证必须存在。
对于本地数据库作业,其必须为NULL。
destination_name
作业的数据库目标或外部目标。仅用于远程数据库作业和远程外部作业。对于在本地数据库上运行的作业或本地外部作业(可执行文件),必须为NULL 。
1、创建测试表并插入数据。
create table schedule_tab_caseid1(aa int); create or replace procedure proc_caseid as BEGIN for i in 5..10 loop insert into schedule_tab_caseid1 values (i); end loop; END; /
2、创建定时任务。
begin DBMS_SCHEDULER.CREATE_JOB( job_name => 'schedule_create_job_caseid', job_type => 'STORED_PROCEDURE', job_action => 'proc_caseid', repeat_interval => 'freq=SECONDLY; interval=10', start_date => '2023-08-01 11:53:30', End_Date => Null, auto_drop => FALSE, enabled => TRUE, comments => 'My new job'); end; /
3、查看当前测试表中总数据量。
select count(*) from schedule_tab_caseid1;
查询结果为如下:
count ------- 6 (1 row)
4、运行JOB作业,并等待10秒。
select dbms_scheduler.run_job('schedule_create_job_caseid');
上述语句执行完成后应等待10秒以上。建议用户在使用时设置分钟别及以上的等待间隔,即在创建定时任务CREATE_JOB时指定的
repeat_interval => 'freq=SECONDLY; interval=10'
中freq取值为minutely、hourly等级别的间隔。5、查看JOB执行结果。
select count(*) from schedule_tab_caseid1;
返回结果为如下:
count ------- 12 (1 row) ANONYMOUS BLOCK EXECUTE
6、停止JOB。
select dbms_scheduler.stop_job('schedule_create_job_caseid');
7、删除JOB。
select dbms_scheduler.drop_job('schedule_create_job_caseid');
RUN_JOB
语法格式
PROCEDURE RUN_JOB ( JOB_NAME IN VARCHAR, USE_CURRENT_SESSION IN BOOLEAN DEFAULT TRUE );
参数说明
JOB_NAME
待运行的作业名。
USE_CURRENT_SESSION
作业是否运行在和存储过程被调用的同一个会话中。
如果为 NULL,则取值为FALSE。
示例
参见DBMS_SCHEDULER.CREATE_JOB的示例。
STOP_JOB
语法格式
PROCEDURE STOP_JOB ( JOB_NAME IN VARCHAR, FORCE IN BOOLEAN DEFAULT FALSE, COMMIT_SEMANTICS IN VARCHAR DEFAULT 'STOP_ON_FIRST_ERROR' );
参数说明
JOB_NAME
待停止的作业名。
force
如果force设置为TRUE ,则SCHEDULER首先尝试停止正在运行的作业实例(通过在force标志设置为false情况下发出STOP_JOB调用),然后删除作业。
如果为NULL,则取值为FALSE。
COMMIT_SEMANTICS
提交语义。
示例
参见DBMS_SCHEDULER.CREATE_JOB的示例。
DROP_JOB
语法格式
PROCEDURE DBMS_SCHEDULER.DROP_JOB( JOB_NAME IN VARCHAR, FORCE IN BOOLEAN DEFAULT FALSE, DEFER IN BOOLEAN DEFAULT FALSE, COMMIT_SEMANTICS IN VARCHAR2 DEFAULT 'STOP_ON_FIRST_ERROR' );
注意事项
暂不支持drop_job一次删除多个job任务。
参数说明
JOB_NAME
待删除的作业名。
force
如果force设置为TRUE ,则SCHEDULER首先尝试停止正在运行的作业实例(通过在force标志设置为false情况下发出STOP_JOB调用),然后删除作业。
如果为NULL,则取值为FALSE。
DEFER
设为TRUE,调度运行正在运行的作业完成,然后删除。如果为 NULL,则取值为FALSE。参数DEFER和参数FORCE 都设为 TRUE 时无意义,因此不允许同时设为 TRUE。
COMMIT_SEMANTICS
提交语义。
示例
参见DBMS_SCHEDULER.CREATE_JOB的示例。
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的设置。START_DATE用于决定调度的第一个实例。
REPEATE_INTERVAL
调度重复间隔,用于指定调用隔多久重复一次。它是基于日历语法的表达式。对于命名的调度,REPEATE_INTERVAL不支持 PL/pgSQL表达式。
END_DATE
作业停止运行时间。如果为未设置,作业则一直有效。
COMMENTS
调度相关的评论或注释。默认为空。
1、创建测试相关表并插入数据。
create table schedule_tab_caseid2(aa int); create or replace procedure proc_caseid as BEGIN for i in 5..10 loop insert into schedule_tab_caseid2 values (i); end loop; END; /
2、创建SCHEDULE。
begin DBMS_SCHEDULER.CREATE_SCHEDULE ( schedule_name => 'schedule_create_schedule_caseid_1', start_date => '2023-08-01 11:53:30', repeat_interval => 'freq=SECONDLY; interval=10', End_Date => Null, comments => 'My new schedule_1'); end; / begin DBMS_SCHEDULER.CREATE_SCHEDULE ( schedule_name => 'schedule_create_schedule_caseid_2', start_date => '2023-08-01 11:53:30', repeat_interval => 'freq=SECONDLY; interval=10', End_Date => Null, comments => 'My new schedule_2'); end; /
3、创建定时任务。
BEGIN DBMS_SCHEDULER.CREATE_JOB( job_name => 'schedule_create_job_caseid_1', schedule_name => 'schedule_create_schedule_caseid_1', job_type => 'STORED_PROCEDURE', job_action => 'proc_caseid', job_class => 'DEFAULT_JOB_CLASS', enabled => FALSE, auto_drop => FALSE, comments => 'My new job_1', destination_name => 'My new job_1'); END; / BEGIN DBMS_SCHEDULER.CREATE_JOB( job_name => 'schedule_create_job_caseid_2', schedule_name => 'schedule_create_schedule_caseid_2', job_type => 'STORED_PROCEDURE', job_action => 'proc_caseid', job_class => 'DEFAULT_JOB_CLASS', enabled => FALSE, auto_drop => FALSE, comments => 'My new job_2', destination_name => 'My new job_2'); END; /
4、查看当前测试表中的数据量。
select count(*) from schedule_tab_caseid2;
查询结果为如下:
count ------- 0 (1 row)
5、执行SCHEDULE。
select dbms_scheduler.run_job('schedule_create_job_caseid_1'); select dbms_scheduler.run_job('schedule_create_job_caseid_2');
6、查看视图。
\x on --开启列式展示查询结果 select job_name, job_style, program_name, job_type, job_action, schedule_name, repeat_interval, job_class, auto_drop,enabled from all_scheduler_jobs where job_name like 'schedule_create_job_caseid_%'; \x off --关闭列式展示查询结果
结果为如下:
-[ RECORD 1 ]---+-------------------------------------------- job_name | schedule_create_job_caseid_1 job_style | program_name | inline_program_schedule_create_job_caseid_1 job_type | STORED_PROCEDURE job_action | proc_caseid schedule_name | schedule_create_schedule_caseid_1 repeat_interval | freq=SECONDLY; interval=10 job_class | DEFAULT_JOB_CLASS auto_drop | false enabled | f -[ RECORD 2 ]---+-------------------------------------------- job_name | schedule_create_job_caseid_2 job_style | program_name | inline_program_schedule_create_job_caseid_2 job_type | STORED_PROCEDURE job_action | proc_caseid schedule_name | schedule_create_schedule_caseid_2 repeat_interval | freq=SECONDLY; interval=10 job_class | DEFAULT_JOB_CLASS auto_drop | false enabled | f
7、删除JOB和SCHEDULE 。
select dbms_scheduler.drop_job('schedule_create_job_caseid_1'); select dbms_scheduler.drop_job('schedule_create_job_caseid_2'); select dbms_scheduler.drop_schedule('schedule_create_schedule_caseid_1'); select dbms_scheduler.drop_schedule('schedule_create_schedule_caseid_2');
8、查看视图。
select job_name, job_style, program_name, job_type, job_action, schedule_name, repeat_interval, job_class, auto_drop,enabled from all_scheduler_jobs where job_name like 'schedule_create_job_caseid_%';
结果为如下:
job_name | job_style | program_name | job_type | job_action | schedule_n ame | repeat_interval | job_class | auto_drop | enabled ----------+-----------+--------------+----------+------------+----------- ----+-----------------+-----------+-----------+--------- (0 rows)
DROP_SCHEDULE
语法格式
PROCEDURE DBMS_SCHEDULER.DROP_SCHEDULE( SCHEDULE_NAME IN VARCHAR, FORCE IN BOOLEAN DEFAULT FALSE );
参数说明
SCHEDULE_NAME
调度名称。仅支持单独一个调度名称。
force
如果force设置为FALSE,则任何作业或窗口都不能引用该调度,否则将发生错误。
如果force设置为TRUE,则在删除计划之前将禁用使用此计划的任何作业或窗口。运行作业和打开指向计划的窗口不受影响。
注意事项
用户必须是要删除的计划的所有者,或者具有计划的ALTER权限或CREATE ANY JOB权限。
示例
参见DBMS_SCHEDULER.CREATE_SCHEDULE的示例。
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和STORED_PROCEDURE。
PROGRAM_ACTION
定义程序的动作。可能的动作如下:
对于PL/pgSQL语句块,程序动作就是去执行PL/pgSQL代码。
对于存储过程,程序动作是存储过程的名称。如果存储过程与作业不属于同一个模式,则需要指定存储过程名称的时候,指定模式名。
number_of_arguments
定义程序包含的参数的个数。若未设置,则默认为 0。一个程序最多可以指定 255 个参数。
enabled
指定程序是否以激活的方式创建。若设置为 TRUE,则执行合法性检测,检测成功,则创建程序并置ENABLED状态。默认设置为 FALSE,那么程序不以激活的方式创建,可以在程序使用之前通过调用 ENABLE 过程来激活。如果为NULL,则取值为FALSE。
COMMENTS
程序的相关评论或者注释。默认为空。
1、创建测试表并插入数据。
create table schedule_tab_caseid3(aa int); create or replace procedure proc_caseid as BEGIN for i in 5..10 loop insert into schedule_tab_caseid3 values (i); end loop; END; /
2、创建PROGRAM。
begin DBMS_SCHEDULER.CREATE_PROGRAM ( program_name => 'schedule_create_program_caseid', program_type => 'PLSQL_BLOCK', program_action => 'begin proc_caseid;end;', enabled => TRUE, comments => 'My new program'); end; /
3、创建定时任务。
BEGIN DBMS_SCHEDULER.CREATE_JOB( job_name => 'schedule_create_job_caseid', program_name => 'schedule_create_program_caseid', job_class => 'DEFAULT_JOB_CLASS', repeat_interval => 'FREQ=minutely; INTERVAL=3', enabled => FALSE, auto_drop => FALSE, comments => 'My new job', job_style => 'STORED_PROCEDURE', destination_name => 'My new job'); END; /
4、查看当前测试表的数据量。
select count(*) from schedule_tab_caseid3;
查询结果为如下:
count ------- 0 (1 row)
5、执行JOB。
select dbms_scheduler.run_job('schedule_create_job_caseid');
6、查看任务执行结果。
select count(*) from schedule_tab_caseid3;
查询结果为如下:
count ------- 6 (1 row)
7、查看视图。
\x on --开启列式展示查询结果 select job_name, job_style, program_name, job_type, job_action, schedule_name, repeat_interval, job_class, auto_drop,enabled from all_scheduler_jobs where job_name='schedule_create_job_caseid'; \x off --关闭列式展示查询结果
查询结果为如下:
-[ RECORD 1 ]---+------------------------------------------- job_name | schedule_create_job_caseid job_style | STORED_PROCEDURE program_name | schedule_create_program_caseid job_type | PLSQL_BLOCK job_action | begin proc_caseid;end; schedule_name | inline_schedule_schedule_create_job_caseid repeat_interval | FREQ=minutely; INTERVAL=3 job_class | DEFAULT_JOB_CLASS auto_drop | false enabled | f
8、删除程序,参数force为FALSE,则删除失败。
select dbms_scheduler.drop_program('schedule_create_program_caseid',FALSE);
错误提示为如下:
ERROR: program_name schedule_create_program_caseid refered by job schedule_create_job_caseid DETAIL: N/A CONTEXT: referenced column: drop_program
9、执行JOB。
select dbms_scheduler.run_job('schedule_create_job_caseid');
10、查看任务执行结果。
select count(*) from schedule_tab_caseid3;
返回结果为如下:
count ------- 12 (1 row)
11、删除JOB和PROGRAM。
select dbms_scheduler.drop_job('schedule_create_job_caseid'); select dbms_scheduler.drop_program('schedule_create_program_caseid');
12、查看视图。
select job_name, job_style, program_name, job_type, job_action, schedule_name, repeat_interval, job_class, auto_drop,enabled from all_scheduler_jobs where job_name='schedule_create_job_caseid';
返回结果为如下:
job_name | job_style | program_name | job_type | job_action | schedule_n ame | repeat_interval | job_class | auto_drop | enabled ----------+-----------+--------------+----------+------------+----------- ----+-----------------+-----------+-----------+--------- (0 rows)
DROP_PROGRAM
语法格式
PROCEDURE DBMS_SCHEDULER.DROP_PROGRAM( PROGRAM_NAME IN VARCHAR, FORCE IN BOOLEAN DEFAULT FALSE );
参数说明
PROGRAM_NAME
待删除的程序名。
force
设为 FALSE,说明程序删除前不能被任何作业引用,否则报错。
设为TRUE,所有引用这个程序的作业在调度删除之前都将调为无效。使用该程序,且正在运行的作业不受影响,并允许继续运行。
如果为NULL,则取值为FALSE。
示例
参见DBMS_SCHEDULER.CREATE_PROGRAM的示例。
CREATE_JOB_CLASS
语法格式
DBMS_SCHEDULER.CREATE_JOB_CLASS ( job_class_name IN VARCHAR2, resource_consumer_group IN VARCHAR2 DEFAULT NULL, service IN VARCHAR2 DEFAULT NULL, logging_level IN PLS_INTEGER DEFAULT DBMS_SCHEDULER.LOGGING_RUNS, log_history IN PLS_INTEGER DEFAULT NULL, comments IN VARCHAR2 DEFAULT NULL);
参数说明
job_class_name
要分配给作业类的名称。作业类只能在SYS模式中创建。
此属性指定作业类的名称,并唯一标识作业类。该名称在SQL命名空间中必须是唯一的。例如,作业类不能与架构中的表具有相同的名称。
resource_consumer_group
此属性指定与其类关联的资源使用者组。资源使用者组是一组同步或异步会话,它们根据其处理需求组合在一起。作业类与资源使用者组具有多对一关系。作业类关联的资源使用者组确定分配给作业类的资源。
如果删除了资源使用者组,则与其关联的作业类将与默认资源使用者组相关联。
如果未指定资源使用者组,则作业类与默认资源使用者组关联。
如果在创建作业类时指定的资源使用者组不存在,则会发生错误。
service
此属性指定此类中的作业具有相关性的数据库服务。
logging_level
此属性指定记录的信息量。
log_history
此属性控制保留此类中作业的作业日志条目的天数。它有助于防止作业日志不加区别地增长。
comments
此属性用于有关作业类的可选注释。默认情况下,此属性为NULL 。
1、创建测试表并插入数据。
create table schedule_tab_caseid4(aa int); create or replace procedure proc_caseid as BEGIN for i in 5..10 loop insert into schedule_tab_caseid4 values (i); end loop; END; /
2、创建工作类。
begin DBMS_SCHEDULER.CREATE_JOB_CLASS ( job_class_name => 'schedule_create_job_class_caseid_1', logging_level => 1, log_history => NULL, comments => 'My new job class_1'); end; / begin DBMS_SCHEDULER.CREATE_JOB_CLASS ( job_class_name => 'schedule_create_job_class_caseid_2', logging_level => 1, log_history => NULL, comments => 'My new job class_2'); end; /
3、创建JOB定时任务。
BEGIN DBMS_SCHEDULER.CREATE_JOB( job_name => 'schedule_create_job_caseid_1', job_type => 'STORED_PROCEDURE', job_action => 'proc_caseid', job_class => 'schedule_create_job_class_caseid_1', start_date => '2023-08-01 11:53:30', repeat_interval => 'FREQ=minutely; INTERVAL=3', End_Date => Null, enabled => FALSE, auto_drop => FALSE, comments => 'My new job_1', destination_name => 'My new job_1'); END; / BEGIN DBMS_SCHEDULER.CREATE_JOB( job_name => 'schedule_create_job_caseid_2', job_type => 'STORED_PROCEDURE', job_action => 'proc_caseid', job_class => 'schedule_create_job_class_caseid_2', start_date => '2023-08-01 11:53:30', repeat_interval => 'FREQ=minutely; INTERVAL=3', End_Date => Null, enabled => FALSE, auto_drop => FALSE, comments => 'My new job_2', destination_name => 'My new job_2'); END; /
4、查看当前测试表中数据量。
select count(*) from schedule_tab_caseid4;
查询结果为如下:
count ------- 0 (1 row)
5、执行任务。
select dbms_scheduler.run_job('schedule_create_job_caseid_1'); select dbms_scheduler.run_job('schedule_create_job_caseid_2');'
6、查看任务执行结果。
select count(*) from schedule_tab_caseid4;
查询结果为如下:
count ------- 12 (1 row)
7、查看视图。
\x on --开启列式展示查询结果 select job_name, job_style, program_name, job_type, job_action, schedule_name, repeat_interval, job_class, auto_drop,enabled from all_scheduler_jobs where job_name like 'schedule_create_job_caseid_%'; \x off --关闭列式展示查询结果
查询结果为如下:
-[ RECORD 1 ]---+--------------------------------------------- job_name | schedule_create_job_caseid_1 job_style | program_name | inline_program_schedule_create_job_caseid_1 job_type | STORED_PROCEDURE job_action | proc_caseid schedule_name | inline_schedule_schedule_create_job_caseid_1 repeat_interval | FREQ=minutely; INTERVAL=3 job_class | schedule_create_job_class_caseid_1 auto_drop | false enabled | f -[ RECORD 2 ]---+--------------------------------------------- job_name | schedule_create_job_caseid_2 job_style | program_name | inline_program_schedule_create_job_caseid_2 job_type | STORED_PROCEDURE job_action | proc_caseid schedule_name | inline_schedule_schedule_create_job_caseid_2 repeat_interval | FREQ=minutely; INTERVAL=3 job_class | schedule_create_job_class_caseid_2 auto_drop | false enabled | f
8、删除任务和工作类。
删除任务之前删除工作类,则报错。
select dbms_scheduler.drop_job_class('schedule_create_job_class_caseid_1'); select dbms_scheduler.drop_job_class('schedule_create_job_class_caseid_2');
删除任务和工作类,则正常执行。
select dbms_scheduler.drop_job('schedule_create_job_caseid_1'); select dbms_scheduler.drop_job('schedule_create_job_caseid_2'); select dbms_scheduler.drop_job_class('schedule_create_job_class_caseid_1'); select dbms_scheduler.drop_job_class('schedule_create_job_class_caseid_2');
9、查看视图。
select job_name, job_style, program_name, job_type, job_action, schedule_name, repeat_interval, job_class, auto_drop,enabled from all_scheduler_jobs where job_name like 'schedule_create_job_caseid_%';
返回结果为如下:
job_name | job_style | program_name | job_type | job_action | schedule_n ame | repeat_interval | job_class | auto_drop | enabled ----------+-----------+--------------+----------+------------+----------- ----+-----------------+-----------+-----------+--------- (0 rows)
DROP_JOB_CLASS
语法格式
DBMS_SCHEDULER.DROP_JOB_CLASS ( job_class_name IN VARCHAR2, force IN BOOLEAN DEFAULT FALSE);
参数说明
job_class_name
工作类的名称。可以是逗号分隔的列表。
force
如果force设置为FALSE ,则任何作业都不能引用要删除的类,否则会发生错误。
如果force设置为TRUE ,则禁用属于该类的作业,并将其类设置为默认类。运行属于作业类的作业不受影响。
示例
参见DBMS_SCHEDULER.CREATE_JOB_CLASS的示例。
相关链接
ALL_SCHEDULER_JOBS、ALL_SCHEDULER_JOB_LOG、ALL_SCHEDULER_SCHEDULES、PG_JOB_LOG