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)
- 트랜잭션이 변경을 수행
- 사용자가
INSERT
,UPDATE
,DELETE
등의 DML 문을 실행
- 사용자가
- Redo Log Buffer에 변경 사항 저장
- 변경된 데이터의 Redo 정보(변경 사항) 를 Redo Log Buffer에 저장 (WAL 원칙 적용)
- Undo Log Buffer에 이전 데이터 저장
- Rollback을 위한 Undo 정보를 Undo Log Buffer에 저장
- Redo Log가 Redo Log 파일로 기록
LGWR (Log Writer)
프로세스가 Redo Log Buffer의 데이터를 Redo Log 파일로 플러시(디스크 기록)- 이 과정이 끝나야 트랜잭션이
COMMIT
될 수 있음
- DB Buffer Cache에 데이터 적용
- 변경된 데이터가 DB Buffer Cache(메모리)에 존재
DBWR (Database Writer)
프로세스가 일정 시간 후 변경 사항을 실제 데이터 파일에 기록 (Lazy Write)
- 커밋 완료
- Redo Log 파일에 기록이 완료되면, 트랜잭션이 커밋됨 (
COMMIT
성공) - 장애 발생 시, Redo Log를 기반으로 데이터 복구 가능
- 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을 이해하면 데이터 복구 및 성능 최적화에 대한 깊은 인사이트를 가질 수 있음!