2014년 10월 17일 금요일

Lock 또는 Locking Transaction 찾는 법



아래의 표는 LOCK WAIT를 발생한 예입니다.

X$LOCK_WAIT의 결과값은 없어도 X$TRANSACTION에 LOCKABLE은 언제든지 나타날 수 있습니다.


아래의 방법으로 해당 세션을 찾을 수 있습니다.


* X$LOCK_WAIT --> X$TRANSACTION --> X$SM_SESS_ENV --> X$SESSION


gSQL> select * from x$lock_wait;
GRANTED_TRANSACTION_SLOT_ID REQUEST_TRANSACTION_SLOT_ID
--------------------------- ---------------------------
10 11

gSQL> select * from x$transaction;
ID SLOT_ID STATE ATTRIBUTE ISOLATION_LEVEL VIEW_SCN COMMIT_SCN TCN BEGIN_TIME PROPAGATE_LOG
------------ ------- ------ ------------------------------------------------- --------------- -------- ---------- --- -------------------------- -------------
-65534 2 ACTIVE READ_ONLY READ COMMITTED 454 -1 0 2014-01-08 13:15:27.477607 TRUE
700079669258 10 ACTIVE READ_ONLYUPDATABLE | LOCKABLE READ COMMITTED 469 -1 1 2014-01-08 13:19:59.398726 TRUE
794580942859 11 ACTIVE READ_ONLYUPDATABLE | LOCKABLEUPDATABLE | LOCKABLE READ COMMITTED 469 -1 1 2014-01-08 13:20:09.765603 TRUE

gSQL> select * from x$sm_sess_env where value=700079669258;
NAME ID VALUE
-------- -- ------------ TRANS_ID 10 700079669258

gSQL> select * from x$sm_sess_env where value=794580942859;
NAME ID VALUE
-------- -- ------------
TRANS_ID 11 794580942859

gSQL> select * from x$session where id=10 or id=11;
ID SERIAL TOP_LAYER CONNECTION USER_ID STATUS WATCH SERVER PROCESS LOGON_TIME PROGRAM
-- ------ --------- ---------- ------- --------- ----- --------- ------- -------------------------- -------
10 15 11 DA 6 CONNECTED LEAVE DEDICATED 5067 2014-01-08 13:19:57.127504 gsql
11 13 11 DA 6 CONNECTED ENTER DEDICATED 4958 2014-01-08 13:19:07.040071 gsql