oracle如何查询和停止正在运行的job?

oracle如何查询和停止正在运行的job?,第1张

找出正在执行的JOB编号及其会话编号 SELECT SID,JOB FROM DBA_JOBS_RUNNING停止该JOB的执行 SELECT SID,SERIAL# FROM V$SESSION WHERE SID='&SID'ALTER SYSTEM KILL SESSION '&SID,&SERIAL'EXEC DBMS_JOB.BROKEN(&JOB,TRUE)实例分析:1,查询正在运行的Job,通过查询有两个,和进程占用较多的是两个ORACLE进程符合。SQL>SELECT SID,JOB FROM DBA_JOBS_RUNNINGSID JOB\x0d\x0a---------- ----------12 11616 1172,查询正在运行的job的信息SQL>SELECT SID,SERIAL# FROM V$SESSION WHERE SID='12'SID SERIAL#\x0d\x0a---------- ----------\x0d\x0a12 4SQL>SELECT SID,SERIAL# FROM V$SESSION WHERE SID='16'SID SERIAL#\x0d\x0a---------- ----------\x0d\x0a16 13,利用查询出来的job信息将job结束掉SQL>ALTER SYSTEM KILL SESSION '12,4'System altered.SQL>ALTER SYSTEM KILL SESSION '16,1'System altered.\x0d\x0a4,如果不希望运行上述job的话,可以将job设置为broken.EXEC DBMS_JOB.BROKEN(116,TRUE)EXEC DBMS_JOB.BROKEN(117,TRUE)

这是 job 进程,其中 j 代表 job, 000 为编号,可为 000-999, 共 1000个。 BCPROD 为 数据库实例名。job 进程可以被 kill,但你想 kill 这个进程,肯定是因为其耗太多的资源。那么,你可以查询一下 dba_jobs_running 看看 job 进程当前在运行你的哪一个 job ,然后,从 dba_jobs 中查出其 what 字段对应的值,便知道具体是什么工作了,联系一下相关的人员,看能不能 kill, 即使能 kill, 在 kill 后,也要让相关人员去优化这个 job 的存储过程,使得以后不会耗那么多资源,从而以后不会需要你再去 kill 这个 job 的进程。

oracle 如何查找和kill 对应的job进程

查找当前被锁住的进程:

SELECT object_name, s.sid, s.serial#, p.spid

FROM v$locked_object l, dba_objects o, v$session s, v$process p

WHERE l.object_id = o.object_id

AND l.session_id = s.sid

AND s.paddr = p.addr

Kill 对应的Oracle Session

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

ALTER SYSTEM KILL SESSION 'sid,serial#'

将Job Queue Processes的数目修改为0

首先确认当前的Job Queue Processes的数目

SQL>select name,value from v$parameter where name ='job_queue_processes'

然后将Job Queue Processes的数目修改为0

ALTER SYSTEM SET job_queue_processes = 0

保证所有的JOB都会停止。

恢复job_queue_processes的原始值

ALTER SYSTEM SET job_queue_processes = original_value


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/6833527.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-29
下一篇2023-03-29

发表评论

登录后才能评论

评论列表(0条)

    保存