ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SQL] Redo와 Undo
    프로그램/SQL 2024. 8. 1. 12:29

     

     

    | Redo란?

     

     

    SGA에는 Redo Log Buffer, DB에는 Redo Log Files가 있는 것을 확인할 수 있습니다. Redo가 무엇이길래 메모리에도 디스크에도 존재하는 걸까? 단어를 자세히 보면 Redo Log라고 표시되어 있습니다. 즉, Redo는 Log의 한 종류입니다. 주로 Redo와 Undo를 같이 설명하며, 데이터를 복원하는데 두 가지 로그가 많이 사용되기 때문입니다.

     

    데이터를 조회 및 수정하는 경우 DB Buffer Cache에 Buffer가 기록되며, 수정된 데이터(=Dirty Buffer)를 별도의 Redo Log Buffer에 로그를 기록하며, 이러한 로그를 Redo Log라고 부릅니다. 즉, Redo Log는 변경 사항에 대한 기록이며, 다음과 같은 세 가지 목적을 가집니다.

     

     

    1. Database Recovery

      물리적으로 디스크에 결함이 생기는(Media Fail이 발생하는) 경우 Archived Redo Log에 Redo Log를 이용해 디스크를 복원합니다.

    2. Cache Recovery

      인스턴스의 비정상적인 종료(메모리에 저장되기 때문에 캐시가 증발)를 대비하기 위해 Redo Log Buffer의 기록된 변경 사항을 디스크의 Redo Log Files에 저장합니다. 비정상적인 종료 후 디스크의 Redo Log Files의 Redo Log를 이용해 변경 사항을 복구(Data Files에는 미반영된 상태) 시킵니다.

    3. Fast Commit

      Commit 수행 시, 변경 사항을 바로 Data Files에 적용하는 것이 아닌 LGWR 프로세스를 작동해 Redo Log Files에 변경사항을 기록해 빠르고 안전하게 변경사항을 디스크에 저장합니다. 왜 Data Files에 저장하지 않고 불일치를 두는지 궁금한 경우 Oracle Process란?(+Instance) 보러가기)

     

     

     


     

     

     

    | Undo란?

     

     

    Undo 또한 Log의 한 종류이며, 변경사항을 복구하고 데이터의 일관성을 보장하기 위한 Log입니다. Undo Log는 DB Buffer Cache와 Undo 세그먼트 두 곳에 저장됩니다. Undo 세그먼트는 메모리가 아닌 디스크의 Data Files에 존재하며, DBWn 프로세스가 동작할 때, Undo 세그먼트에 Undo Log를 저장하게 됩니다.

     

     

    <Undo Log 저장 위치>

     

     

     

    Undo의 목적은 다음과 같은 세 가지 목적을 가집니다.

     

     

    1. Transaction Rollback

      Rollback 동작 시, Undo Log를 이용해 트랜잭션이 전으로 데이터를 복구합니다. 이때, DBWn 프로세스가 동작하기 전과 후로 Undo Log를 가져오는 위치가 달라집니다.

        1-1. DBWn 프로세스가 동작하기 전의 Rollback
               DB Buffer Cache에 있는 Undo Log를 이용해 데이터를 트랜잭션 전의 상태로 되돌립니다.

        1-2. DBWn 프로세스가 동작한 후의 Rollback
               Data Files의 Undo 세그먼트에 있는 Undo Log를 이용해 데이터를 트랜잭션 전의 상태로 되돌립니다.


    2. Transaction Recovery

      인스턴스의 비정상적인 종료(메모리에 저장되기 때문에 캐시가 증발) 시, Redo Log Files에 있는 Redo Log를 이용해 변경 사항을 복구하고 아래와 같은 두 가지 방법으로 Undo Log를 이용해 트랜잭션의 변경 사항을 롤백합니다.

        2-1. Undo 세그먼트에 있는 Undo Log를 이용해 데이터를 트랜잭션 전의 상태로 롤백합니다.

        2-2. Redo Log Files에 있는 Redo Log를 통해 Undo Log를 복구한 후 해당 Undo Log를 통해 롤백합니다.


    3. Read Consistency

      데이터를 읽는 트랜잭션과 데이터를 쓰는 트랜잭션이 동시에 일어날 경우, 수정 중인 데이터를 읽는 것이 아닌 Undo Log를 통해 수정 전의 데이터를 읽습니다. 이 방식으로 읽기 일관성을 유지할 수 있습니다.

     

     

     

    '프로그램 > SQL' 카테고리의 다른 글

    [SQL] Oracle Process란?(+Instance)  (0) 2024.07.31
    [SQL] Process와 I/O가 SQL 속도에 미치는 영향  (0) 2024.06.18
    [SQL] SGA란?  (0) 2024.06.11
    [SQL] 데이터베이스 저장 구조  (0) 2024.05.28
    [SQL] Function vs Procedure  (0) 2024.05.28
Designed by Tistory.