如果您曾经认为取消 oracle job很容易,那么让我向您展示让我今天头痛的事情。

我们正在测试一个使用自定义代码在数据库之间出队和传播AQ消息的应用程序。共有9个流程,所有流程都使用提交为作业DBMS_JOB。他们应该一直运行,等待消息出队。有时,我需要杀死它们以便重新编译它们正在执行的对象。

这些步骤非常简单:删除/中断所有有问题的作业,终止正在运行的作业,使用新版本重新编译软件包,然后再次提交/取消中断作业。但这一次,事情进展不如我预期的顺利。我们来看一下。

首先,我删除所有当前正在运行的作业:

SYS@ORCL>select 'exec dbms_ijob.remove('||job||');' from dba_jobs_running;'EXECDBMS_IJOB.REMOVE('||JOB||');'
----------------------------------------------------------------
exec dbms_ijob.remove(261);
exec dbms_ijob.remove(264);
exec dbms_ijob.remove(267);
exec dbms_ijob.remove(262);
exec dbms_ijob.remove(265);
exec dbms_ijob.remove(268);
exec dbms_ijob.remove(263);
exec dbms_ijob.remove(266);
exec dbms_ijob.remove(269);9 rows selected.SYS@ORCL>exec dbms_ijob.remove(261);
PL/SQL procedure successfully completed.SYS@ORCL> exec dbms_ijob.remove(264);
PL/SQL procedure successfully completed.SYS@ORCL> exec dbms_ijob.remove(267);
PL/SQL procedure successfully completed.SYS@ORCL> exec dbms_ijob.remove(262);
PL/SQL procedure successfully completed.SYS@ORCL> exec dbms_ijob.remove(265);
PL/SQL procedure successfully completed.SYS@ORCL> exec dbms_ijob.remove(268);
PL/SQL procedure successfully completed.SYS@ORCL> exec dbms_ijob.remove(263);
PL/SQL procedure successfully completed.SYS@ORCL> exec dbms_ijob.remove(266);
PL/SQL procedure successfully completed.SYS@ORCL> exec dbms_ijob.remove(269);
PL/SQL procedure successfully completed.

下一步,我将终止正在运行的作业的会话:

SYS@ORCL>select 'alter system kill session '''||sid||','||serial#||''';' from v$session where sid in (select sid from dba_jobs_running);'ALTERSYSTEMKILLSESSION'''||SID||','||SERIAL#||''';'
--------------------------------------------------------------------------------
alter system kill session '120,73';
alter system kill session '122,111';
alter system kill session '123,788';
alter system kill session '136,20';
alter system kill session '137,28';
alter system kill session '138,143';
alter system kill session '142,132';
alter system kill session '144,129';
alter system kill session '159,68';9 rows selected.SYS@ORCL>alter system kill session '120,73';
System altered.SYS@ORCL> alter system kill session '122,111';
System altered.SYS@ORCL> alter system kill session '123,788';
System altered.SYS@ORCL> alter system kill session '136,20';
System altered.SYS@ORCL> alter system kill session '137,28';
System altered.SYS@ORCL> alter system kill session '138,143';
System altered.SYS@ORCL> alter system kill session '142,132';
System altered.SYS@ORCL> alter system kill session '144,129';
System altered.SYS@ORCL> alter system kill session '159,68';
System altered.

并且正在运行的工作不见了:

SYS@ORCL>select count(*) from dba_jobs_running;COUNT(*)
----------0

我认为这很好,但是几秒钟后工作又回来了!

SYS@ORCL> /COUNT(*)
----------9

我发现这种行为非常有趣,因此我在网上进行搜索,并找到了一个非常不错的博客,详细解释了DBMS_JOB工作的行为。

这暗示了OS进程实际上可以使数据库进程保持活动状态。因此,我认为这听起来很合理-让我们杀死OS进程。

