oracle创建了定时job在测试环境中正常执行了,但是在正式环境中没有执行,

mingminglove1946 2018-10-25 09:13:06
oracle创建了定时job在测试环境中正常执行了,但是在正式环境中没有执行,也查看了job_queue_processes值是5,jobs只有三个。
...全文
641 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaiger 2018-10-25
  • 打赏
  • 举报
回复
你这个JOB的目的是什么?看上去很含糊,只删除一个JOB,而且JOB还不指定
yaiger 2018-10-25
  • 打赏
  • 举报
回复
你这种写法,其实并没有指定要删除哪个JOB,取的值是MAX(JOB)
这个JOB在测试库和正式环境很可能是不同的,测试库MAX(JOB)可能是A, 正式环境可能就是取到了本身自己的JOB
mingminglove1946 2018-10-25
  • 打赏
  • 举报
回复
引用 4 楼 yaiger 的回复:
写法有点问题
SELECT COUNT(*), MAX(JOB) INTO V_JOBNUM, V_JOB FROM USER_JOBS WHERE UPPER(WHAT)='P_REFORM_TABLE;';
if v_jobnum>0 then
dbms_job.remove(v_job);
end if;

SELECT COUNT(*), MAX(JOB) INTO V_JOBNUM, V_JOB FROM USER_JOBS WHERE UPPER(WHAT)='ES_DBA.P_ALL_JOBS;';
if v_jobnum>0 then
dbms_job.remove(v_job);
end if;
这种写法会把自己本身这个JOB也删除掉,是不是应该把自身排除掉?
应该不是写法的问题吧,在测试数据库也是能自动执行的,说明脚本没有问题;正式数据库中,手动执行了也是可以的,只是在正式数据库上自动执行不了。
yaiger 2018-10-25
  • 打赏
  • 举报
回复
写法有点问题
SELECT COUNT(*), MAX(JOB) INTO V_JOBNUM, V_JOB FROM USER_JOBS WHERE UPPER(WHAT)='P_REFORM_TABLE;';
if v_jobnum>0 then
dbms_job.remove(v_job);
end if;

SELECT COUNT(*), MAX(JOB) INTO V_JOBNUM, V_JOB FROM USER_JOBS WHERE UPPER(WHAT)='ES_DBA.P_ALL_JOBS;';
if v_jobnum>0 then
dbms_job.remove(v_job);
end if;
这种写法会把自己本身这个JOB也删除掉,是不是应该把自身排除掉?
mingminglove1946 2018-10-25
  • 打赏
  • 举报
回复
引用 1 楼 yaiger 的回复:
把创建JOB的脚本贴一下
declare
v_jobnum number;
v_job number;
begin
SELECT COUNT(*), MAX(JOB) INTO V_JOBNUM, V_JOB FROM USER_JOBS WHERE UPPER(WHAT)='P_REFORM_TABLE;';
if v_jobnum>0 then
dbms_job.remove(v_job);
end if;

SELECT COUNT(*), MAX(JOB) INTO V_JOBNUM, V_JOB FROM USER_JOBS WHERE UPPER(WHAT)='ES_DBA.P_ALL_JOBS;';
if v_jobnum>0 then
dbms_job.remove(v_job);
end if;

/* 创建一个ORACLE的JOB定时任务,在每天晚上0:00自动调用 P_ALL_JOBS 过程 */
dbms_job.submit(job => v_jobnum, what => 'ES_DBA.P_ALL_JOBS;',next_date => TRUNC(SYSDATE) + 1,interval => 'TRUNC(SYSDATE) + 1');

commit;
end;
/
exit;
mingminglove1946 2018-10-25
  • 打赏
  • 举报
回复
declare
v_jobnum number;
v_job number;
begin
SELECT COUNT(*), MAX(JOB) INTO V_JOBNUM, V_JOB FROM USER_JOBS WHERE UPPER(WHAT)='P_REFORM_TABLE;';
if v_jobnum>0 then
dbms_job.remove(v_job);
end if;

SELECT COUNT(*), MAX(JOB) INTO V_JOBNUM, V_JOB FROM USER_JOBS WHERE UPPER(WHAT)='ES_DBA.P_ALL_JOBS;';
if v_jobnum>0 then
dbms_job.remove(v_job);
end if;

/* 创建一个ORACLE的JOB定时任务,在每天晚上0:00自动调用 P_ALL_JOBS 过程 */
dbms_job.submit(job => v_jobnum, what => 'ES_DBA.P_ALL_JOBS;',next_date => TRUNC(SYSDATE) + 1,interval => 'TRUNC(SYSDATE) + 1');

commit;
end;
/
exit;
yaiger 2018-10-25
  • 打赏
  • 举报
回复
把创建JOB的脚本贴一下
yaiger 2018-10-25
  • 打赏
  • 举报
回复
没看明白你的逻辑,贴图是正式还是测试环境?
从贴图来看,会删除JOB11。如果本身就是11的话,会把自身移除,为什么会没问题?
另外JOB10不用删除吗?

如果你的目的是’将当前表的操作日志插入到历史表中并清空‘,为什么要生成多个JOB来处理呢?一个JOB就能实现



引用 9 楼 mingminglove1946 的回复:
引用 7 楼 yaiger 的回复:
你这个JOB的目的是什么?看上去很含糊,只删除一个JOB,而且JOB还不指定
我想要执行的job是9,所以脚本取的值是MAX(JOB)就会有问题,而测试库上执行的job是11,而恰好11这个job是最大的所以就没有问题?
mingminglove1946 2018-10-25
  • 打赏
  • 举报
回复
引用 7 楼 yaiger 的回复:
你这个JOB的目的是什么?看上去很含糊,只删除一个JOB,而且JOB还不指定
我想要执行的job是9,所以脚本取的值是MAX(JOB)就会有问题,而测试库上执行的job是11,而恰好11这个job是最大的所以就没有问题?
mingminglove1946 2018-10-25
  • 打赏
  • 举报
回复
引用 7 楼 yaiger 的回复:
你这个JOB的目的是什么?看上去很含糊,只删除一个JOB,而且JOB还不指定
这个JOB主要就是将当前表的操作日志插入到历史表中并清空。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