Oracle数据库调度器 (Oracle Database Scheduler)
- 在数据库管理系统中,数据库调度器负责调度和执行数据库中的存储过程、触发器、事件等。
- 它可以确保这些操作在正确的时间和条件下得到执行,以满足业务需求。
1、授权用户权限
-- 创建目录对象 tmp_dir
CREATE OR REPLACE DIRECTORY tmp_dir AS '/tmp';
-- 授予用户权限
GRANT READ,WRITE ON DIRECTORY tmp_dir TO hr;
GRANT CREATE JOB TO hr;
GRANT CREATE EXTERNAL JOB TO hr;
2、创建一个测试表
创建一个测试表 t_job_oggdata
conn hr/hr@orcl
CREATE TABLE t_job_oggdata
( scheduler_ID NUMBER CONSTRAINT PK_t_job_oggdata_ID PRIMARY KEY,
Infoment VARCHAR2(50),
sysguid VARCHAR(50) DEFAULT sys_guid(),
createDT DATE DEFAULT SYSDATE,
CONSTRAINT UQ_uniqueKeyguid UNIQUE(sysguid)
);
3、创建序列SEQUENCE及存储过程PROCEDURE
创建序列SEQUENCE SEQ_t_job_oggdataID 及存储过程PROCEDURE P_TestSchedulerJobs
-- 创建序列SEQUENCE SEQ_t_job_oggdataID
CREATE SEQUENCE SEQ_t_job_oggdataID MINVALUE 1 MAXVALUE 999999999999 START WITH 1 CYCLE NOCACHE;
-- 创建存储过程PROCEDURE P_TestSchedulerJobs
CREATE OR REPLACE PROCEDURE P_TestSchedulerJobs
AS
BEGIN
INSERT INTO t_job_oggdata(scheduler_ID,Infoment)
VALUES (SEQ_t_job_oggdataID.nextval,SEQ_t_job_oggdataID.currval||'_scheduler_jobs_ID ');
COMMIT;
END P_TestSchedulerJobs;
/
4、创建一个 SCHEDULER Job(创建 JOb 默认不运行)
创建一个 SCHEDULER Job,时间间隔为每分钟执行一次
BEGIN
DBMS_SCHEDULER.CREATE_JOB(JOB_NAME => 'AddSchedulerJobs',
JOB_TYPE => 'stored_procedure',
JOB_ACTION => 'P_TestSchedulerJobs',
START_DATE => SYSDATE,
REPEAT_INTERVAL => 'FREQ=MINUTELY;INTERVAL=1');
END;
/
5、查询 scheduler JOB
-- sys用户查
select * from dba_scheduler_jobs where owner=UPPER('sys') AND job_name=UPPER('AddSchedulerJobs');
-- hr用户查
select * from user_scheduler_jobs where job_name=UPPER('AddSchedulerJobs');
select * from t_job_oggdata;
6、使用 scheduler 管理 JOB
6.1、启动 JOB
begin
dbms_scheduler.enable('AddSchedulerJobs');
end;
/
PL/SQL procedure successfully completed.
-- hr用户下查user_scheduler_jobs
HR<