[23.02.08] 74일차 [데이터베이스]

W·2023년 2월 8일
0

국비

목록 보기
110/119

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#, blocking_session
from v$session
where username is not null;

session kill 시키기

  • DBA권한 필요(sys사용자)
alter system kill session 'SID, Serial#' immediate;

130번 사용자 접속 끊음

Lock 충돌의 특이 케이스 : Deadlock(교착상태)

  • 두 세션이 각자의 자원을 선점한 상태에서 상대방의 자원을 서로 요청하는 경우
  • Deadlock은 특수한 경우 이므로 DBMS에 의해서 자동감지되고 해결됨.
  • 한쪽 세션으로 Deadlock 오류 메ㅔ지가 자동으로 발생되면서 해결됨.

client1

client2

client1

커서 깜빡거리면서 lock 걸림

client2

lock 걸림

client1


에러메시지 뜨면서 lock 풀림. rollback 또는 커밋 하기

0개의 댓글