打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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;

ng:0'>null

 order by last_call_et desc;

 

方法/步骤

  1. 查出锁定object的session的信息以及被锁定的object名

    SELECT l.session_id sid, s.serial#, l.locked_mode,l.oracle_username,

    l.os_user_name,s.machine, s.terminal, o.object_name, s.logon_time

    FROM v$locked_object l, all_objects o, v$session s

    WHERE l.object_id = o.object_id

    AND l.session_id = s.sid

    ORDER BY sid, s.serial# ;

     
  2. 查出锁定表的session的sid, serial#,os_user_name, machine name, terminal和执行的语句

    --比上面那段多出sql_text和action

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

  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;

    ign:left;mso-layout-grid-align: none;text-autospace:none'>ORDER BY sid, s.serial#;

  4. 这个语句将查找到数据库中所有的DML语句产生的锁,还可以发现,任何DML语句其实产生了两个锁,一个是表锁,一个是行锁。

    SELECT /*+ rule */ s.username,

    decode(l.type,'TM','TABLE LOCK',

    'TX','ROW LOCK',

    NULL) LOCK_LEVEL,

    o.owner,o.object_name,o.object_type,

    s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser

    FROM v$session s,v$lock l,dba_objects o

    WHERE l.sid = s.sid

    AND l.id1 = o.object_id(+)

    AND s.username is NOT NULL

  5. 查询到谁锁了表,而谁在等待。

    SELECT /*+ rule */ lpad(' ',decode(l.xidusn ,0,3,0))||l.oracle_username User_name,

    o.owner,o.object_name,o.object_type,s.sid,s.serial#

    FROM v$locked_object l,dba_objects o,v$session s

    WHERE l.object_id=o.object_id

    AND l.session_id=s.sid

    ORDER BY o.object_id,xidusn DESC

     
  6. 查询后台执行语句的‘sid’与‘SERIAL’

    select distinct 'alter system kill session ''' || s.sid || ',' ||s.SERIAL# || '''' || ';'

    FROM v$locked_object l, all_objects o, v$session s

    WHERE l.object_id = o.object_id

    AND l.session_id = s.sid

  7. 根据上图的语句可以在命令窗口进行批量杀进行  

    --kill session语句

    alter system kill session'50,492';

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
oracle表被session锁住,解决办法
Oracle杀死死锁进程
Oracle实例占用超高CPU排查
Oracle包被锁定的原因分析及解决方案
ORACLE锁表原因查询和解决办法
查看Oracle被锁的表以及如何解锁
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服