杀死Oracle工作。 10g具体

时间:2009-10-06 13:51:33

标签: oracle dbms-job

我们正在使用在DBMS_JOB之上运行的作业调度系统。它使用主作业来创建一次性作业。我们将同一组作业部署到所有客户端,但可以指定哪些作业只能在某些客户端运行。

我们偶尔会遇到挂起作业的流程问题。造成这种情况的主要原因是UTL_TCP在获得预期响应时没有超时。我希望能够杀死那些工作,以便他们能够重新开始工作。

我正在寻找创造一项新工作,以杀死任何已经运行超过一定时间的一次性工作。

我们暂时停留在Oracle 10g上,所以我只能做些什么。

有一篇文章似乎涵盖了

的大部分内容

http://it.toolbox.com/blogs/database-solutions/killing-the-oracle-dbms_job-6498

我觉得这不会涵盖所有可能性,包括:

  1. 我们以几个不同的用户身份运行can作业,用户只能破坏/删除他们创建的作业。我相信我可以使用DBMS_IJOB来解决这个问题,但我需要让DBA让我执行它。
  2. 我们有Oracle RAC系统。我理解10g限制ALTER SYSTEM KILL SESSION来杀死当前实例上的会话。我可以安排所有工作在同一个实例上运行,但我还没试过。
  3. 还有什么我应该考虑的吗? Stack Overflow需要一个确定的答案。

2 个答案:

答案 0 :(得分:1)

  • 您可以从作业表中获取PID并通过正常的OS命令终止卡住的进程。

  • 您可以在任何实例上杀死作业。在10g上,您需要知道卡住的作业正在运行的实例,并连接到该实例:

获取您的实例和pid:

select inst_id, process from gv$session where ...

连接到特定实例:

sqplus admin@node3 as sysdba
alter system kill session ...

答案 1 :(得分:1)

有更多方法可以杀死oracle上的会话。取决于您的平台。在unix会话上运行(后台作业也是)由进程表示。杀死进程,杀死会话。在Windows上,会话由一个线程表示。使用orakill杀死线程会终止会话。进程(或线程)id存储在gv$process