SYS@ORCL>!ps -ef | grep ora_j
oracle   16234     1  0 12:58 ?        00:00:00 ora_j000_ORCL
oracle   16236     1  9 12:58 ?        00:00:07 ora_j001_ORCL
oracle   16238     1  9 12:58 ?        00:00:07 ora_j002_ORCL
oracle   16240     1  0 12:58 ?        00:00:00 ora_j003_ORCL
oracle   16242     1  0 12:58 ?        00:00:00 ora_j004_ORCL
oracle   16244     1  8 12:58 ?        00:00:06 ora_j005_ORCL
oracle   16246     1  9 12:58 ?        00:00:07 ora_j006_ORCL
oracle   16248     1  0 12:58 ?        00:00:00 ora_j007_ORCL
oracle   16250     1  9 12:58 ?        00:00:07 ora_j008_ORCL
oracle   16280 15459  0 12:59 pts/0    00:00:00 /bin/bash -c ps -ef | grep ora_j
oracle   16282 16280  0 12:59 pts/0    00:00:00 grep ora_jSYS@ORCL>!kill -9 16234 16236 16238 16240 16242 16244 16246 16248 16250 16252

做完了!

嗯,但不是真的-一段时间后,工作从死里复生。在不同的Oracle PID和不同的OS PID下。

SYS@ORCL>select count(*) from dba_jobs_running;COUNT(*)
----------9

现在,这让我感到非常困惑。我如何摆脱它们?

当然!我为什么以前没有想到这个?我将设置job_queue_processes0。终止进程,它们将不会重生。

SYS@ORCL>alter system set job_queue_processes=0;System altered.

再次杀死所有进程。

SYS@ORCL>select count(*) from dba_jobs_running;COUNT(*)
----------0SYS@ORCL>alter system set job_queue_processes=10;System altered.SYS@ORCL>select count(*) from dba_jobs_running;COUNT(*)
----------9

糟糕,他们又回来了!请注意,作业已从DBA_JOBs表中删除,正在运行的作业正在引用不存在的作业ID。他们如何重生?

SYS@ORCL>select j.what, j.job, r.sid from dba_jobs j, dba_jobs_running r where j.job in (select job from dba_jobs_running) and j.job=r.job order by j.what;no rows selected

我决定扩展我的工作知识,并阅读了James Koopmann的整个博客。然后我看到了光!在文章下的评论中提到的用户JB(感谢JB,我也学到了很难的方法),COMMIT在操作作业后必须运行该用户。

因此,在完成上述所有操作之后,我只输入了。。。

SYS@ORCL> commit;Commit complete.

。。。然后又杀死了工作,宾果!那些讨厌的工作终于消失了。

我在过去使用DBMS_JOB过相同的过程,但从未遇到过此问题,但是我意识到我总是切换到SYS用户以终止会话,因此重新连接后会自动提交该用户。

值得一提的是,重新生成的作业没有执行应做的工作,这意味着它们没有使消息出队。我正在使用的数据库版本是10.2.0.4,对于DBMS_JOBIJOBREMOVEBROKEN过程均适用,并且可能也适用于此程序包的其他过程。毕竟,事情就像提交一样简单,不是吗?

