需求:

客户环境12.2.0.1,三节点RAC需要,将一个正在运行的Job session kill掉,

但是通过DBA_JOBS_RUNNING发现,无法发现其它实例运行的JOB,因此需要登陆多台实例进行查询验证。

一/标准做法

登陆每个数据库实例,执行如下SQL,根据JOB信息,业务人员确认JOB信息,得到SID
select * from dba_jobs_running;
*如果开发人员无法确认JOB_ID,可以通过
select * from DBA_JOBS; WHAT--字段追踪job执行的PLSQL 然后根据v$session
select sid,serial# from v$session where sid=xx;

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);

alter system kill session 'sid,serial#' immediate;
问题已处理 或者通过

--禁用JOB
SQL> EXEC DBMS_JOB.BROKEN(job#,TRUE);
--启用JOB
SQL> EXEC DBMS_JOB.BROKEN(job#,FALSE);

broken  --官方文档定义,TURE则损坏状态
Sets the job as broken or not broken. TRUE sets it as broken; FALSE sets it as not broken.

二/问题分析

为什么dba_jobs_running视图无法获取远程实例执行的JOB Session?

SQL> select owner,object_name,object_id,status,object_type from dba_objects where object_name='DBA_JOBS_RUNNING';
OWNER OBJECT_NAME OBJECT_ID STATUS OBJECT_TYPE
---------- ------------------------------ ---------- ------- -------------------
SYS DBA_JOBS_RUNNING 4923 VALID VIEW
PUBLIC DBA_JOBS_RUNNING 4924 VALID SYNONYM SQL> select dbms_metadata.get_ddl('VIEW','DBA_JOBS_RUNNING','SYS') ddl_text from dual;
DDL_TEXT
--------------------------------------------------------------------------------
CREATE OR REPLACE FORCE VIEW "SYS"."DBA_JOBS_RUNNING" ("SID", "JOB", "FAILURES
", "LAST_DATE", "LAST_SEC", "THIS_DATE", "THIS_SEC", "INSTANCE") AS
select v.SID, v.id2 JOB, j.FAILURES,
LAST_DATE, substr(to_char(last_date,'HH24:MI:SS'),1,8) LAST_SEC,
THIS_DATE, substr(to_char(this_date,'HH24:MI:SS'),1,8) THIS_SEC,
j.field1 INSTANCE
from sys.job$ j, v$lock v
where v.type = 'JQ' and j.job (+)= v.id2 从上述SQL中,我们能知道,为什么DBA_JOBS_RUNNING 这个视图无法获取RAC其它实例正在运行的JOB,因为获取的条件是V$LOCK TYPE=JQ,其它实例信息无法捕捉。
想法,使用一个SQL,能够获取到RAC环境下所有运行的JOB

三/改写SQL

添加了JOB运行的实例ID,RAC环境无需登陆多个节点查询
select v.inst_id,v.SID, v.id2 JOB, j.FAILURES,
LAST_DATE, substr(to_char(last_date,'HH24:MI:SS'),,) LAST_SEC,
THIS_DATE, substr(to_char(this_date,'HH24:MI:SS'),,) THIS_SEC,
j.field1 INSTANCE
from sys.job$ j, gv$lock v
where v.type = 'JQ' and j.job (+)= v.id2;

添加了SESSION,SERIAL#信息,kill session更加快速
select v.inst_id,v.SID,s.serial#,v.id2 JOB, j.FAILURES,
LAST_DATE, substr(to_char(last_date,'HH24:MI:SS'),,) LAST_SEC,
THIS_DATE, substr(to_char(this_date,'HH24:MI:SS'),,) THIS_SEC,
j.field1 INSTANCE
from sys.job$ j, gv$lock v,gv$session s
where v.type = 'JQ' and j.job (+)= v.id2 and v.inst_id=s.inst_id and v.sid=s.sid; --建议测试后谨慎操作

select 'alter system kill session '''||v.SID||','||s.serial#||',@'||v.inst_id||''' immediate; '
from sys.job$ j, gv$lock v,gv$session s
where v.type = 'JQ' and j.job (+)= v.id2 and v.inst_id=s.inst_id and v.sid=s.sid and v.id2=&job_id;

 
添加了JOB运行的实例ID,RAC环境无需登陆多个节点查询
select v.SID, v.id2 JOB, j.FAILURES, LAST_DATE, 
substr(to_char(last_date, 'HH24:MI:SS'), , ) LAST_SEC,
THIS_DATE, substr(to_char(this_date, 'HH24:MI:SS'), , ) THIS_SEC,
v.INST_ID instance
from sys.job$ j, gv$lock v
where v.type = 'JQ' and j.job(+) = v.id2; create or replace view dba_jobs_running_rac
as
select v.SID, v.id2 JOB, j.FAILURES,
LAST_DATE, substr(to_char(last_date, 'HH24:MI:SS'), , ) LAST_SEC,
THIS_DATE, substr(to_char(this_date, 'HH24:MI:SS'), , ) THIS_SEC,
v.INST_ID instance
from sys.job$ j, gv$lock v
where v.type = 'JQ' and j.job(+) = v.id2; select * from dba_jobs_running_rac;

最新文章

  1. C语言读写文件
  2. Hadoop伪分布配置与基于Eclipse开发环境搭建
  3. 说说iOS中的手势及触摸
  4. Different Ways to Add Parentheses——Leetcode
  5. Spring 3 + Quartz 1.8.6 Scheduler Example--reference
  6. 使用jQuery的时候,js文件代码位置规范
  7. Docker部署DVWA
  8. 【原码笔记】-- protobuf.js 与 Long.js
  9. RedHat 安装RabbitMQ
  10. 单片机成长之路(51基础篇) - 006 在Linux下搭建51单片机的开发烧写环境
  11. Ecplise通过Git将项目提交到GitHub
  12. 1.6 selenium3+firefox环境搭建
  13. RabbmitMQ-工作队列及相关概念
  14. python 中is和== 的理解
  15. Java如何检查文件是否在服务器上被修改了?
  16. 【转载】 AI会议的总结(by南大周志华)
  17. Linux编辑启动停止重启springboot jar包脚本
  18. tapd
  19. IOS设计模式第五篇之装饰设计模式的代理设计模式
  20. Android studio 运行demo时一直卡在"Installing APKS"时的解决办法

热门文章

  1. zookeeper能干啥
  2. 用python实现你的绘画梦想
  3. 爬虫学习--Day3(小猿圈爬虫开发_1)
  4. 用Java实现简单的区块链
  5. cnblogs侧边栏访客统计 小插件
  6. mpvue+小程序云开发,纯前端实现婚礼邀请函(相册小程序)
  7. python 基础之 模块
  8. flume安装和介绍
  9. 05-商品类别数据和VUE展示
  10. MySQL/MariaDB读写分离配置