ORCLE 如何停止一个JOB【HOW TO STOP A JOB IN THE ORACLE?】

简介:
   为同事解决一个因为网络连接情况不佳时,执行一个超长时间的SQL插入操作。
    既然网络状况不好,就选择了使用一次性使用JOB来完成该插入操作。在JOB执行一段时间后,我发现被插入表有些问题(惭愧,当时也没有先检查检查就做了)。准备停止JOB,因为在JOB运行情况下,我的所有修改都会报系统资源忙的错误。
    强行KILL SESSION是行不通的,因为过会儿,JOB还会重新启动,如果执行的SQL也被KILL了通过重新启动的JOB还是会被再次新执行的。 
    比较好的方法应该是;
    
1. 首先确定要停止的JOB号
    
    在10g中可通过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是否还在运行,其实多数情况下,应该都已经停止了。尤其执行的第三步的“杀手”命令。如果真的还是没有停止,只好从第一道第三步重新做一下了。

6. 将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都会停止。

7. 修改你要修改的任何东西,甚至是JOB内的内容。

8. 修改完成后,将job的BROKEN状态停止。

SQL>EXEC DBMS_JOB.BROKEN(job#,FALSE):

9. 恢复job_queue_processes的原始值

     ALTER SYSTEM SET job_queue_processes = original_value;

    至此整个停止并修改JOB完成.
     
    但是需要另外注意一下的是,在MARK一个BROKEN状态的时候,因为JOB内部执行SQL的原因,所以执行时或许要“煎熬”一段时间。所以在建立JOB时一定要仔细考虑,同时如果可能可以在你设计的PL/SQL代码中,增加一些判断“停止信号”的部分。来避免费力执行上面的步骤。

    毕竟,ORACLE在执行JOB时,还是很“倔强”的 -:)

本文转自Be the miracle!博客51CTO博客,原文链接http://blog.51cto.com/miracle/59607如需转载请自行联系原作者


Larry.Yue

相关文章
|
6月前
|
SQL
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
62 0
|
6月前
|
存储 SQL Oracle
oracle Job 定时任务
oracle Job 定时任务
|
SQL Oracle 关系型数据库
|
SQL 关系型数据库 Perl
|
Oracle 关系型数据库 存储
|
文字识别 Oracle 关系型数据库
转: Check CRS启动问题的步骤
设备文件引起的10gRAC-CRS服务故障 IBM CSC中心的一次计划性完全断电,(主机、存储的初始化)引起了测试环境上的RAC故障。在故障恢复中,通过排查问题,了解了不少以前从没关注的OCR相关知识点。
1448 0
|
关系型数据库 Oracle
ORACLE RAC 一节点出现Suspending MMON slave action kewrmrfsa_ for 82800 seconds
       > >                                                                                        >                           ...
2018 0
|
SQL Oracle 关系型数据库
Oracle 12c中JOB运行失败的简单处理(r11笔记第66天)
在之前简单分析过一个12c中数据字典的小问题。 Oracle 12c数据字典的小问题(r11笔记第49天) 最近查看邮件,12c的一个PDB还是存在JOB运行异常的情况,因为是测试环境,不是业务类的JOB,这个问题就给了我一些时间来修复。
1621 0
|
Oracle 关系型数据库 数据库
Oracle运行JOB报ORA-27492:无法运行作业
【场景说明】数据库版本:11.2.0.3,创建SCHEDULER JOB,前台运行的时候没有报错,但是设置成后台JOB的时候,就是不会自动运行,且报如下错误 ORA-27492和ORA-06512   【原因分析】当前用户下可以运行,说明JOB本身没有问题;在使用Oracle jobs时,需要关注job_queue_processes参数,该参数用于设定job队列可以启动的进程数,之前有碰到用户由于这个参数设置为0导致JOB不能运行。
1225 0