243. ARIES 알고리즘 - DBMS 복구 표준 로그 기반 회복 Analysis Redo Undo 퍼지 검사점 데이터베이스 무결성
핵심 인사이트: (현대 데이터베이스 회복의 완벽한 마스터피스) "야! 234번 Redo랑 235번 Undo 쓰면 무조건 살아난다며? 근데 뻗었다 깨어나면 복구(Recovery)를 어떤 순서로 해야 해? 무식하게 처음부터 읽어? Undo부터 쳐, 아니면 Redo부터 쳐? 학자들이 10년을 싸우다 마침내 IBM 놈들이 완벽한 3단계 절대 공식(ARIES)을 발표하며 논쟁을 끝내버렸다!! '야!! 잔말 말고 부팅되면 무조건 이 3단계만 똑같이 밟아!! 1단계(Analysis 분석): 로그를 쭉 훑어보며 도대체 어디서부터 박살 났고 누가 살고 죽었는지 장부(목록)부터 만들어!! 2단계(Redo 재실행): 실패한 놈 성공한 놈 가리지 말고 일단 로그에 적힌 짓거리를 디스크에 무지성으로 다 덮어써서 불타기 0.1초 전 그 끔찍한 상태로 100% 똑같이 되돌려 놔!! 3단계(Undo 취소): 2단계에서 다 살려놨지? 이제 아까 1단계 장부에서 '죽은 놈(Uncommitted)'으로 분류된 찌끄러기들만 멱살 잡고 거꾸로 벅벅 지워버려(롤백)!!' 분석 ➜ 폭격 ➜ 청소. 현대 오라클과 MySQL의 생명을 지탱하는 우주 최강의 복구 프로토콜, ARIES다."
Ⅰ. 뒤죽박죽된 복구의 혼돈
- 시스템이 벼락 맞고 재부팅 되었습니다. 메모리(RAM)는 다 날아갔고, 쇳덩어리(디스크)에는
T1(성공한 놈)의 피와T2(실패한 놈)의 쓰레기가 짬뽕 되어 묻어있습니다. - 어떤 놈을 먼저 Redo(다시 덮어쓰기)하고, 어떤 놈을 먼저 Undo(취소)해야 할지 순서가 꼬이면 DB의 데이터는 돌이킬 수 없는 모순 상태로 붕괴합니다.
Ⅱ. ARIES (Algorithms for Recovery and Isolation Exploiting Semantics) 🌟
- 개념: 1992년 IBM에서 개발한 알고리즘으로, 로그 파일(WAL)과 퍼지 검사점(Fuzzy Checkpoint)을 기반으로 하여, 정전 등 시스템 장애 시 데이터베이스를 가장 효율적이고 100% 오차 없이 완벽하게 모순 없는 상태로 되돌리기 위해 전 세계 모든 상용 DBMS(오라클, DB2, MySQL)가 채택하고 있는 3단계(Phase) 표준 복구 절차입니다.
Ⅲ. ARIES의 절대 3단계 페이즈 (Phase) 🌟 무조건 암기 🌟
이 순서가 바뀌면 시스템이 망합니다. 반드시 분석 ➜ Redo ➜ Undo 순서로 흐릅니다.
1단계: 분석 페이즈 (Analysis Phase) - "블랙박스 감식"
- 목표: "어디서부터 복구해야 하고, 누가 뒤졌나?" 현장 파악.
- DB가 눈을 뜨자마자 로그의 가장 최근 241번 **검사점(Checkpoint)**으로 점프합니다.
- 거기로부터 벼락 맞아 뻗은 마지막 순간까지 로그를 쫙 읽어 내리면서 2개의 장부(List)를 작성합니다.
- Redo 리스트 (더러워진 페이지 목록): 쇳덩어리에 아직 안 적힌 수정된 엑셀 시트 명단.
- Undo 리스트 (진행 중이던 트랜잭션 목록): 죽는 순간까지
COMMIT을 못 친 억울한 찌끄러기 트랜잭션 명단.
2단계: Redo 페이즈 (Redo Phase) - "일단 불타기 직전으로 밀어붙여!" 🌟 핵심 🌟
이 단계의 무식함이 ARIES의 천재성입니다.
- 목표: "성공한 놈이든 뻗은 놈이든 따지지 마! 일단 로그에 적힌 모든 변경 사항을 무식하게 디스크에 다 덮어써서, 서버가 불타기 0.0001초 전의 그 엉망진창이었던 상태로 100% 똑같이 되살려 놔!"
- 아까 1단계에서 파악한 놈들을 시작점으로 삼고, 로그의 처음부터 끝까지 정방향(Forward)으로 미친 듯이 **Redo(다시 실행)**를 때려서 쇳덩어리(디스크)를 최신 상태로 바싹 밀어올립니다(Roll-forward).
3단계: Undo 페이즈 (Undo Phase) - "찌끄러기 암살"
- 목표: "2단계에서 최신 상태로 다 살려놨지? 이제 쓰레기 청소하자!"
- 2단계 Redo 덕분에 쇳덩어리가 벼락 치기 직전 상태로 돌아왔습니다. 근데 그 쇳덩어리 안에는
COMMIT못 치고 죽은 쓰레기 놈들(T2)의 덜 익은 데이터도 같이 부활해버렸습니다. - 조치: 아까 1단계에서 수배해 둔 **'Undo 리스트(실패한 놈들 명단)'**를 꺼냅니다. 이놈들이 남긴 로그를 거꾸로(Backward) 역추적하면서, 이 찌끄러기들이 덮어쓴 데이터만 골라서 정교하게 태초의 깨끗한 값으로 다 닦아내어 지워버립니다 (Roll-backward).
- 이 청소까지 끝나면, 성공한 놈만 남고 실패한 놈은 흔적도 없이 사라진 궁극의 무결성 데이터베이스가 강림합니다.
Ⅳ. 왜 ARIES가 완벽한가? (Repeating History)
- ARIES의 철학은 **"역사는 반복되어야 한다(Repeating History)"**입니다.
- 2단계 Redo 페이즈에서 성공한 놈만 골라서 복구하는 게 아니라, 실패해서 찌그러진 놈의 똥까지 일단 디스크에 100% 똑같이 부활시킨 뒤에 3단계에서 정교하게 닦아냅니다. 이 무식해 보이는 방식이 오히려 복구 알고리즘을 꼬이지 않게 만들고 시스템을 미치도록 안전하게 구원하는 신의 한 수가 되었습니다.
📢 섹션 요약 비유: ARIES 알고리즘은 살인 사건(시스템 장애) 현장을 수습하는 **'최첨단 3단계 홀로그램 프로파일링 과학수사'**입니다. 형사(DB 엔진)가 피투성이가 된 살인 현장(장애가 발생한 DB)에 도착했습니다. [1단계 분석(Analysis)]: 현장을 건드리지 않고 형사가 수첩(로그 파일)을 보며 "음, 창문이 깨졌고 용의자는 A와 B군" 이라며 피해 규모와 뻗은 놈들의 명단 리스트를 싹 작성합니다. [2단계 Redo (재실행)]: 형사는 이 수첩 기록을 바탕으로 현장에 최첨단 3D 홀로그램을 켭니다. 살인 사건이 일어나기 10시간 전부터 살인 사건이 빵! 터지던 그 피 튀기는 찰나의 순간까지의 모든 움직임을 **현장에 100% 똑같이 홀로그램으로 재생(Repeating History, Redo)**시켜서 끔찍했던 사고 0.1초 전의 상태를 완벽하게 눈앞에 부활시킵니다. [3단계 Undo (취소)]: 상황이 똑같이 재현되었으니 이제 쓰레기를 치웁니다. 1단계 명단에 적힌 범인(COMMIT을 못 치고 죽은 찌끄러기 트랜잭션)을 색출하여, 그놈이 어질러 놓은 핏자국(미확정 데이터)만 정밀 지우개로 싹싹 지워서(Undo) 없었던 일로 닦아냅니다. 살육의 현장을 일단 100% 똑같이 되돌려놓고(Redo) 문제아만 골라 핀셋으로 뽑아내어(Undo) 완벽한 평화 상태를 되찾는 인류 역사상 최고의 복구 시나리오입니다.