ロック競合が発生している可能性がある場合は、V$LOCK、V$SESSION、V$LOCKED_OBJECT(V$LOCKのビュー)でロックの情報を取得しALTER SYSTEM KILL SESSIONでセッションを開放しロックを開放します。セッション(SID)、ユーザー、オブジェクト及びプログラム等の項目を調査しロックの解消と原因を調べます。
セッションの強制終了
ロックのセッション、ユーザ、オブジェクト及びプログラム名を表示
Select V$SESSION.SID, DBA_OBJECTS.OBJECT_NAME, V$SESSION.OSUSER, V$SESSION.PROGRAM
From V$LOCKED_OBJECT
Left Join DBA_OBJECTS on V$LOCKED_OBJECT.OBJECT_ID = DBA_OBJECTS.OBJECT_ID
Left Join V$SESSION ON V$LOCKED_OBJECT.SESSION_ID = V$SESSION.SID
Order By V$SESSION.SID, DBA_OBJECTS.OBJECT_NAME
Oracle8iの場合は、下記で参照します。
Select V$SESSION.SID, DBA_OBJECTS.OBJECT_NAME, V$SESSION.OSUSER, V$SESSION.PROGRAM
From V$LOCKED_OBJECT, DBA_OBJECTS, V$SESSION
Where V$LOCKED_OBJECT.OBJECT_ID = DBA_OBJECTS.OBJECT_ID(+)
And V$LOCKED_OBJECT.SESSION_ID = V$SESSION.SID(+)
Order By V$SESSION.SID, DBA_OBJECTS.OBJECT_NAME
ロックの基本情報を表示
Select SID,TYPE,LMODE,REQUEST,CTIME From V$LOCK Where TYPE IN ('TX','TM')
ロックを起こしているセッションのSQLを表示
Select V$SQLAREA.SQL_TEXT,V$SQLAREA.ADDRESS
From V$SQLAREA, V$SESSION, V$LOCK
Where V$SQLAREA.ADDRESS = V$SESSION.SQL_ADDRESS
And V$SESSION.SID = V$LOCK.SID
And V$LOCK.TYPE IN ('TX','TM')
ロックの解消
ロックの解消は、ロックが発生したセッションを開放します。セッションの強制終了
alter system kill session 'sid,serial#';
コメント
コメントを投稿