# Table of Contents

# Recovery

Recovery는 장애 이전의 상태로 복원하는 작업을 의미한다. Recovery 방법에는 크게 두 가지가 존재한다.

  • Undo
  • Redo

# Undo

UndoRollback과 동일하다. Undo는 트랜잭션 수행 중에 논리적인 장애가 발생했을 때 이전 상태로 되돌리는 것을 의미한다.

예를 살펴보자. 트랜잭션에서 UPDATE 실행 후 다음 연산을 수행하다 오류가 발생했다.

UPDATE member SET age = age + 1 WHERE id = 1;

다음 연산;  // 이 지점에서 오류 발생

COMMIT;

그러면 이전 상태로 되돌리기 위해 다음과 같은 Undo작업이 수행된다.

UPDATE member SET age = age - 1 WHERE id = 1;

데이터베이스는 연산이 실행될 때마다 이전 상태를 Undo segment라는 메모리 영역에 저장한다. Commit을 하기 전 논리적 장애가 발생했을 때 Unde segment를 사용하여 이전 상태로 되돌린다.

# Redo

Redo는 트랜잭션 수행 중에 외부적인 물리적 장애가 발생했을 때 트랜잭션을다시 실행하는 것을 의미한다.

예를 살펴보자. 트랜잭션에서 UPDATE 실행 후 다음 연산을 수행하다 정전으로 시스템이 다운됐다.

UPDATE member SET age = age + 1 WHERE id = 1;

다음 연산;  // 이 지점에서 오류 발생

COMMIT;

그러면 시스템을 복구했을 때 Redo 작업이 다시 실행된다.

UPDATE member SET age = age + 1 WHERE id = 1;

데이터베이스 시스템은 Redo log라는 파일에 변경 히스토리를 기록한다. 그리고 시스템이 복구되었을 때 이 파일을 사용하여 작업들을 재실행한다.