
Oracle Job排队执行实验
发布日期:2021-05-14 05:21:52
浏览次数:24
分类:精选文章
本文共 1783 字,大约阅读时间需要 5 分钟。
在Oracle数据库中,我们可以通过以下步骤验证SP(存储过程)以及Job的执行情况:
SP验证
我们创建了一个名为sp_insert
的存储过程,该存储过程用于批量插入数据。存储过程的实现如下: create or replace procedure sp_insert(is_key varchar2, in_rownum number) isbegin for c in 1.. in_rownum loop insert into c values(is_key, c, sysdate); commit; dbms_lock.sleep(1); end loop; commit;end;
该存储过程接受两个参数:is_key
(数据标识),in_rownum
(要插入的行数)。存储过程将从1到in_rownum
循环插入数据,每次插入后会执行一次dbms_lock.sleep(1)
,以模拟处理延迟。
设置Job队列进程数
我们需要将job_queue_processes
设置为3,以支持多个并行Job的执行: alter system set job_queue_processes=3;System altered
提交多个Job
使用dbms_job.submit
函数,我们可以提交多个Job到数据库的Job队列中。以下是提交3个Job的示例: declare jobid number;begin dbms_job.submit( jobid, what => 'sp_insert(''key1'',10)', next_date => to_date('20180821150500', 'yyyymmddhh24miss') ); dbms_job.submit( jobid, what => 'sp_insert(''key2'',10)', next_date => to_date('20180821150500', 'yyyymmddhh24miss') ); dbms_job.submit( jobid, what => 'sp_insert(''key3'',10)', next_date => to_date('20180821150500', 'yyyymmddhh24miss') ); commit;end;
每个Job都会执行sp_insert
存储过程,并在指定的时间提交到队列中。
检查Job执行时间
为了监控Job的执行情况,可以运行以下查询:select item, min(datadate), max(datadate), count(c.item) from c group by c.item order by 1;
查询结果如下:
数据标识 | 开始时间 | 结束时间 | 数据个数 |
---|---|---|---|
key1 | 2018-8-21 15:05:03 | 2018-8-21 15:05:12 | 1 |
key2 | 2018-8-21 15:05:03 | 2018-8-21 15:05:12 | 1 |
key3 | 2018-8-21 15:05:03 | 2018-8-21 15:05:12 | 1 |
从结果可以看出,所有Job的执行时间大致相同,说明Job是并行执行的。
同时提交多个Job
如果我们同时提交5个Job,结果将如下:主键 | 开始时间 | 结束时间 |
---|---|---|
key1 | 2018-8-21 15:05:03 | 2018-8-21 15:05:12 |
key2 | 2018-8-21 15:05:13 | 2018-8-21 15:05:22 |
key3 | 2018-8-21 15:05:13 | 2018-8-21 15:05:22 |
key4 | 2018-8-21 15:05:03 | 2018-8-21 15:05:12 |
key5 | 2018-8-21 15:05:03 | 2018-8-21 15:05:12 |
可以看到,key1
、key4
、key5
按时完成,而key2
、key3
由于之前的Job尚未完成,因此需要等待。这与预期一致,说明Job是按顺序执行的。
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年04月27日 21时56分25秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
问题的计算复杂度:排序问题
2019-03-11
算法的伪码表示
2019-03-11
递推方程与算法分析
2019-03-11
主定理的应用
2019-03-11
最优装载问题
2019-03-11
最大团问题
2019-03-11
圆排列问题
2019-03-11
课程总结
2019-03-11
认识CMake及应用
2019-03-11
CMake的主体框架
2019-03-11
微积分(三)
2019-03-11
Oracle
2019-03-11
软件工程应用
2019-03-11
数据科学
2019-03-11
函数与高级变量
2019-03-11
键盘事件
2019-03-11
注册页面案例
2019-03-11
np.bincount(x)的简单解释
2019-03-11
LeetCode Top-100 T22-括号生成
2019-03-11
vscode设置eslint保存文件时自动修复eslint错误
2019-03-11