재활용
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하는 방법