-
[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는 변경 사항에 대한 기록이며, 다음과 같은 세 가지 목적을 가집니다.
- Database Recovery
물리적으로 디스크에 결함이 생기는(Media Fail이 발생하는) 경우 Archived Redo Log에 Redo Log를 이용해 디스크를 복원합니다. - Cache Recovery
인스턴스의 비정상적인 종료(메모리에 저장되기 때문에 캐시가 증발)를 대비하기 위해 Redo Log Buffer의 기록된 변경 사항을 디스크의 Redo Log Files에 저장합니다. 비정상적인 종료 후 디스크의 Redo Log Files의 Redo Log를 이용해 변경 사항을 복구(Data Files에는 미반영된 상태) 시킵니다. - 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의 목적은 다음과 같은 세 가지 목적을 가집니다.
- 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를 이용해 데이터를 트랜잭션 전의 상태로 되돌립니다. - 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를 통해 롤백합니다. - 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 - Database Recovery