我们正在使用在DBMS_JOB之上运行的作业调度系统。它使用主作业来创建一次性作业。我们将同一组作业部署到所有客户端,但可以指定哪些作业只能在某些客户端运行。
我们偶尔会遇到挂起作业的流程问题。造成这种情况的主要原因是UTL_TCP在获得预期响应时没有超时。我希望能够杀死那些工作,以便他们能够重新开始工作。
我正在寻找创造一项新工作,以杀死任何已经运行超过一定时间的一次性工作。
我们暂时停留在Oracle 10g上,所以我只能做些什么。
有一篇文章似乎涵盖了
的大部分内容http://it.toolbox.com/blogs/database-solutions/killing-the-oracle-dbms_job-6498
我觉得这不会涵盖所有可能性,包括:
还有什么我应该考虑的吗? Stack Overflow需要一个确定的答案。
答案 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。
中