zoukankan      html  css  js  c++  java
  • ORACLE 查看被锁的表、导致锁表的目标机器、及对应锁表语句

    可能出现锁表场景:若一个模块日常运行一切正常,突然出现故障,比如某平台在1秒内返回的话费查询短信忽然产生了延迟,很多客户发出短信后几十分钟仍然未收到。

    为了模拟锁表,我开了几个session,分别执行update语句后,不做任何提交或回滚的操作。即产生了锁表。

    查看被锁的表是否包含程序模块对应的后台数据表。

    1、

    --查看被锁的表
    select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;

    2、

    --查看那个用户那个进程照成死锁
    select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b
    where a.session_id = b.sid order by b.logon_time;

    3、

    --3.查出锁定表的sid, serial#,os_user_name, machine_name, terminal,锁的type,mode
    SELECT s.sid, s.serial#, s.username, s.schemaname, s.osuser, s.process, s.machine,
    s.terminal, s.logon_time, l.type
    FROM v$session s, v$lock l
    WHERE s.sid = l.sid
    AND s.username IS NOT NULL
    ORDER BY sid;

    4、

    ---查看所标的sql_hash_value,
    SELECT object_name 被锁表 , machine 所属机器, l.ORACLE_USERNAME 表所在用户,s.sid, s.serial# ,s.LOCKWAIT ,s.SQL_HASH_VALUE
    FROM gv$locked_object l, dba_objects o, gv$session s
    WHERE l.object_id = o.object_id
    AND l.session_id = s.sid and o.Object_Name='QINTIAN_DATA_HEADER' ;

    5、

    --查看对应的锁表SQL
    select * from v$sql a where a.HASH_VALUE = '3023849173'

     

     6、

    --杀掉进程 sid,serial#

    alter system kill session '685,12071';
    alter system kill session '491,16923';
    alter system kill session '298,34588';
    alter system kill session '393,2388';

  • 相关阅读:
    团队开发-第一阶段冲刺-10
    团队开发-第一阶段冲刺-09
    Spring(三)
    第五周总结
    Spring(一)
    程序员修炼之道:从小工到专家阅读笔记1
    MyBatis(三)
    MyBatis(二)
    MyBatis
    第四周总结
  • 原文地址:https://www.cnblogs.com/gudaozi/p/8533541.html
Copyright © 2011-2022 走看看