参考官方文档:
https://docs.oracle.com/en/database/oracle/oracle-database/20/admin/administering-oracle-scheduler.html#GUID-70A0379C-99CE-4508-947F-BE7EA3D45A13
任务:创建一个定时任务,每秒钟向表中插入一行数据,记录时间。
1、建表空间
create tablespace testtbs datafile ‘/oracle/orcl/testtbs01.dbf’ size 10m autoextend on;
2、建用户
create user testu1 default tablespace testtbs identified by testu1;
grant resource,connect to testu1;
grant create job to testu1;
3、建表
create table test_t1(id int, create_date date);
4、创建存储过程
create or replace procedure test_p1
is
begin
insert into test_t1 values(1,sysdate);
commit;
end test_p1;
/
Procedure created.
5、创建一个JOB
begin
dbms_scheduler.create_job (
job_name => ‘test_job1’,
job_type => ‘STORED_PROCEDURE’,
job_action => ‘TEST_P1’,
start_date => sysdate,
repeat_interval => ‘FREQ=MINUTELY;INTERVAL=1’,
enabled => true
);
end;
/
PL/SQL procedure successfully completed.
参数说明:
job_name : 必选, 任务名称
job_type : 必选, 任务类型(
PLSQL_BLOCK, – 执行一个PL/SQL匿名快
STORED_PROCEDURE, – 执行一个存储过程
EXECUTABLE, – 执行一个外部程序
CHAIN – 执行一个CHAIN
)
job_action : 必选, 任务内容, 与job_type配合使用
如果job_type指定的是存储过程,就需要指定存储过程的名字;
如果job_type指定的是PL/SQL块,就需要输入完整的PL/SQL代码;
如果job_type指定的外部程序,就需要输入script的名称或者操作系统的指令名
start_date : 可选, 首次执行时间, 为空时表示立即执行
repeat_interval : 可选, 执行频率, 为空时表示只执行一次(
FREQ=MINUTELY; – 表示间隔单位, 可选值有YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY, SECONDLY
INTERVAL=1 – 表示间隔周期
)
enabled : 可选, 是否启用任务
6、调用存储过程
call test_p1();
7、查询当前JOB
select * from v$access where owner=‘ANGEL’;
select OWNER,JOB_NAME,STATE from DBA_SCHEDULER_JOBS where owner=‘ANGEL’;
—scheduled : The job is scheduled to be executed.
—查询JOB状态
SELECT * FROM DBA_SCHEDULER_JOB_DESTS WHERE OWNER=‘ANGEL’;
—查询每次执行详情
select * from USER_SCHEDULER_JOB_RUN_DETAILS;
8、禁用JOB
BEGIN
DBMS_SCHEDULER.DISABLE(‘TEST_JOB1’);
END;
/