Oracle中查看引起Session阻塞的2个脚本分享
用户A执行删除,但是没有提交。
SQL>deletefromtestwhereobject_id<10;
已删除8行。
用户B执行删除或者更新id<10的记录,则被阻塞。
SQL>updatetestsetflag='N'whereobject_id<10;
遇到这种阻塞,首先需要确定问题。可以使用以下脚本。
selectt2.username,t2.sid,t2.serial#,t2.logon_time fromv$locked_objectt1,v$sessiont2 wheret1.session_id=t2.sidorderbyt2.logon_time;
结果如下:
USERNAME SID SERIAL#LOGON_TIME ---------------------------------------------------------------- LIHUILIN 14 8709-11月-13 LIHUILIN 139 65509-11月-13
或者使用
select (selectusernamefromv$sessionwheresid=a.sid)blocker, a.sid,'isblocking', (selectusernamefromv$sessionwheresid=b.sid)blockee, b.sid fromv$locka,v$lockb wherea.block=1andb.request>0anda.id1=b.id1anda.id2=b.id2;
结果如下:
BLOCKER SID'ISBLOCKING' BLOCKEE SID --------------------------------------------------------------------------------------------- LIHUILIN 14 isblocking LIHUILIN 139
Kill引起阻塞的Session
select'altersystemkillsession'''||sid||','||serial#||''';'cmdfromv$sessionwhereusername='LIHUILIN'andsid=14;
结果如下:
CMD ----------------------------------------- altersystemkillsession'14,87';
最后执行altersystem命令,阻塞解除。