Oracleブロック情報の表示
2460 ワード
モニタ用のSQL部分を作り、一列にまとめて主な内容を出力し、気に入らないなら自分で分解したり、他の必要な列情報を追加したりします.
解析:
1、閉塞者と被閉塞者のみが出力され、閉塞時間>=60 sの部分である.
2、chr(10)改行出力、sqlplusコマンドラインに効果があり、PLSQL Devには何の役にも立たない.
3、実行効率を考慮してSQL_を検索しないTEXT、SQLだけをつかむID,Prev_SQL_IDは、この補助位置決めプログラムの問題点に基づいている.
4、最後にロックされたデータを検索する文を生成します.
SQL_ベースID検索SQL_TEXT文:
解析:
1、閉塞者と被閉塞者のみが出力され、閉塞時間>=60 sの部分である.
2、chr(10)改行出力、sqlplusコマンドラインに効果があり、PLSQL Devには何の役にも立たない.
3、実行効率を考慮してSQL_を検索しないTEXT、SQLだけをつかむID,Prev_SQL_IDは、この補助位置決めプログラムの問題点に基づいている.
4、最後にロックされたデータを検索する文を生成します.
SELECT 'Blocker_SID: ' || A.SID || ', ' || A_S.SCHEMANAME || ', From: ' ||
A_S.MACHINE || ', ' || A_S.PROGRAM || ', Cur_SQL: ' || A_S.SQL_ID ||
',Prev_SQL: ' || A_S.PREV_SQL_ID || ', Status:' || A_S.STATUS ||
', Lock_Time: ' || A.CTIME || 's.' || CHR(10) || ' -> Locked_SID: ' ||
B.SID || ', Blocked_SQL: ' || B_S.SQL_ID || ' , Locked_ON: ' ||
OBJ.OWNER || '.' || OBJ.OBJECT_NAME || ', Lock_Mode: ' ||
DECODE(A.LMODE,
0,
'0,none',
1,
'1,NULL',
2,
'2,row-S(SS)',
3,
'3,row-X(SX)',
4,
'4,share(S)',
5,
'5,S/Row-X(SSX)',
6,
'6,exclusive(X)') || CHR(10) || ' -> Locked_data_query_SQL: ' ||
(DECODE(OBJ.OBJECT_TYPE,
'TABLE',
'SELECT * FROM ' || OBJ.OWNER || '.' || OBJ.OBJECT_NAME ||
' WHERE ROWID = ''' ||
DBMS_ROWID.ROWID_CREATE(1,
OBJ.DATA_OBJECT_ID,
B_S.ROW_WAIT_FILE#,
B_S.ROW_WAIT_BLOCK#,
B_S.ROW_WAIT_ROW#) || ''';',
NULL)) AS BLOCK_DETAIL
FROM GV$LOCK A,
GV$LOCK B,
GV$SESSION A_S,
GV$SESSION B_S,
DBA_OBJECTS OBJ
WHERE A.ID1 = B.ID1
AND A.ID2 = B.ID2
AND A.CTIME >= 60
AND A.BLOCK > 0
AND B.REQUEST > 0
AND A.SID = A_S.SID
AND A.INST_ID = A_S.INST_ID
AND B.SID = B_S.SID
AND B.INST_ID = B_S.INST_ID
AND B_S.ROW_WAIT_OBJ# = OBJ.OBJECT_ID(+)
ORDER BY A.INST_ID, A.SID;
SQL_ベースID検索SQL_TEXT文:
SELECT Q.SQL_ID, Q.SQL_TEXT, Q.SQL_FULLTEXT
FROM V$SQL Q
WHERE Q.SQL_ID = '&SQL_ID';
-- , SQL_ID SQL_ID