Date 충돌 = Session 충돌 = Lock 충돌
Lock
- 변경 작업 발생 시 DBMS는 관련 행 단위로 Lock을 구현하고 작업을 진행함.
- Lock 트랜잭션 진행 중에는 유지되고, 트랜잭션 종료 시 해제됨.
- Lock이 구현된 곳에 작업이 요청되는 경우 큐라고 하는 대기공간에서 기다림.
Lock 충돌
- Waiting이 길어지는 경우 Lock 충돌로 감지하고 해결해야함.
Lock 충돌의 원인
- 트랜잭션을 길제 진행하는 경우
- 커밋되지 않은 작업이 남아있는 경우
Lock 충돌 감지 방법(모니터링 방법)
-> DBA 권한 필요!(sys사용자)
- v$session : DB에 접속된 세션 정보와 Lock 충돌 정보를 모니터링 할 수 있는 DB 사전
Client 1
Client 2
Client 1
client2가 작업중인 102번 사원 행에 update하려고 하니 lock이 걸려서 커서가 깜빡 거린다
sys
blocking_session
130번 사용자가 막고 있음
select username, sid, serial
from v$session
where username is not null;
session kill 시키기
alter system kill session 'SID, Serial#' immediate;
130번 사용자 접속 끊음
Lock 충돌의 특이 케이스 : Deadlock(교착상태)
- 두 세션이 각자의 자원을 선점한 상태에서 상대방의 자원을 서로 요청하는 경우
- Deadlock은 특수한 경우 이므로 DBMS에 의해서 자동감지되고 해결됨.
- 한쪽 세션으로 Deadlock 오류 메ㅔ지가 자동으로 발생되면서 해결됨.
client1
client2
client1
커서 깜빡거리면서 lock 걸림
client2
lock 걸림
client1
에러메시지 뜨면서 lock 풀림. rollback 또는 커밋 하기