Oracle SESSION

来源:互联网 发布:mac能用ios手游模拟器 编辑:程序博客网 时间:2024/06/14 00:15

查看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 0
原创粉丝点击