日期:2014-05-16  浏览次数:20451 次

ORACLE 查看锁和解锁

?

1.查看锁情况

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 v$session s, v$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

?

--查询锁定状态的session

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

?

--查询指定的某个session,通过status字段判断是否处于锁定状态

?select t.STATUS ?from ?V$SESSION t where sid = 1029

?

2.杀掉进程 ?kill session

alter system kill session 'sid,serial_num';

?

select sid,

?? ? ? serial#,

?? ? ? username,

?? ? ? program,

?? ? ? status,

?? ? ? sql_id,

?? ? ? blocking_instance,

?? ? ? blocking_session

??from v$session

?where event = 'enq: TX - row lock contention'

?order by blocking_session;