强制结束运行JOB

1. 首先确定要停止的JOB号

    在10g中可通过Dba_Jobs_Running进行确认。

SQL> SELECT* FROM DBA_JOBS_RUNNING;

 

SID        JOB   FAILURES LAST_DATE   LAST_SEC  THIS_DATE   THIS_SEC                          

---------------------------------------------------------------------   

241       182          0    2011-12-20 00:01:05    2011-12-21  00:01:04                                 

 

2. Broken你确认的JOB

    注意使用DBMS_JOB包来标识你的JOB为BROKEN。

   EXEC DBMS_JOB.BROKEN(job#,TRUE)


SQL>  EXEC DBMS_JOB.BROKEN(182,TRUE);

PL/SQLprocedure successfully completed

 

SQL> select  JOB,LOG_USER,BROKENfrom dba_jobs;

       JOB LOG_USER                       BROKEN

---------- ------------------------------ ------

         1 SYSMAN                         N

       182 ISGIS                          Y

   注意:当执行完该命令你选择的这个JOB还是在运行着的,只是JOB的状态改变了

 

3. Kill 对应的Oracle Session

应为BROKEN后该JOB还在运行,如果要求该JOB立刻停止,就需要找到该job的对应SESSION(SID,SERIAL#),然后执行以下命令:

1)SELECT SID,SERIAL# FROM V$SESSION WHERE SID=&JOB_SID

 2)ALTER SYSTEM KILL SESSION 'sid,serial#';


SQL> SELECT SADDR,SID,SERIAL# FROM V$SESSION WHERE SID=241;

SADDR                   SID      SERIAL# 

-----------------     -----    -----------

00000000DF38F1A8        241     44551 

 

SQL> ALTER SYSTEM KILLSESSION '241,44551';

Systemaltered

或者直接KILL对应的操作系统的SESSION,如果使用ALTER SYSTEM KILL SESSION执行很长时间,其实可以使用OS的命令来快速KILL掉SESSION.

     1)根据 v$processp,v$session 查找SPID

     2)For Windows, at the DOS Prompt: orakillsid spid

     3)For UNIX at the command line> kill –9spid

 

SQL> selectp.spid,se.SID from v$process p,v$session se where  p.addr=se.paddr and se.SID=80;

SPID                SID      

------------ ----------

2054                 80       

[oracle@isgis81~]$ kill –9  2054

4. 检查你的JOB是否还在运行

   检查你要停止的JOB是否还在运行,其实多数情况下,应该都已经停止了。尤其执行的第三步的“杀手”命令。如果真的还是没有停止,只好从第一道第三步重新做一下了。

SQL> SELECT* FROM DBA_JOBS_RUNNING;

SID         JOB        LAST_DATE   LAST_SEC   THIS_DATE   THIS_SEC 

-------------------- ---------- ----------- -----------

5. 修改JOB Queue数(可省)

将Job Queue Processes的数目修改为0,首先确认当前的Job Queue Processes的数目

SQL> select name,value from v$parameterwhere name ='job_queue_processes';

NAME                                     VALUE

---------------------------------------------------------------------

job_queue_processes                    30

   

    然后将Job Queue Processes的数目修改为0,保证所有的JOB都会停止。

    SQL> ALTER SYSTEM SET job_queue_processes= 0;

System altered

6. 恢复JOB状态

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

EXEC DBMS_JOB.BROKEN(job#,FALSE)

 

SQL> EXECDBMS_JOB.BROKEN(182,FALSE);

PL/SQLprocedure successfully completed

7. 恢复JOB Queue数(可省)

     SQL>ALTER SYSTEM SET job_queue_processes= original_value;

    至此整个停止并修改JOB完成.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值