Write Ahead Logging (WAL)

Oracle의 Write-Ahead Logging (WAL)

Oracle에서는 Write-Ahead Logging (WAL) 개념이 Redo Log와 Undo Log를 통해 구현됩니다. WAL은 데이터를 디스크의 데이터 파일에 기록하기 전에, 먼저 로그(redo log)에 기록하는 기법으로, 장애 발생 시 데이터 복구 및 트랜잭션의 무결성을 보장하는 핵심 기술입니다. Fast Commit시 사용되는 기법이기도 합니다.

1. Write-Ahead Logging (WAL)의 개념

  • 데이터를 직접 데이터 파일(datafile)에 기록하는 것이 아니라, 먼저 로그 파일(redo log) 에 변경 내용을 기록한 후 실제 데이터 파일에 반영
  • 트랜잭션 커밋 전에 로그를 기록하므로, 장애 발생 시 로그를 기반으로 데이터 복구가 가능
  • Redo 로그Undo 로그를 활용하여 WAL을 구현함

2. Oracle의 WAL 구조

Oracle의 WAL은 Redo Log와 Undo Log를 기반으로 작동하며, 이를 통해 데이터의 무결성을 보장합니다.

🔹 Redo Log (Redo 기록)

  • 모든 변경 사항을 기록하는 로그로, 인스턴스 장애 발생 시 복구를 위한 핵심 역할
  • DB에 변경된 데이터가 반영되기 전에, 먼저 Redo Log에 기록되므로 WAL 개념을 충족
  • Redo Log는 로그 버퍼(Redo Log Buffer) → Redo Log 파일로 플러시됨
  • LGWR (Log Writer) 프로세스가 트랜잭션 커밋 시 Redo Log를 디스크에 기록
  • 장애 발생 시 Redo 로그를 이용해 데이터 복구 가능

🔹 Undo Log (Undo 기록)

  • 데이터 변경 이전 상태를 저장하는 롤백(Rollback) 용도의 로그
  • MVCC(다중 버전 동시성 제어) 를 구현하기 위해 사용됨
  • Redo Log와 달리, 트랜잭션이 롤백될 경우 데이터를 원래 상태로 되돌리기 위해 사용됨
  • Undo Tablespace에 저장되며, DBWR 프로세스를 통해 관리

3. Write-Ahead Logging(WAL) 동작 과정

📌 데이터 변경 (INSERT, UPDATE, DELETE)

  1. 트랜잭션이 변경을 수행
    • 사용자가 INSERT, UPDATE, DELETE 등의 DML 문을 실행
  2. Redo Log Buffer에 변경 사항 저장
    • 변경된 데이터의 Redo 정보(변경 사항)Redo Log Buffer에 저장 (WAL 원칙 적용)
  3. Undo Log Buffer에 이전 데이터 저장
    • Rollback을 위한 Undo 정보를 Undo Log Buffer에 저장
  4. Redo Log가 Redo Log 파일로 기록
    • LGWR (Log Writer) 프로세스가 Redo Log Buffer의 데이터를 Redo Log 파일로 플러시(디스크 기록)
    • 이 과정이 끝나야 트랜잭션이 COMMIT될 수 있음
  5. DB Buffer Cache에 데이터 적용
    • 변경된 데이터가 DB Buffer Cache(메모리)에 존재
    • DBWR (Database Writer) 프로세스가 일정 시간 후 변경 사항을 실제 데이터 파일에 기록 (Lazy Write)
  6. 커밋 완료
    • Redo Log 파일에 기록이 완료되면, 트랜잭션이 커밋됨 (COMMIT 성공)
    • 장애 발생 시, Redo Log를 기반으로 데이터 복구 가능

4. 장애 발생 시 WAL을 이용한 복구

Oracle은 WAL을 기반으로 Instance Recovery와 Media Recovery를 수행함

✅ Instance Recovery (SGA 메모리 손실 시)

  • 전원이 나가거나, DB 인스턴스가 비정상 종료될 경우 사용됨
  • Redo 로그를 이용하여 커밋된 트랜잭션을 재적용 (Redo 적용)
  • Undo 로그를 이용하여 커밋되지 않은 트랜잭션을 롤백 (Undo 적용)

✅ Media Recovery (디스크 손상 시)

  • 데이터 파일 손실 시 백업 데이터를 복구하고, Redo 로그를 적용하여 최신 상태로 복구
  • ARCHIVELOG 모드를 사용하면 Redo 로그가 보관되므로, 장기적인 데이터 복구 가능

5. WAL의 장점

데이터 무결성 보장

  • WAL을 통해 데이터 파일보다 Redo 로그가 먼저 저장되므로 장애 발생 시 복구 가능

빠른 트랜잭션 커밋

  • COMMIT 시 데이터 파일이 아닌 Redo 로그에만 먼저 기록되므로 성능이 향상됨

비동기 데이터 저장

  • DBWR가 데이터를 Lazy Write 방식으로 기록할 수 있어 효율적인 디스크 I/O 처리 가능

장애 복구 가능

  • Redo 로그를 기반으로 커밋된 변경 사항을 복구할 수 있어 데이터 유실 방지

6. 정리

  • Write-Ahead Logging (WAL)트랜잭션이 데이터 파일을 변경하기 전에 Redo Log에 먼저 기록하는 기법.
  • Oracle에서는 Redo Log와 Undo Log를 사용하여 WAL을 구현.
  • Redo Log는 장애 발생 시 복구용, Undo Log는 트랜잭션 롤백과 MVCC(일관된 읽기) 지원.
  • WAL 덕분에 데이터 무결성을 유지하면서도 성능을 최적화할 수 있음.

🚀 Oracle WAL을 이해하면 데이터 복구 및 성능 최적화에 대한 깊은 인사이트를 가질 수 있음!

Leave a Comment