RDBMS에 redo log가 필요한 이유

sjo200·2021년 8월 30일

RDBMS

목록 보기
3/4

Redo Log

기본적으로 DB는 DBWR가 직접 파일에 변경사항을 쓰기 전, LGWR가 redo log에 할 일을 레코드 단위로 쓴다. 이 레코드는 'redo'와 'undo redo'로 구성된다. 'undo redo'는 'redo'로 바뀐 사항을 다시 undo하기 위해 Redo Log에 쓰는 undo의 redo이다. 즉, 데이터파일의 데이터가 바뀔 때 바뀌기 전후 둘 다를 남긴다.

일반적으로 Redo Log는 정해진 용량만큼의 파일로 써지고, 최근 세 개의 Redo Log만 남긴다. 새로운 Redo Log를 쓸건데 이미 세 개가 있다면 가장 오래전에 쓴 Redo Log를 지우거나 Archive Log 저장 위치로 옮겨준다. 현재 사용중인 세 개의 Redo Log는 V$LOG 등으로 볼 수 있고, Archived Log 저장 위치로 옮겨진 오래된 Redo Log는 Archive Log라고 하며, V$ARCHIVED_LOG로 조회해볼 수 있다. 미리 설정하지 않으면 Archive Log 없이 지우고 운영한다.

undo는 다음 세 가지 1. rollback, 2. tx recovery, 3. CR(consistency read)를 위해 필요하다. 아래 설명은 각각의 예시를 말한다.

예시

  1. 사용자가 savepoint에 대해, 또는 commit 하지 않고 rollback
  2. DB가 비정상 종료 후 재시작하면 DB instance recovery를 한다. 그 중 roll forward, rollback 시 사용됨
  3. isolation level 중 read committed, repeatable read로 이전 시점의 데이터 블록을 다시 보기 위해 undo를 사용해야한다.

참고자료

d2.naver.com/helloworld/407507

profile
데이터 엔지니어

0개의 댓글