终止正在运行的ORACLE作业相关推荐

  1. oracle调度不见了,Oracle作业job 没有自动调度起来

    Oracle作业job没有自动调度起来 问题:有一同事报过来,说有两个job已经近一周没有自动调起了,让我帮忙解决. 1.检查: (1)在生产库中检查,其他的job都能自动调度 (2)select*f ...

  2. hadoop emr_在Amazon EMR上运行Hadoop MapReduce作业

    hadoop emr 不久前,我发布了如何使用CLI设置EMR群集的信息. 在本文中,我将展示如何使用适用于AWS的Java SDK来设置集群. 展示如何使用Java AWS开发工具包执行此操作的最佳 ...

  3. 在Amazon EMR上运行Hadoop MapReduce作业

    不久前,我发布了如何使用CLI设置EMR群集的信息. 在本文中,我将展示如何使用适用于AWS的Java SDK来设置集群. 展示如何使用Java AWS开发工具包执行此操作的最佳方法是展示完整的示例, ...

  4. 为何要把你的SAP运行在Oracle数据库上?

    提起SAP和甲骨文这两家公司,真是有很多故事可以聊.抛开二者在应用软件领域的竞争不谈,今天在这里我们只聊数据库. 一家是全球最大的应用软件厂商,一家是数据库技术领域的巨头,因此人们自然而然会想把两家公 ...

  5. 如何正确的终止正在运行的子线程

    最近开发一些东西,线程数非常之多,当用户输入Ctrl+C的情形下,默认的信号处理会把程序退出,这时有可能会有很多线程的资源没有得到很好的释放,造成了内存泄露等等诸如此类的问题,本文就是围绕着这么一个使 ...

  6. java线程中断和终止线程运行

    ava中启动一个线程很容易,通常情况下我们都是等到任务运行结束后让线程自行停止.但有时需要在任务正在运行时取消他们,使得线程快速结束.对此Java并没有提供任何机制.但是我们可以通过Java提供的线程 ...

  7. c++thread里暂停线程_C语言如何正确的终止正在运行的子线程

    最近开发一些东西,线程数非常之多,当用户输入Ctrl+C的情形下,默认的信号处理会把程序退出,这时有可能会有很多线程的资源没有得到很好的释放,造成了内存泄露等等诸如此类的问题,本文就是围绕着这么一个使 ...

  8. pthread之如何正确的终止正在运行的子线程

    最近开发一些东西,线程数非常之多,当用户输入Ctrl+C的情形下,默认的信号处理会把程序退出,这时有可能会有很多线程的资源没有得到很好的释放,造成了内存泄露等等诸如此类的问题,本文就是围绕着这么一个使 ...

  9. 2022年制冷与空调设备运行操作特种作业证考试题库及答案

    题库来源:安全生产模拟考试一点通公众号小程序 2022年制冷与空调设备运行操作考试题系制冷与空调设备运行操作试卷新版教材大纲题库!2022年制冷与空调设备运行操作特种作业证考试题库及答案依据制冷与空调 ...

最新文章

  1. 如何面对“大概什么时候能完成?”
  2. 长波通信、中波通信、短波通信、超短波通信与微波通信介绍
  3. 程序员的灯下黑:能认识自己吗?
  4. vue适配移动端px自动转化为rem
  5. vim - 查找替换
  6. Hystrix面试 - 基于 timeout 机制为服务接口调用超时提供安全保护
  7. CryptographicException异常处理方法
  8. Leetcode每日一题:171.excel-sheet-column-number(Excel表列序号)
  9. DotText源码阅读(2)-工程、数据库表结构
  10. SecureCRT问题
  11. vmware workstation 12安装ubuntu kylin 16.04虚拟机
  12. [读论文]三维激光扫描点云数据处理研究进展、挑战与趋势(2017)
  13. 系统学习Java语言的15个网站
  14. java有道翻译_java实现有道翻译爬虫
  15. 数据库SQL 某字段按首字母排序
  16. 【数学史】大富翁的概率
  17. 关于消防设施的RFID资产管理,RFID消防设施资产管理-新导智能
  18. keil5(MDK5)配置S3C2440裸机开发调试环境
  19. Python学习笔记:使用PIL批量合成jpg+png图片,用于水印、合并图片,生成YOLO数据集+标注数据等等
  20. 考研英语核心词汇辨析(黑魔方系列2007版之一)

热门文章

  1. 超强锁SuperPro
  2. 时空大数据解决方案-最新全套文件
  3. c++_设计一个 Studnet(学生)类
  4. 平面设计简化布局的要点是什么
  5. 我把跨境电商当副业 ,一周赚了7000块:想给有梦想的人提个醒 !
  6. android查询火车票接口,火车票查询信息接口
  7. python 数字运算及格式化_Python基础教程(3)Python数据类型、运算与格式化
  8. EBS中应用,职责,数据组,请求组等关系
  9. 基于51单片机的篮球赛计时计分器(仿真+源程序+原理图+PCB+论文)
  10. 色相 色调_如何使用色相调光器开关控制飞利浦色相灯