VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

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_JOBSALL_SCHEDULER_JOB_LOGALL_SCHEDULER_SCHEDULESPG_JOB_LOG