中止Oracle JobITeye - 亚美娱乐

中止Oracle JobITeye

2019年03月28日08时32分07秒 | 作者: 运锋 | 标签: 中止,履行,运转 | 浏览: 1218

ORACLE怎么中止一个JOB
相关表、视图
dba_jobs:包括登录用户一切的JOB信息
dba_jobs_running:包括正在运转job相关信息
留意:须运用oracle的sys用户登录到数据库,才干查看dba_jobs_running, v$process, v$session表的信息。一起,登录操作系统时,要用oracle用户。
问题描绘
为搭档处理一个由于网络连接情况欠安时,履行一个超长时刻的SQL刺进操作。已然网络情况欠好,就挑选了运用一次性运用JOB来完结该刺进操作。在JOB履行一段时刻后,我发现被刺进表有些问题。预备中止JOB,由于在JOB运转情况下,我的一切修正都会报系统资源忙的过错。强行KILL SESSION是行不通的,由于过会儿,JOB还会重新启动,假如履行的SQL也被KILL了经过重新启动的JOB仍是会被再次新履行的。
处理办法
比较好的办法应该是:
1. 首要确定要中止的JOB号
在10g中可经过Dba_Jobs_Running进行承认。
查找正在运转的JOB:
select sid from dba_jobs_running;
查找到正在运转的JOB的spid:
select a.spid from v$process a ,v$session b where a.addr=b.paddr  and b.sid in (select sid from dba_jobs_running);
2. Broken你承认的JOB
留意运用DBMS_JOB包来标识你的JOB为BROKEN。
SQL EXEC DBMS_JOB.BROKEN(job#,TRUE);
留意:当履行完该指令你挑选的这个JOB仍是在运转着的。
3. Kill 对应的Oracle Session
应为BROKEN后该JOB还在运转,假如要求该JOB马上中止,就需求找到该job的对应SESSION(SID,SERIAL#),然后履行以下指令:
ALTER SYSTEM KILL SESSION sid,serial#;
或许直接KILL对应的操作系统的SESSION,假如运用ALTER SYSTEM KILL SESSION履行很长时刻,其实能够运用OS的指令来快速KILL掉SESSION.
For Windows, at the DOS Prompt: orakill sid spid
For UNIX at the command line kill –9 spid
4. 查看你的JOB是否还在运转
查看你要中止的JOB是否还在运转,其实大都情况下,应该都现已中止了。特别履行的第三步的“杀手”指令。假如真的仍是没有中止,只好从第一道第三步重新做一下了。
5. 将Job Queue Processes的数目修正为0
首要承认当时的Job Queue Processes的数目
SQL col value for a10
SQL select name,value from v$parameter where name =job_queue_processes;
然后将Job Queue Processes的数目修正为0
SQL ALTER SYSTEM SET job_queue_processes = 0;
确保一切的JOB都会中止。
6. 修正你要修正的任何东西,乃至是JOB内的内容。
7. 修正完结后,将job的BROKEN状况中止。
SQL EXEC DBMS_JOB.BROKEN(job#,FALSE):
8. 康复job_queue_processes的原始值
ALTER SYSTEM SET job_queue_processes = original_value;
至此整个中止并修正JOB完结.
可是需求别的留意一下的是,在MARK一个BROKEN状况的时分,由于JOB内部履行SQL的原因,所以履行时或许要“折磨”一段时刻。所以在树立JOB时一定要细心考虑,一起假如或许能够在你设计的PL/SQL代码中,添加一些判别“中止信号”的部分。来防止吃力履行上面的过程。

参阅至:http://blog.csdn.net/waferleo/article/details/3403598

如有过错,欢迎纠正

邮箱:czmcj@163.com

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表亚美娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章