查看鎖衝突

查看鎖衝突的sid和serial#。
col object_name for a30
col machine for a20
select object_name,machine,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;
  object_name machine  sid  serial#
1   A          test64   145   21218
2   A          test64  138    5717
 
 
根據sid查該sql語句,和session狀態等。
SELECT a.username,
a.machine,
a.program,
a.sid,
a.serial#,
a.status,
c.piece,
c.sql_text
FROM v$session a,
v$sqltext c
WHERE a.sid = 145
and a.sql_address=c.address(+)
ORDER BY c.piece

 

  USERNAME MACHINE PROGRAM                    SID SERIAL# STATUS PIECE SQL_TEXT
1 SCOTT    test64 sqlplus@test64 (TNS V1-V3) 145 21218  ACTIVE 0      delete from a

 

    USERNAME MACHINE PROGRAM                    SID SERIAL# STATUS PIECE SQL_TEXT
1   SCOTT    test64  sqlplus@test64 (TNS V1-V3) 138 5717   INACTIVE  

 

測試時發現,status爲inactive的正是需要kill掉的進程。因爲他沒有commit或rollback解除鎖。

 

 

 


alter system kill session 'sid,serial#';

alter system kill session '138,5717';           執行後,138,5717的進程就被kill掉,數據進行了rollback。

 

===========================================================================

 

查出自己的sid

 

查看當前session sid
SELECT sid, serial#
FROM v$session
WHERE audsid = sys_Context('USERENV', 'SESSIONID');
或者
select sys_context('userenv', 'sid') from dual

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章