Oracle - ロック中のテーブルとセッションの表示


現在ロック中のOracleセッションを表示するSQLとLinux用シェルです。
USER_ID/PASSWORDには「V$SESSION」「$TRANSACTION_ENQUEUE」などを参照できるユーザを指定してください。

oracleLockSessionShow.sh
# 「V$SESSION」「$TRANSACTION_ENQUEUE」を参照できるユーザを指定
USER_ID=scott
PASSWORD=tigger
INSTANCE_NAME=oracle

# 「EOT」の前の「\」は変数展開をしない設定
sqlplus -s ${USER_ID}/${PASSWORD}@${INSTANCE_NAME} <<\EOT
	SET LINESIZE 1000
	SET PAGESIZE 100

	COLUMN SID FORMAT 999999
	COLUMN SERIAL# FORMAT 9999999
	COLUMN OBJECT_NAME FORMAT A30
	COLUMN USERNAME FORMAT A20
	COLUMN PROGRAM FORMAT A40
	COLUMN MACHINE FORMAT A20
	COLUMN OSUSER FORMAT A10

	SELECT
		s.SID,
		s.SERIAL#,
		d.OBJECT_NAME,
		s.USERNAME,
		s.COMMAND,
		s.PROGRAM,
		s.MACHINE,
		s.OSUSER,
		t.LMODE,
		t.CTIME,
		s.STATUS
	FROM
		v$LOCKED_OBJECT l,
		DBA_OBJECTS d,
		V$TRANSACTION_ENQUEUE t,
		v$SESSION s
	WHERE
		l.OBJECT_ID = d.OBJECT_ID AND
		l.SESSION_ID = s.SID AND
		s.SID = t.SID
	ORDER BY 1, 4, 3
	;
EOT

echo "LMODE(ロック・モード):凡例"
echo "0	なし"
echo "1	Null(NULL)"
echo "2	行共有(SS)"
echo "3	行排他(SX)"
echo "4	共有(S)"
echo "5	共有/行排他(SSX)"
echo "6	排他(X)"

exit


LMODE
番号 ロック・モード
0 なし
1 Null(NULL)
2 行共有(SS)
3 行排他(SX)
4 共有(S)
5 共有/行排他(SSX)
6 排他(X)

2011/09/05