oracle Job 定时任务

2023-12-16 12:12:05

目录

介绍:

优点:

缺点:

使用场景:

--查看定时任务 ? ? ? ? ?

--查询存储过程

案例:

--创建一个名为t_oracle_job的表

在创建定时任务时,各个参数的含义如下:

1. `job_name`:

2. `job_type`:

3. `job_action`:

4. `start_date`:

5. `repeat_interval`:

6. `enabled`:

--每1分钟插入一条数据

创建定时任务执行结果

一分钟执行结果:

--修改定时任务3分钟执行一次

--三分钟执行结果

--暂定定时任务

--启动定时任务

--删除定时任务

--创建一个存储过程 `INSERT_JOB_PROC`,用于向 `T_ORACLE_JOB` 表中插入数据:

--创建一个定时任务,每分钟执行一次上述存储过程:

--创建定时任务INSERT_JOB_TASK执行结果

--定时任务执行存储过程执行结果

--删除存储过程


介绍:


- Oracle Job是Oracle数据库自带的任务调度器,可以在数据库中创建和管理定时任务。
- 它基于PL/SQL语言,允许用户编写存储过程或函数作为任务,并在指定的时间点或时间间隔内自动执行。
- Oracle Job提供了灵活的调度选项,可以设置任务的执行频率、时间点、重复次数等。

优点:


- 可靠性高:Oracle Job是在数据库内部运行的,可以保证任务的可靠性和稳定性。
- 灵活的调度选项:可以根据需求设置任务的执行频率和时间点,满足不同的业务需求。
- 高度可定制化:可以编写复杂的PL/SQL代码作为任务,实现更复杂的业务逻辑。
- 集成性强:Oracle Job与Oracle数据库紧密集成,可以方便地与其他数据库对象进行交互。

缺点:


- 学习成本较高:使用Oracle Job需要掌握PL/SQL语言和相关的调度语法,对于初学者来说可能需要一定的学习成本。
- 依赖于数据库:Oracle Job是依赖于数据库的,如果数据库出现故障或维护,可能会影响任务的执行。
- 缺乏跨平台支持:Oracle Job主要适用于Oracle数据库,对于其他数据库系统可能需要使用不同的调度工具。

使用场景:


- 数据清洗和转换:可以使用Oracle Job定时执行数据清洗和转换任务,保持数据的一致性和准确性。
- 数据备份和恢复:可以使用Oracle Job定时执行数据库备份任务,确保数据的安全性和可恢复性。
- 数据统计和报表生成:可以使用Oracle Job定时执行数据统计和报表生成任务,提供实时的业务数据分析和决策支持。
- 系统维护和优化:可以使用Oracle Job定时执行系统维护和优化任务,如索引重建、统计信息收集等,提高数据库性能和稳定性。

可以满足各种数据库任务的自动化需求,但需要根据具体情况权衡其优缺点并选择合适的使用场景。

--查看定时任务 ? ? ? ? ?

--ENABLED=FALSE禁用暂定 ENABLED=TRUE启动

select T.ENABLED,T.STATE,T.* from user_scheduler_jobs T;

--查询存储过程

SELECT *
FROM user_source
WHERE type = 'PROCEDURE'
AND name = 'INSERT_JOB_PROC';--存储过程名称

案例:


--创建一个名为t_oracle_job的表


-- job_name:任务名称
-- job_type:任务类型
-- job_status:任务状态
-- create_time:任务创建时间

CREATE TABLE t_oracle_job (
? job_name ? ?VARCHAR2(100),
? job_type ? ?VARCHAR2(50),
? job_status ?VARCHAR2(20),
? create_time DATE
);

在创建定时任务时,各个参数的含义如下:
1. `job_name`:

定时任务的名称,用于唯一标识该任务。


2. `job_type`:

定时任务的类型,指定为 `'PLSQL_BLOCK'` 表示使用 PL/SQL 块作为任务的执行代码。


3. `job_action`:

定时任务的执行代码,可以是一个 PL/SQL 块或一个存储过程的调用。


4. `start_date`:

定时任务的开始时间,指定为 `SYSDATE` 表示使用当前系统时间作为开始时间。


5. `repeat_interval`:

定时任务的重复间隔,指定任务执行的频率和间隔。例如 `'FREQ=MINUTELY; INTERVAL=1'` 表示每隔 1 分钟执行一次任务。


