当前位置:网站首页 > R语言数据分析 > 正文

oracle查看锁表和解锁(oracle查看锁表记录)



--相关表
SELECT * FROM v$lock;
SELECT * FROM v$sqlarea;
SELECT * FROM v$session;
SELECT * FROM v$process;
SELECT * FROM v$locked_object;
SELECT * FROM all_objects;
SELECT * FROM v$session_wait;

--查看被锁的表 
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;

--查看被锁的表信息
select sess.sid,
       sess.serial#,
       lo.oracle_username,
       lo.os_user_name,
       ao.object_name,
       lo.locked_mode
  from v$locked_object lo, dba_objects ao, v$session sess
 where ao.object_id = lo.object_id
   and lo.session_id = sess.sid;

--查看那个用户那个进程照成死锁
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;
 
--查看连接的进程 
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
 where a.addr = b.paddr
   and b.sql_hash_value = c.hash_value;

-- 检查Oracle是否存在死锁
select sess.sid,
       sess.serial#,
       lo.oracle_username,
       lo.os_user_name,
       ao.object_name,
       lo.locked_mode
  from v$locked_object lo, dba_objects ao, v$session sess
 where ao.object_id = lo.object_id
   and lo.session_id = sess.sid;

--检查Oracle死锁的sql
select sql_text
  from v$sql
 where hash_value in
       (select sql_hash_value
          from v$session
         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
 where b.lockwait = d.kaddr
   and a.address = b.sql_address
   and a.hash_value = b.sql_hash_value;

--查询确定具体是谁锁了谁
select s1.username || '@' || s1.machine || ' ( SID=' || s1.sid ||
       ' ) is blocking ' || s2.username || '@' || s2.machine || ' ( SID=' ||
       s2.sid || ' ) ' AS blocking_status
  from v$lock l1, v$session s1, v$lock l2, v$session s2
 where s1.sid = l1.sid
   and s2.sid = l2.sid
   and l1.BLOCK = 1
   and l2.request > 0
   and l1.id1 = l2.id1
   and l2.id2 = l2.id2;

--查询SQL的执行进度
select se.sid,
       opname,
       trunc(sofar / totalwork * 100, 2) || '%' as pct_work,
       elapsed_seconds elapsed,
       round(elapsed_seconds * (totalwork - sofar) / sofar) remain_time,
       sql_text
  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;

 

到此这篇oracle查看锁表和解锁(oracle查看锁表记录)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • ueditor编辑器采集公众号(ueditor获取编辑器内容)2025-05-13 17:54:09
  • oracle教程(oracle教程pdf)2025-05-13 17:54:09
  • spring教程(spring教程菜鸟)2025-05-13 17:54:09
  • bigboss源有什么用(bigboss源没有mobilesubstrate依赖)2025-05-13 17:54:09
  • 苹果15promax参数(苹果14promax参数)2025-05-13 17:54:09
  • PDFviewer官方下载(pdf viewer下载)2025-05-13 17:54:09
  • 反编译exe文件成源码(reflector反编译exe)2025-05-13 17:54:09
  • srored是什么意思(shorer是什么意思)2025-05-13 17:54:09
  • 连接redis用什么包(redis怎么连接)2025-05-13 17:54:09
  • 群晖root密码(群晖transmission忘记密码)2025-05-13 17:54:09
  • 全屏图片