×

oracle查看锁表的sql

oracle查看锁表的sql(oracle频繁锁表,怎么查出原因)

admin admin 发表于2024-08-14 13:14:35 浏览5 评论0

抢沙发发表评论

本篇文章给大家谈谈oracle查看锁表的sql,以及oracle频繁锁表,怎么查出原因对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

本文目录

oracle频繁锁表,怎么查出原因

通过下面的语句查看是否有引发锁表的语句在执行,找到执行用户,然后跟对应的用户沟通select l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, s.user#, l.os_user_name, s.machine, s.terminal, a.sql_text, a.action from v$sqlarea a, v$session s, v$locked_object l where l.session_id = s.sid and s.prev_sql_addr = a.address order by sid, s.serial#;如果一直没有锁表的语句出现,那可能是对应的表在做DDL操作,如添加索引,也可能引发锁表,这个可以去alert日志里查看下是否有人在添加索引

查看Oracle中是否有锁表的sql

用如下语句查询:

select ’blocker(’ || lb.sid || ’:’ || sb.username || ’)-sql:’ ||       qb.sql_text blockers,       ’waiter (’ || lw.sid || ’:’ || sw.username || ’)-sql:’ ||       qw.sql_text waiters  from v$lock lb, v$lock lw, v$session sb, v$session sw, v$sql qb, v$sql qw where lb.sid = sb.sid   and lw.sid = sw.sid   and sb.prev_sql_addr = qb.address   and sw.sql_address = qw.address   and lb.id1 = lw.id1   and sw.lockwait is not null   and sb.lockwait is null   and lb.block = 1;

如果有被锁的sql,查询中有结果:

oracle如何查看是因为什么锁表

--锁定对象锁表查询select s.SID,s.SERIAL#,o.object_name, s.USERNAME, s.MACHINE, s.BLOCKING_SESSION, s.SQL_ID, lo.*from V$LOCKED_OBJECT lo, DBA_OBJECTS o, V$SESSION Swhere lo.object_id=o.object_id AND lo.SESSION_ID=s.SID(+);

oracle 锁表时,怎么查出是哪些SQL语句导致了锁表

SELECT S.SID SESSION_ID, S.USERNAME, DECODE(LMODE, 0, ’None’, 1, ’Null’, 2, ’Row-S (SS)’, 3, ’Row-X (SX)’, 4, ’Share’, 5, ’S/Row-X (SSX)’, 6, ’Exclusive’, TO_CHAR(LMODE)) MODE_HELD, DECODE(REQUEST, 0, ’None’, 1, ’Null’, 2, ’Row-S (SS)’, 3, ’Row-X (SX)’, 4, ’Share’, 5, ’S/Row-X (SSX)’, 6, ’Exclusive’, TO_CHAR(REQUEST)) MODE_REQUESTED, O.OWNER||’.’||O.OBJECT_NAME||’ (’||O.OBJECT_TYPE||’)’, S.TYPE LOCK_TYPE, L.ID1 LOCK_ID1, L.ID2 LOCK_ID2 FROM V$LOCK L, SYS.DBA_OBJECTS O, V$SESSION S WHERE L.SID = S.SID AND L.ID1 = O.OBJECT_ID;执行上记SQL语句,可以查寻到数据库中的锁的情报.SESSION_ID, USERNAME, MODE_HELD, MODE_REQUESTED, OBJECT_NAME, LOCK_TYPE, LOCK_ID分别是 拥有锁的SESSION_ID,拥有锁的USERNAME,锁的执行模式MODE_HELD,锁的请求MODE_REQUESTED,锁所在的数据库对象名,锁的类型,锁的ID还有你问的应该是数据库中表出现死锁情况吧,是哪些sql过程导致了表死锁:解决方案如下:1.查哪个过程被锁: 查V$DB_OBJECT_CACHE视图: SELECT * FROM V$DB_OBJECT_CACHE WHERE OWNER=’过程的所属用户’ AND CLOCKS!=’0’; 2. 查是哪一个SID,通过SID可知道是哪个SESSION: 查V$ACCESS视图: SELECT * FROM V$ACCESS WHERE OWNER=’过程的所属用户’ AND NAME=’刚才查到的过程名’; 3. 查出SID和SERIAL#: 查V$SESSION视图: SELECT SID,SERIAL#,PADDR FROM V$SESSION WHERE SID=’刚才查到的SID’; 查V$PROCESS视图: SELECT SPID FROM V$PROCESS WHERE ADDR=’刚才查到的PADDR’; 4. 杀进程: (1)先杀ORACLE进程: ALTER SYSTEM KILL SESSION ’查出的SID,查出的SERIAL#’; (2)再杀操作系统进程: (linux)KILL -9 刚才查出的SPID或ORAKILL 刚才查出的SID 刚才查出的SPID。

查看oracle锁的表名

下面3个语句是我经常使用来解决oracle锁问题的 -- 注意你的用户有没有权限问题1. 查看被锁的表SELECT p.spid, a.serial#, c.object_name, b.session_id, b.oracle_username, b.os_user_name FROM v$process p, v$session a, v$locked_object b, all_objects c WHERE p.addr = a.paddr AND a.process = b.process AND c.object_id = b.object_id 2. 查看是哪个进程锁的 SELECT sid, serial#, username, osuser FROM v$session where osuser = ’tangpj’3. 杀掉这个进程 alter system kill session ’sid,serial#’;

查看oracle是否锁表

Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作,那么这些操作是怎么实现的呢?本文我们主要就介绍一下这部分内容。(1)锁表查询的代码有以下的形式:select count(*) from v$locked_object;select * from v$locked_object;(2)查看哪个表被锁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;(3)查看是哪个session引起的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; (4)杀掉对应进程执行命令:alter system kill session’1025,41’;其中1025为sid,41为serial#.

OK,关于oracle查看锁表的sql和oracle频繁锁表,怎么查出原因的内容到此结束了,希望对大家有所帮助。