티스토리 뷰

재활용

ORACLE: table lock

청소부 2019. 3. 6. 13:54


- 발생 원인
 1) UPDATE 문 실행 후 commit을 하지 않은 경우에 발생

 2) table에 lock이 걸린 경우


- 증상

 1) 정상적으로 서버단 개발 (controller, service, dao, sql)

 2) 정상적으로 화면단 개발 (nexacro)

 3) 기능 작동 시 교착상태(deadlock) 또는 메모리 부족 상태(memory leak) 에러 메시지 출력


- 문제 해결

 1) table에 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


 2) 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


 3) commit 되지 않은 데이터를 commit 하여 해결

  - rollback을 해서 해결하는 방법도 있음

  - DB 연결 후에 차단 후 재접속(clear)

 4) lock 세션을 kill하는 방법




댓글