[20211203]演示job启动时间改变的情况.txt --//生产系统出现job启动时间改变的情况,开发还是习惯使用job方式调度后台任务,实际上应该尝试使用schedule。 --//通过例子演示出来。 1.环境: SCOTT@book> @ ver1 PORT_STRING VERSION BANNER ------------------------------ -------------- -------------------------------------------------------------------------------- x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production --//GRANT EXECUTE ON SYS.DBMS_LOCK TO SCOTT; 2.建立存储过程: CREATE OR REPLACE PROCEDURE SCOTT.foo AS BEGIN NULL; dbms_lock.sleep (600); END; DECLARE X NUMBER; BEGIN begin SYS.DBMS_JOB.SUBMIT ( job => X ,what => 'SCOTT.FOO;' ,next_date => to_date('12/03/2021 17:15:02','mm/dd/yyyy hh24:mi:ss') ,interval => 'SYSDATE+1' ,no_parse => FALSE ); :JobNumber := to_char(X); exception when others then begin raise; end; end; END; --//等17:15 SYS@book> select * from DBA_JOBS_RUNNING where job=371; SID JOB FAILURES LAST_DATE LAST_SEC THIS_DATE THIS_SEC INSTANCE ---------- ---------- ---------- ------------------- ---------------- ------------------- ---------------- ---------- 30 371 2021-12-03 17:15:02 17:15:02 0 --//已经启动。 SYS@book> select sysdate from dual ; SYSDATE ------------------- 2021-12-03 17:16:08 SYS@book> shutdown abort ORACLE instance shut down. SYS@book> startup ORACLE instance started. Total System Global Area 643084288 bytes Fixed Size 2255872 bytes Variable Size 205521920 bytes Database Buffers 427819008 bytes Redo Buffers 7487488 bytes Database mounted. Database opened. SYS@book> select * from DBA_JOBS_RUNNING where job=371; SID JOB FAILURES LAST_DATE LAST_SEC THIS_DATE THIS_SEC INSTANCE ---------- ---------- ---------- ------------------- ---------------- ------------------- ---------------- ---------- 323 371 2021-12-03 17:16:39 17:16:39 0 --//可以发现启动数据库后,job重新执行。开始时间是2021-12-03 17:16:39,查询job的定义还是: BEGIN SYS.DBMS_JOB.SUBMIT ( job => X ,what => 'SCOTT.FOO;' ,next_date => to_date('03/12/2021 17:15:02','dd/mm/yyyy hh24:mi:ss') ,interval => 'SYSDATE+1' ,no_parse => FALSE ); SYS@book> select * from DBA_JOBS_RUNNING where job=371; no rows selected --//执行完成。 --//再次查看定义: DECLARE X NUMBER; user_name varchar2(30); BEGIN select user into user_name from dual; execute immediate 'alter session set current_schema = SCOTT'; BEGIN SYS.DBMS_JOB.SUBMIT ( job => X ,what => 'SCOTT.FOO;' ,next_date => to_date('04/12/2021 17:16:39','dd/mm/yyyy hh24:mi:ss') ,interval => 'SYSDATE+1' ,no_parse => FALSE ); SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x)); execute immediate 'alter session set current_schema = ' || user_name ; EXCEPTION WHEN OTHERS THEN execute immediate 'alter session set current_schema = ' || user_name ; RAISE; END; COMMIT; END; / --//现在下次的启动实际变成了to_date('04/12/2021 17:16:39','dd/mm/yyyy hh24:mi:ss')。 --//我们生产系统遇到的情况就是这样,数据库重启后,中断的job启动,这样下次启动job时间变成新的启动时间。 --//实际上最主要的问题出现在interval => 'SYSDATE+1'定义上,如果我修改为 --//interval => 'trunc(SYSDATE+1)+17/24',这样无论何种情况都是每天启动都是17点,除了job中断的情况(比如上面的数据库异常关 --//闭)。另外注意如果写成trunc(SYSDATE)+17/24,永远都不会执行. --//个人建议job时间设定为固定时间,而不是interval => 'SYSDATE+1'。我贴一个生产系统类似例子: > select trunc(scsj),min(scsj) from XXXXX group by trunc(scsj) order by 1; TRUNC(SCSJ) MIN(SCSJ) ------------------- ------------------- 2021-08-19 00:00:00 2021-08-19 00:00:01 2021-08-20 00:00:00 2021-08-20 00:00:01 2021-08-21 00:00:00 2021-08-21 00:00:03 2021-08-22 00:00:00 2021-08-22 00:00:05 2021-08-23 00:00:00 2021-08-23 00:00:07 --//不知道为什么这里变大,我估计启动时还是03秒。 2021-08-24 00:00:00 2021-08-24 00:00:03 2021-08-25 00:00:00 2021-08-25 00:00:04 2021-08-26 00:00:00 2021-08-26 00:00:06 2021-08-27 00:00:00 2021-08-27 00:00:07 2021-08-28 00:00:00 2021-08-28 00:00:08 2021-08-29 00:00:00 2021-08-29 00:00:08 ... 2021-11-29 00:00:00 2021-11-29 00:02:17 2021-11-30 00:00:00 2021-11-30 00:02:18 2021-12-01 00:00:00 2021-12-01 00:02:19 2021-12-02 00:00:00 2021-12-02 00:02:19 2021-12-03 00:00:00 2021-12-03 00:02:19 2021-12-04 00:00:00 2021-12-04 00:02:21 2021-12-05 00:00:00 2021-12-05 00:02:24 2021-12-06 00:00:00 2021-12-06 00:02:26 110 rows selected. --//该job 8/19启用,scsj是执行插入的时间,但是你可以发现每天都在往后推迟一点点时间,到现在已经要2:26才开始插入,现在job的 --//next_date => to_date('07/12/2021 00:02:26','dd/mm/yyyy hh24:mi:ss').
[20211203]演示job启动时间改变的情况.txt
来源:这里教程网
时间:2026-03-03 17:16:43
作者:
编辑推荐:
- [20211203]为什么出现负数3.txt03-03
- [20211203]演示job启动时间改变的情况.txt03-03
- [20211206]toad下job建立查看问题.txt03-03
- Oracle一次“选错索引”问题的分析03-03
- [20211206]修改job属性问题.txt03-03
- 「Oracle」Oracle 数据库备份还原03-03
- Networker恢复oracle rac到单机03-03
- 通过进程找sql03-03
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- Oracle一次“选错索引”问题的分析
Oracle一次“选错索引”问题的分析
26-03-03 - Networker恢复oracle rac到单机
Networker恢复oracle rac到单机
26-03-03 - 【CONNECT】Oracle连接方式详细介绍(专用/共享服务器)
【CONNECT】Oracle连接方式详细介绍(专用/共享服务器)
26-03-03 - U盘里的文件删除了还能恢复吗?不看别后悔
U盘里的文件删除了还能恢复吗?不看别后悔
26-03-03 - 「Oracle」Oracle 数据库安装
「Oracle」Oracle 数据库安装
26-03-03 - u盘格式化后能恢复数据吗?格式化U盘恢复
u盘格式化后能恢复数据吗?格式化U盘恢复
26-03-03 - 剪切后的文件可以恢复吗?恢复剪切文件怎么办?
剪切后的文件可以恢复吗?恢复剪切文件怎么办?
26-03-03 - 文件被隐藏了怎么恢复?读完你就知道了
文件被隐藏了怎么恢复?读完你就知道了
26-03-03 - OGG的抽取进程合并
OGG的抽取进程合并
26-03-03 - 还原分区失败怎么办?为什么会出现还原分区失败
还原分区失败怎么办?为什么会出现还原分区失败
26-03-03
