ORACLE:: table lock
1. 증상
1) 정상적으로 서버단 개발 (controller, service, dao, sql)2) 정상적으로 화면단 개발 (nexacro)
3) 기능 작동시 deadlock or memory leak 문제 뱉어냄
2. 원인
1) 쿼리 작업 중 update문 실행 후 commit을 하지 않은 경우2) table에 lock이 걸린 경우
3. 해결
1) table에 lock이 걸려 있는지 확인- lock 걸린 테이블 확인하는 SQL문
SELECT DO.OBJECT_NAME
, DO.OWNER
, DO.OBJECT_TYPE
, DO.OWNER, VO.XIDUSN
, VO.SESSION_ID
, VO.LOCKED_MODE
FROM V$LOCKED_OBJECT VO
, DBA_OBJECTS DO
WHERE VO.OBJECT_ID = DO.OBJECT_ID
| cs |
- 해당 테이블이 lock에 걸렸는지 확인하는 SQL문
SELECT A.SID
, A.SERIAL#
, B.TYPE
, C.OBJECT_NAME
FROM V$SESSION A
, V$LOCK B
, DBA_OBJECTS C
WHERE A.SID = B.SID
AND B.ID1 = C.OBJECT_ID
AND B.TYPE='TM'
AND C.OBJECT_NAME IN ('FA_WHTX_HIN')
| cs |
- lock session 죽이는 SQL문
SELECT A.SID
, A.SERIAL#
FROM V$SESSION A
, V$LOCK B
, DBA_OBJECTS C
WHERE A.SID = B.SID
AND B.ID1 = C.OBJECT_ID
AND B.TYPE = 'TM'
AND C.OBJECT_NAME = '세션죽일테이블명'
| cs |
2-1) rollback을 해서 해결
2-2) DB 연결 차단 후 재접속(clear)
3) lock 세션을 kill하기