Oracle SESSION

##查看session锁住情况
在实际开发中,我们经常会碰到业务的求助,XXX模板一直报资源被占用的错误,或者XX用户反映数据库登陆不上了。这个时候我们就可以在视图 gv$lock 和 gv$session 中查询哪些表被哪些会话锁住了:

SELECT /*+ RULE */
 ls.osuser os_user_name,
 ls.username user_name,
 decode(ls.type,
        'RW',
        'Row wait enqueue lock',
        'TM',
        'DML enqueue lock',
        'TX',
        'Transaction enqueue lock',
        'UL',
        'User supplied lock') lock_type,
 o.object_name OBJECT,
 decode(ls.lmode,
        1,
        NULL,
        2,
        'Row Share',
        3,
        'Row Exclusive',
        4,
        'Share',
        5,
        'Share Row Exclusive',
        6,
        'Exclusive',
        NULL) lock_mode,
 o.owner,
 ls.sid,
 ls.serial# serial_num,
 ls.id1,
 ls.id2
  FROM sys.dba_objects o,
       (SELECT s.osuser,
               s.username,
               l.type,
               l.lmode,
               s.sid,
               s.serial#,
               l.id1,
               l.id2
          FROM gv$session s,
               gv$lock    l
         WHERE s.sid = l.sid) ls
 WHERE o.object_id = ls.id1
   AND o.owner <> 'SYS'
 ORDER BY o.owner,
          o.object_name

##kill session
无论是session一直占用了资源不放,还是登陆不上去,大部分原因都是因为用户操作不当,当然也可能是oracle的小BUG,我们直接干掉这个session就可以了:

alter system kill session 'sid, SERIAL#';

一个偷懒的方法可以直接生成上述脚本:

SELECT DISTINCT 'alter system kill session ' || chr(39) || b.sid || ',' || b.serial# || chr(39) || ';' AS 生成的sql,
                b.username,
                b.logon_time

  FROM v$locked_object a,	
       v$session       b

 WHERE a.session_id = b.sid

 ORDER BY b.logon_time
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值