[λ°μ΄ν„°λ² μ΄μŠ€] 회볡(Recovery)

πŸ§ͺ Computer Science/Database

μž₯μ• μ˜ μœ ν˜•

  • νŠΈλžœμž­μ…˜ μž₯μ• : νŠΈλžœμž­μ…˜μ˜ μ‹€ν–‰ μ‹œ 논리적인 였λ₯˜λ‘œ λ°œμƒν•  수 μžˆλŠ” μ—λŸ¬ 상황
  • μ‹œμŠ€ν…œ μž₯μ• : H/W μ‹œμŠ€ν…œ μžμ²΄μ—μ„œ λ°œμƒν•  수 μžˆλŠ” μ—λŸ¬ 상황
  • λ―Έλ””μ–΄ μž₯μ• : λ””μŠ€ν¬ 자체의 μ†μƒμœΌλ‘œ λ°œμƒν•  수 μžˆλŠ” μ—λŸ¬ 상황

회볡(Recovery)

  • λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μž₯μ• κ°€ λ°œμƒν–ˆλ˜ μ΄μ „μ˜ μƒνƒœλ‘œ λ³΅κ΅¬μ‹œμΌœμ„œ μΌκ΄€λœ λ°μ΄ν„°λ² μ΄μŠ€ μƒνƒœλ₯Ό λ§Œλ“œλŠ” 것
  • νšŒλ³΅μ„ μœ„ν•œ 데이터 볡사본을 λ§Œλ“œλŠ” λ°©λ²•μ—λŠ” 덀프(Dump)와 둜그(Log) 두 가지가 μžˆλ‹€.
  • 덀프(Dump): 일정 주기둜 μ›λ³Έμ˜ λ°μ΄ν„°λ² μ΄μŠ€μ˜ λͺ¨λ“  λ‚΄μš©μ„ λ‹€λ₯Έ μ €μž₯μž₯μΉ˜μ— λ³΅μ‚¬ν•˜λŠ” 것
  • 둜그(Log): λ³€κ²½ μ΄μ „μ˜ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό κΈ°μ€€μœΌλ‘œ λ³€κ²½ 연산이 λ°œμƒν•  λ•Œλ§ˆλ‹€ 둜그 νŒŒμΌμ„ μž‘μ„±ν•˜μ—¬ κΈ°λ‘ν•˜κ³ , νšŒλ³΅ν•  λ•Œ λ‘œκ·Έμ— 적힌 λ‚΄μš©μ„ μ‚¬μš©ν•˜μ—¬ λ³΅μ›ν•˜λŠ” 방법

둜그파일(Log File)

  • νŠΈλžœμž­μ…˜μ΄ λ°˜μ˜ν•œ λͺ¨λ“  λ°μ΄ν„°μ˜ 변경사항을 λ°μ΄ν„°λ² μ΄μŠ€μ— κΈ°λ‘ν•˜κΈ° 전에 미리 κΈ°λ‘ν•΄λ‘λŠ” λ³„λ„μ˜ λ°μ΄ν„°λ² μ΄μŠ€
  • μ•ˆμ „ν•œ ν•˜λ“œλ””μŠ€ν¬μ— μ €μž₯되며 전원과 관계없이 기둝이 μ‘΄μž¬ν•œλ‹€.

둜그 νŒŒμΌμ„ μ΄μš©ν•œ 회볡

  • λ°μ΄ν„°μ˜ 변경이 λ°œμƒν•  λ•Œλ§ˆλ‹€ μƒμ„±λ˜λŠ” 둜그 νŒŒμΌμ„ μ΄μš©ν•˜λŠ” 것
  • λ°μ΄ν„°μ˜ λ³€κ²½ 기둝을 μ €μž₯ν•΄ λ‘” 둜그 νŒŒμΌμ„ μ΄μš©ν•˜λ©΄ μ‹œμŠ€ν…œ μž₯애도 볡ꡬ할 수 μžˆλ‹€.
  • 둜그 νŒŒμΌμ—λŠ” νŠΈλžœμž­μ…˜μ˜ μ‹œμž‘(START)κ³Ό μ’…λ£Œ(COMMIT)이 μžˆμœΌλ―€λ‘œ ν•΄λ‹Ή 기점을 κΈ°μ€€μœΌλ‘œ λ³€κ²½ 사항을 λ‹€μ‹œ 기둝할 수 μžˆλ‹€.
  • REDO: νŠΈλžœμž­μ…˜μ— μ˜ν•΄ λ³€κ²½λœ λͺ¨λ“  데이터 ν•­λͺ©λ“€μ„ 둜그 νŒŒμΌμ— μžˆλŠ” λ³€κ²½ 이후 κ°’(new value)으둜 λŒ€μ²΄
  • UNDO: νŠΈλžœμž­μ…˜μ— μ˜ν•΄ λ³€κ²½λœ λͺ¨λ“  데이터 ν•­λͺ©λ“€μ„ 둜그 νŒŒμΌμ— μžˆλŠ” λ³€κ²½ 이전 κ°’(old value)으둜 λŒ€μ²΄

