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

posted @ 2018-03-09 13:57  古道子  阅读(1134)  评论(0编辑  收藏  举报