需求:

客户环境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;

RAC环境查询JOB正在运行的信息的更多相关文章

  1. Linux下chkconfig命令详解--(启动或停止)和查询系统服务的运行级信息

    chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. 使用语法:chkconfig [--ad ...

  2. chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息

    chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. 使用语法:chkconfig [--ad ...

  3. Oracle阻塞会话源头查找-单机和RAC环境

    在写 Oracle session相关数据字典(一)  这篇文章时,提到使用v$session视图的树形查询可以得到Oracle锁树,这样就便于我们找出阻塞会话的源头,但是仅仅可以在单机环境中使用.今 ...

  4. 利用XAG在RAC环境下实现GoldenGate自动Failover

    概述 在RAC环境下配置OGG,要想实现RAC节点故障时,OGG能自动的failover到正常节点,要保证两点: 1. OGG的checkpoint,trail,BR文件放置在共享的集群文件系统上,R ...

  5. Oracle RAC环境的日志体系

    转摘:http://blog.itpub.net/22664653/viewspace-722463/ 在Oracle RAC环境中比单个系统的日志体系要复杂:见下图: 简单介绍一下有关Oracle集 ...

  6. RAC 环境下参数文件(spfile)管理

    RAC环境下,初始化参数文件与但实例下参数文件有些异同,主要表现在初始化参数可以为多个实例公用,也可以单独设置各个实例的初始化参数.对于那些非共用的初始化参数则必须要单独设置,而共用的则可以单独设置, ...

  7. RAC 环境下修改归档模式

    RAC环境下的归档模式切换与单实例稍有不同,主要是共享存储所产生的差异.在这种情况下,我们可以将RAC数据库切换到非集群状态下,仅仅在一个实例上来实施归档模式切换即可完成RAC数据库的归档模式转换问题 ...

  8. Oracle-11g-R2 RAC 环境下 GPnP Profile 文件

    GPnP Profile 文件的作用: GPnP Profile 文件是一个保存于 $GRID_HOME/gpnp/<hostname>/profiles/peer 目录下的小型 XML ...

  9. Oracle RAC环境下定位并杀掉最终阻塞的会话-续

    之前在<Oracle RAC环境下定位并杀掉最终阻塞的会话>中,最终使用一个SQL查询出RAC实例之间的所有阻塞关系.但是实际在某些极端的生产环境,是不允许执行复杂的SQL语句,即使允许执 ...

随机推荐

  1. 手机信号G、E、O、3G代表什么意思?

    G指GPRS,是2.5G网络,属于GSM网络,也就是说这项技术位于第二代(2G)和第三代(3G)移动通讯技术之间,GPRS的传输速率可提升至56甚至114Kbps,已经将2017年确定为关闭GSM网络 ...

  2. 股票交易——单调队列优化DP

    题目描述 思路 蒟蒻还是太弱了,,就想到半个方程就GG了,至于什么单调队列就更想不到了. $f[i][j]$表示第$i天有j$张股票的最大收益. 那么有四种选择: 不买股票:$f[i][j]=max( ...

  3. 爬虫之request库主要解析---参照慕课北理工嵩天

    kv = {'key1':'value1','key2':'value2'} r = requests.request (' GET' , 'http://python123.io/ws' , par ...

  4. 百度艾尼ERNIE专场再入魔都,11月23日线下开讲!

    这个十一月,是属于深度学习开发者们的秋季盛宴.『WAVE Summit+』2019 深度学习开发者秋季峰会刚刚落下帷幕,基于ERNIE的语义理解工具套件也在此次峰会上全新发布,旨在为企业级开发者提供更 ...

  5. Mac下配置nacos开机启动

    nacos能正常启动后,开始制作启动app. 1.打开自带的 自动操作 2.点击选项 3.选择应用程序 4.搜索shell,点击运行Shell脚本,写入脚本,$NACOS 为nacos的绝对路径,保存 ...

  6. mysql connect refuse解决方法

    mysql connect refuse解决方法 1 因为连接数太多my.cnf配置文件 下面2个改大一点就好了 <pre>max_user_connectionmax_connectio ...

  7. C++中对C的扩展学习新增语法——For循环以及AUTO类型

    For循环以及AUTO类型 For代码实现: AUTO类型: 1.auto自动类型推导,省事. 2.auto主要在模板中用的多,模板的类型比较长,使用auto可以简化代码. 3.不要轻易使用,我们在编 ...

  8. pat 1108 Finding Average(20 分)

    1108 Finding Average(20 分) The basic task is simple: given N real numbers, you are supposed to calcu ...

  9. .NET Core 获取数据库上下文实例的方法和配置连接字符串

    目录 .NET Core 获取数据库上下文实例的方法和配置连接字符串 ASP.NET Core 注入 .NET Core 注入 无签名上下文 OnConfigure 配置 有签名上下文构造函数和自己n ...

  10. asp.net以流导出Excel

    废话不多说,直接上代码 这是点击导出的事件函数,因为我是从前端获取的Table的json数据,所以需要转换一下,大家直接用查询出来的DataTable即可 protected void bt_expo ...