执行Oracle 中 Job 的定时排程执行技巧(oracle中job定时)

执行Oracle 中 Job 的定时排程执行技巧

在Oracle 数据库中,Job 是一种非常有用的工具,可以用来定时执行一些重复性的任务,或者是周期性的任务。Job 可以在数据库服务器上执行,非常方便,而且可以在一定程度上自动化一些数据库管理的工作。本文将介绍如何使用 Oracle 中的 Job 工具进行定时排程执行,并且给出一些实用技巧。

一、创建 Job

要使用 Job 工具,首先需要在数据库中创建一个 Job。使用如下 SQL 语句可以创建一个 Job:

BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'my_job',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN MY_PROCEDURE; END;',
start_date => SYSTIMESTAMP,
repeat_interval => 'FREQ=HOURLY; INTERVAL=1',
end_date => NULL,
enabled => TRUE,
comments => 'This is a test job.');
END;

上述代码中创建了一个名为 my_job 的 Job,类型为 PLSQL_BLOCK,表示执行一个 PL/SQL 块。块中执行的具体内容可以在 job_action 参数中指定。start_date 指定了 Job 开始时间,repeat_interval 制定了 Job 的重复执行间隔,end_date 制定了 Job 的结束时间。enabled 参数表示该 Job 是否启用,如果为 FALSE,则不会执行该 Job。

二、修改 Job

有时候需要修改已经创建的 Job,可以使用 ALTER_JOB 语句来修改 Job 的相关配置信息,例如重复执行间隔、开始时间、结束时间、启用状态等:

BEGIN
DBMS_SCHEDULER.SET_ATTRIBUTE (
name => 'my_job',
attribute => 'repeat_interval',
value => 'FREQ=MINUTELY; INTERVAL=5');
DBMS_SCHEDULER.SET_ATTRIBUTE (
name => 'my_job',
attribute => 'enabled',
value => FALSE);
END;

上述代码中先使用 SET_ATTRIBUTE 函数来修改 my_job Job 的重复执行间隔为每 5 分钟执行一次,然后将该 Job 禁用。

三、删除 Job

如果需要删除 Job,可以使用 DROP_JOB 语句,如下所示:

BEGIN
DBMS_SCHEDULER.DROP_JOB ('my_job');
END;

上述代码中删除了名为 my_job 的 Job。

四、查询 Job

如果需要查询 Job 的相关信息,可以使用如下语句查询:

SELECT * FROM dba_scheduler_jobs WHERE job_name = 'my_job';

上述语句会查询出所有名为 my_job 的 Job 的相关信息。

五、Job 的定时排程执行技巧

在使用 Job 工具时,有一些技巧可以帮助实现更加灵活和高效的定时排程执行,以下是一些常用技巧:

1. 使用 FREQ 和 INTERVAL 参数

在创建 Job 时,可以使用 FREQ 和 INTERVAL 参数来制定 Job 的定时排程。例如下面的代码指定了该 Job 每天执行一次:

BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'my_job',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN MY_PROCEDURE; END;',
start_date => SYSTIMESTAMP,
repeat_interval => 'FREQ=DLY; INTERVAL=1',
end_date => NULL,
enabled => TRUE,
comments => 'This is a test job.');
END;

其他常用的 FREQ 和 INTERVAL 参数包括:

– HOURLY:每小时执行一次;

– MINUTELY:每分钟执行一次;

– SECONDLY:每秒钟执行一次;

– BYHOUR=n:在第 n 小时执行;

– BYMINUTE=n:在第 n 分钟执行;

– BYSECOND=n:在第 n 秒执行。

2. 使用 START_DATE 和 END_DATE

在创建 Job 时,可以使用 START_DATE 和 END_DATE 参数来制定 Job 的开始时间和结束时间。在 START_DATE 之前和 END_DATE 之后,该 Job 不会执行。例如下面的代码指定了该 Job 从 2022 年 1 月 1 日开始执行,到 2022 年 12 月 31 日结束执行:

BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'my_job',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN MY_PROCEDURE; END;',
start_date => TO_DATE('2022-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'),
repeat_interval => 'FREQ=DLY; INTERVAL=1',
end_date => TO_DATE('2022-12-31 23:59:59', 'YYYY-MM-DD HH24:MI:SS'),
enabled => TRUE,
comments => 'This is a test job.');
END;

3. 使用 EXCLUDE 和 INCLUDE 参数

在创建 Job 时,可以使用 EXCLUDE 和 INCLUDE 参数来排除或包含某些日期时间点,以实现更加精细的定时排程。例如下面的代码指定该 Job 在每天 9:00 到 18:00 之间每小时执行一次,但是在每天 12:00 到 13:00 之间不执行:

BEGIN
DBMS_SCHEDULER.CREATE_SCHEDULE (
schedule_name => 'my_schedule',
repeat_interval => 'FREQ=HOURLY; INTERVAL=1; BYHOUR=9,10,11,14,15,16,17,18; BYMINUTE=0',
start_date => SYSTIMESTAMP,
comments => 'This is a test schedule.');

DBMS_SCHEDULER.CREATE_JOB (
job_name => 'my_job',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN MY_PROCEDURE; END;',
start_date => SYSTIMESTAMP,
repeat_interval => 'FREQ=HOURLY; INTERVAL=1',
end_date => NULL,
enabled => TRUE,
comments => 'This is a test job.',
schedule_name => 'my_schedule',
exclude_time => 'FREQ=HOURLY; INTERVAL=1; BYHOUR=12,13; BYMINUTE=0');
END;

上述代码中创建了一个名为 my_schedule 的 Schedule,表示在每天 9:00 到 18:00 之间每隔一个小时执行一次。然后在创建 my_job Job 时,将 my_schedule 分配给该 Job,同时指定了一个 EXCLUDE 时间段,表示该 Job 在每天 12:00 到 13:00 之间不执行。

总结

Job 工具是 Oracle 数据库中非常有用的定时排程执行工具,可以用来执行一些重复性的任务,或者是周期性的任务。通过本文所介绍的技巧,可以让 Job 工具更加灵活和高效,为数据库管理提供更多的自动化支持。


数据运维技术 » 执行Oracle 中 Job 的定时排程执行技巧(oracle中job定时)