6. `enabled`:

指定定时任务是否启用,`TRUE` 表示启用,`FALSE` 表示禁用。


在 Oracle 数据库中,`job_type` 列用于表示定时任务的类型。以下是一些常见的 `job_type` 类型及其含义:

1. `PLSQL_BLOCK`:表示定时任务是一个 PL/SQL 块。可以在该块中编写自定义的 PL/SQL 代码逻辑,用于执行特定的任务。

2. `STORED_PROCEDURE`:表示定时任务是一个存储过程。可以指定要执行的存储过程名称,定时任务将会调用该存储过程来执行任务。

3. `EXECUTABLE`:表示定时任务是一个可执行文件。可以指定要执行的可执行文件的路径和参数,定时任务将会运行该可执行文件。

4. `CHAIN`:表示定时任务是一个任务链。任务链是一系列相互关联的任务,可以按照指定的顺序依次执行。

5. `SQL_SCRIPT`:表示定时任务是一个 SQL 脚本。可以指定要执行的 SQL 脚本文件的路径,定时任务将会运行该脚本。

这些不同的 `job_type` 类型可以用于不同的场景。例如,`PLSQL_BLOCK` 和 `STORED_PROCEDURE` 可以用于执行自定义的数据库逻辑,`EXECUTABLE` 可以用于执行外部的可执行文件,`CHAIN` 可以用于定义复杂的任务流程,`SQL_SCRIPT` 可以用于执行预定义的 SQL 脚本。


--每1分钟插入一条数据
BEGIN
? DBMS_SCHEDULER.CREATE_JOB (
? ? job_name ? ? ? ?=> 'INSERT_JOB',
? ? job_type ? ? ? ?=> 'PLSQL_BLOCK',
? ? job_action ? ? ?=> 'BEGIN INSERT INTO t_oracle_job (job_name, job_type, job_status, create_time) VALUES (''Insert Job'', ''Insert'', ''Pending'', SYSDATE); END;',
? ? start_date ? ? ?=> SYSDATE,
? ? repeat_interval => 'FREQ=MINUTELY; INTERVAL=1',
? ? enabled ? ? ? ? => TRUE
? );
END;
创建定时任务执行结果
一分钟执行结果:

--修改定时任务3分钟执行一次
BEGIN
? DBMS_SCHEDULER.SET_ATTRIBUTE('INSERT_JOB', 'repeat_interval', 'FREQ=MINUTELY; INTERVAL=3');
END;
--三分钟执行结果

--暂定定时任务
BEGIN
? DBMS_SCHEDULER.DISABLE('INSERT_JOB');
END;
--启动定时任务
BEGIN
? DBMS_SCHEDULER.ENABLE('INSERT_JOB');
END;
--删除定时任务
BEGIN
? DBMS_SCHEDULER.DROP_JOB('INSERT_JOB');
END;
--创建一个存储过程 `INSERT_JOB_PROC`,用于向 `T_ORACLE_JOB` 表中插入数据:
CREATE OR REPLACE PROCEDURE INSERT_JOB_PROC AS
BEGIN
? INSERT INTO T_ORACLE_JOB (JOB_NAME, JOB_TYPE, JOB_STATUS, CREATE_TIME)
? VALUES ('PROCEDURE Insert Job', 'Insert', 'Pending', SYSDATE);
? COMMIT;
END;
--创建一个定时任务,每分钟执行一次上述存储过程:
BEGIN
? DBMS_SCHEDULER.CREATE_JOB (
? ? job_name ? ? ? ?=> 'INSERT_JOB_TASK',
? ? job_type ? ? ? ?=> 'PLSQL_BLOCK',
? ? job_action ? ? ?=> 'BEGIN INSERT_JOB_PROC; END;',
? ? start_date ? ? ?=> SYSDATE,
? ? repeat_interval => 'FREQ=MINUTELY; INTERVAL=1',
? ? enabled ? ? ? ? => TRUE
? );
END;
--创建定时任务INSERT_JOB_TASK执行结果
--定时任务执行存储过程执行结果

--删除存储过程
DROP PROCEDURE INSERT_JOB_PROC;

文章来源:https://blog.csdn.net/weixin_59383491/article/details/135021414
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。