<p>--相关表<br /> SELECT * FROM v$lock;<br /> SELECT * FROM v$sqlarea;<br /> SELECT * FROM v$session;<br /> SELECT * FROM v$process;<br /> SELECT * FROM v$locked_object;<br /> SELECT * FROM all_objects;<br /> SELECT * FROM v$session_wait;</p>
讯享网
–查看被锁的表
select b.owner, b.object_name, a.session_id, a.locked_mode
from v\(locked_object a, dba_objects b<br /> where b.object_id = a.object_id;</p> <p>--查看被锁的表信息<br /> select sess.sid,<br /> sess.serial#,<br /> lo.oracle_username,<br /> lo.os_user_name,<br /> ao.object_name,<br /> lo.locked_mode<br /> from v\)locked_object lo, dba_objects ao, v\(session sess<br /> where ao.object_id = lo.object_id<br /> and lo.session_id = sess.sid;</p> <p>--查看那个用户那个进程照成死锁<br /> select b.username, b.sid, b.serial#, logon_time<br /> from v\)locked_object a, v\(session b<br /> where a.session_id = b.sid<br /> order by b.logon_time;<br /> <br /> --查看连接的进程 <br /> SELECT sid, serial#, username, osuser FROM v\)session;
–查出锁定表的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;
–这个语句将查找到数据库中所有的DML语句产生的锁,还可以发现,任何DML语句其实产生了两个锁,一个是表锁,一个是行锁。
–杀掉进程 sid,serial#
alter system kill session ‘386,25655’;
讯享网
–查询Oracle正在执行的sql语句及执行该语句的用户
select b.sid oracleID,
b.username 登录Oracle用户名,
b.serial#,
spid 操作系统ID,
paddr,
sql_text 正在执行的SQL,
b.machine 计算机名
from v\(process a, v\)session b, v\(sqlarea c<br /> where a.addr = b.paddr<br /> and b.sql_hash_value = c.hash_value;</p> <p>-- 检查Oracle是否存在死锁<br /> select sess.sid,<br /> sess.serial#,<br /> lo.oracle_username,<br /> lo.os_user_name,<br /> ao.object_name,<br /> lo.locked_mode<br /> from v\)locked_object lo, dba_objects ao, v\(session sess<br /> where ao.object_id = lo.object_id<br /> and lo.session_id = sess.sid;</p> <p>--检查Oracle死锁的sql<br /> select sql_text<br /> from v\)sql
where hash_value in
(select sql_hash_value
from v\(session<br /> where sid in (select session_id from v\)locked_object));
–检查Oracle死锁用户的sql
select b.username, b.serial#, d.id1, a.sql_text
from v\(lock d, v\)session b, v\(sqltext a<br /> where b.lockwait = d.kaddr<br /> and a.address = b.sql_address<br /> and a.hash_value = b.sql_hash_value;</p> <p>--查询确定具体是谁锁了谁<br /> select s1.username || '@' || s1.machine || ' ( SID=' || s1.sid ||<br /> ' ) is blocking ' || s2.username || '@' || s2.machine || ' ( SID=' ||<br /> s2.sid || ' ) ' AS blocking_status<br /> from v\)lock l1, v\(session s1, v\)lock l2, v\(session s2<br /> where s1.sid = l1.sid<br /> and s2.sid = l2.sid<br /> and l1.BLOCK = 1<br /> and l2.request > 0<br /> and l1.id1 = l2.id1<br /> and l2.id2 = l2.id2;</p> <p>--查询SQL的执行进度<br /> select se.sid,<br /> opname,<br /> trunc(sofar / totalwork * 100, 2) || '%' as pct_work,<br /> elapsed_seconds elapsed,<br /> round(elapsed_seconds * (totalwork - sofar) / sofar) remain_time,<br /> sql_text<br /> from v\)session_longops sl, v\(sqlarea sa, v\)session se
where sl.sql_hash_value = sa.hash_value
and sl.sid = se.sid
and sofar != totalwork
and sofar > 0
order by start_time;
–查询Oracle死锁的进程
SELECT s.username,
l.OBJECT_ID,
l.SESSION_ID,
s.SERIAL#,
l.ORACLE_USERNAME,
l.OS_USER_NAME,
l.PROCESS
FROM V\(LOCKED_OBJECT l, V\)SESSION S
WHERE l.SESSION_ID = S.SID;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/160622.html