[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개의 댓글

관련 채용 정보