IT/👨‍💻Computer Science

데이터베이스 시스템 로그 기반 회복(공부용...)

지식모아이령 2021. 5. 23. 21:01

트랜잭션 참고 이미지


데이터베이스 시스템 로그 기반 회복이란?

데이터베이스 시스템 로그 기반 회복은 데이터베이스 회복 방법 중 하나로, 데이터베이스 시스템에서 발생한 모든 변경 사항을 로그 파일에 저장하여 장애 발생 시점 이전까지의 모든 변경 사항을 추적하고, 이전 상태로 데이터베이스를 복구하는 작업을 말합니다.

*로그(Log)는 데이터베이스의 변경 사항을 기록, 보관하기 위해 가장 널리 사용되는 방법이다. 이중 로그 선행 기입(write-ahead logging, WAL)은 데이터 기록 이전에 이전에 로그를 우선 기록하는 기법이며, 이 글에서 다루는 기법이다.

로그 기반 회복의 개념과 작동 방식

개요

데이터베이스 시스템에서는 중요한 정보들을 로그 파일이라는 곳에 저장해둡니다. 이 로그 파일에는 데이터베이스에서 일어나는 모든 일들이 기록됩니다. 데이터베이스에서 일어난 일들은 모두 작업의 단위인 "트랜잭션"으로 구분됩니다.

만약에 데이터베이스에 문제가 생기면, 로그 파일을 이용하여 그 문제 이전까지의 상태로 복구할 수 있습니다. 로그 파일에서 문제가 생기기 전에 마지막으로 처리된 트랜잭션을 찾아서, 그 이후에 처리된 모든 트랜잭션을 차례로 다시 실행합니다.

로그 파일의 크기가 커지면, 복구 시간이 오래 걸리기 때문에 데이터베이스 시스템에서는 일정 주기마다 "체크포인트"라는 것을 수행합니다. 체크포인트는 로그 파일에서 일정 시간 이전에 완료된 트랜잭션들을 정리하는 것으로, 복구 시간을 단축시킵니다.

이렇게 데이터베이스 시스템에서는 로그 파일을 이용하여 데이터의 손상을 예방하고, 문제가 생긴 경우에도 빠르게 복구할 수 있습니다.

Redo와 Undo

Redo(t)와 Undo(t)는 데이터베이스 시스템에서 로그 기반 회복을 수행할 때 사용됩니다. 데이터베이스 시스템은 장애 발생 시점 이전까지 실행된 모든 트랜잭션을 Redo와 Undo를 통해 다시 실행하거나 취소함으로써, 데이터베이스를 이전 상태로 복구합니다.

 

Redo(t)

:트랜잭션 t에 의해 작성된 로그 레코드를 재실행하여 문제가 일어나지 않은 원래의 값으로 복구한다. 

 

Undo(t)

:트랜잭션 t에 의해 수정된 모든 데이터 항목을 로그 레코드를 참조하여 이전 값으로 되돌리고 <t abort> 로그 레코드를 기록한다.

✋잠깐!

Q)Redo로 복구 시키고 Undo로 복구 시키는 이유가 뭘까?
예시 레코드를 보면
1. <T2 start>
2. <T2, A, 300, 500>
3. 이 시점에 시스템 장애 발생 하면 Redo가 끝나고 Undo 단계에서
4. <T2 A, 300>이런식으로 바로 로그가 찍히는데 Redo로 굳이 A를 다시 500으로 바꾸는 이유가 뭐지?

A)데이터의 원자성 때문이라고 함!

음... 그러니까 redo 단계에서 일어나는 모든 일과 (커밋과 어볼트를 실행, lsitOfUndo 올리는 작업) undo 단계에서 하는 일을 정확하게 표싷라 필요가 있네. 

체크포인트를 이용한 회복

로그의 크기가 시간이 지남에 따라 계속해서 증가하는 문제와, Redo 단계에서 일정한 시간 이전거는 commit 됐을 확률이 높은데 체크포인트가 없으면 모든 이전의 로그를 조사해야 하는 문제가 있다.

 

즉,

Undo(t) 과정 자체가 로그 레코드를 참조하여 이전 값으로 되돌리고 <T abort>로그 레코드를기록하는 거이므로.
평상시에는 일어날 일이 없는 과정이니까 체크포인트의 의의랑 전혀 상관 없는 부분이고

반면 Redo(t)는 Undo랑 달리 원래 일어나는 사항 들이니까 체크포인트를 해줌으로써 이전의 많은 트랜잭션들에 대해서
다시 조사할 필요가 없도록 하는 거다.

 

 

참고 문헌

 

데이터베이스 회복 - IT위키

 

itwiki.kr

 

트랜잭션 로그 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전.

ko.wikipedia.org

 

로그 선행 기입 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 로그 선행 기입(write-ahead logging, WAL)은 데이터베이스 시스템에서 ACID의 특성 가운데 원자성과 내구성을 제공하는 기술의 한 계열이다. WAL을 사용하는 시스템에

ko.wikipedia.org

 

정재화 저 한국방송통신대학교출판문화원 데이터베이스 시스템