본문 바로가기

Computer Science/Database

그림으로 공부하는 오라클 구조 - Ch9. 리두(Redo)와 언두(Undo)의 동작

728x90

트랜잭션이 지켜야 할 원칙 ACID

  • Atomicity 원자성
    • 트랜잭션에 포함되는 데이터 변경은 'All or Nothing' 이어야 한다.
    • 즉, 트랜잭션은 더 이상 분할할 수 없는 데이터 변경의 최소 단위라는 의미이다.
  • Consistency 일관성
    • 트랜잭션에 의해 데이터 간 일관성이 어긋나서는 안된다.
    • 예를 들어, Customer 테이블의 데이터가 변경되었는데 Customer 테이블의 인덱스 데이터가 변경되지 않은 경우가 없어야 한다는 것이다.
  • Isolation 고립성
    • 트랜잭션은 다른 트랜잭션을 의식할 필요가 없어야 한다.
    • 즉, 트랜잭션은 고립되어 있어 단독 실행이든 다른 트랜잭션과 동시 실행이든 결과는 같아야 한다.
  • Durability 지속성
    • Commit한 트랜잭션은 장애가 발생하더라도 데이터는 반드시 복구되어야 한다.

 

 

Redo, Undo

  • Redo : '누군가 무엇을 했다' => Redo 로그를 사용하여 과거의 데이터를 최신화(Roll forward)

 

  • Undo : '어떻게 하면 과거의 상태로 돌아갈 수 있는가' => undo 로그를 이용하여 변경취소(Roll back)
    • Undo 테이블 스페이스의 Undo 세그먼트에 보관 => Ring buffer 형태
    • Roll back에 쓰임
    • 읽기 일관성 유지에 쓰임 - 데이터 조회 시작 후 바뀐 데이터를 조회 시작지점으로 돌리기 위해 undo 사용
    • Commit 되지 않은 데이터 읽기에 쓰임(read committed)

 

  • 체크포인트 : 메모리와 디스크의 데이터 동기화 작업 시점
    • Roll forward에 걸리는 시간을 줄일 수 있다. 데이터베이스가 비정상 종료되면 마지막 체크포인트 이후의 트랜잭션 로그를 재생하여 복구하는데 체크포인트를 자주 사용하면 복구 대상 로그가 줄어든다.
    • 너무 자주 하면 디스크 IO 횟수가 늘어나 시스템 부하가 늘어나는 단점이 있다.

 

  • 인스턴스 복구(Instance Recovery) = Crash Recovery
    • 장애 발생 후 redo 로그를 이용하여 데이터를 최신 상태로 갱신
      1. Redo 로그 파일을 이용해 Roll forward 한다. 이 때, Undo 테이블스페이스도 포함되어 있다.
      2. 1번에서 Undo 가 최신 상태가 된 undo 세그먼트의 정보를 활용하여 Commit 되지 않은 것은 rollback 한다.

728x90