둜그 파일의 회볡 방법

  • μ¦‰μ‹œ κ°±μ‹ (Immediate Update): κ°±μ‹  λ°μ΄ν„°β†’λ‘œκ·Έ, λ²„νΌβ†’λ°μ΄ν„°λ² μ΄μŠ€ μž‘μ—…μ΄ λΆ€λΆ„μ™„λ£Œ 전에 λ™μ‹œμ— 진행될 수 있으며, λΆ€λΆ„ μ™„λ£Œκ°€ 되면 κ°±μ‹  λ°μ΄ν„°λŠ” λ‘œκ·Έμ— 기둝이 λλ‚œ μƒνƒœ
  • 지연 κ°±μ‹ (Deferred Update): κ°±μ‹  λ°μ΄ν„°β†’λ‘œκ·Έκ°€ λλ‚œ ν›„ λΆ€λΆ„ μ™„λ£Œλ₯Ό ν•˜κ³  λ²„νΌβ†’λ°μ΄ν„°λ² μ΄μŠ€ μž‘μ—…μ΄ μ§„ν–‰λ˜λŠ” 방법

체크포인트(CheckPoint, 검사점)

  • λ‘œκ·ΈλŠ” κ·ΈλŒ€λ‘œ 기둝을 μœ μ§€ν•˜λ©΄μ„œ 회볡 κ΄€λ¦¬μžκ°€ μ •ν•˜λŠ” μΌμ •ν•œ μ‹œκ°„ κ°„κ²©μœΌλ‘œ 검사 μ‹œμ μ„ μƒμ„±ν•˜λŠ” 것

  • 회볡 μ‹œ λ§Žμ€ μ–‘μ˜ 둜그λ₯Ό κ²€μƒ‰ν•˜κ³  κ°±μ‹ ν•˜λŠ” μ‹œκ°„μ„ 쀄이기 μœ„ν•¨

  • μ²΄ν¬ν¬μΈνŠΈκ°€ 있으면 둜그λ₯Ό μ΄μš©ν•œ 회볡 기법은 μ’€ 더 간단해진닀.

  • 체크포인트 이전에 COMMIT 기둝이 μžˆλŠ” 경우

    • λ‘œκ·Έμ— μ²΄ν¬ν¬μΈνŠΈκ°€ λ‚˜νƒ€λ‚˜λŠ” μ‹œμ μ€ 이미 λ³€κ²½ λ‚΄μš©μ΄ λ°μ΄ν„°λ² μ΄μŠ€μ— λͺ¨λ‘ 기둝된 후이기 λ•Œλ¬Έμ— 아무 μž‘μ—…μ΄ ν•„μš” μ—†λ‹€.
  • 체크 포인트 이후에 COMMIT 기둝이 μžˆλŠ” 경우

    • 체크 포인트 μ΄ν›„μ˜ λ³€κ²½ λ‚΄μš©μ΄ λ°μ΄ν„°λ² μ΄μŠ€μ— λ°˜μ˜λ˜μ§€ μ•Šμ•˜μœΌλ―€λ‘œ REDOλ₯Ό 진행
  • 체크 포인트 이후에 COMMIT 기둝이 μ—†λŠ” 경우

    • μ¦‰μ‹œ κ°±μ‹  방법을 μ‚¬μš©ν–ˆλ‹€λ©΄ λ²„νΌμ˜ λ‚΄μš”μ΄ λ°˜μ˜λμ„ μˆ˜λ„ 있기 λ•Œλ¬Έμ— UNDOλ₯Ό 진행
    • 지연 κ°±μ‹  방법을 μ‚¬μš©ν–ˆλ‹€λ©΄ COMMIT μ΄μ „μ˜ 버퍼 λ‚΄μš©μ„ λ°μ΄ν„°λ² μ΄μŠ€μ— λ°˜μ˜ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 아무 μž‘μ—…μ΄ ν•„μš” μ—†λ‹€.