데이터베이스를 모순 없는 일관된 상태로 유지하기 위해 데이터베이스 관리 시스템은 회복 기능을 제공한다. 회복은 장애가 발생했을 시, 데이터베이스를 장애가 발생하기 전의 일관된 상태로 복구시키는 것을 말한다.
시스템이 제대로 동작하지 않는 상태를 장애라고 한다. 데이터베이스 시스템에서 발생할 수 있는 장애는 트랜잭션 장애, 시스템 장애, 미디어 장애 세 가지로 나눌 수 있다.
데이터베이스는 디스크에 저장되어 있어 트랜잭션이 데이터베이스의 데이터를 처리하려면 디스크에서 메인 메모리로 가져와 처리 후, 다시 디스크로 보내는 작업이 필요하다.
디스크와 메인 메모리 간의 데이터 이동은 블록 단위로 수행된다. 디스크에 있는 블록을 디스크 블록이라 하고, 메인 메모리에 있는 블록은 버퍼 블록이라고 한다.
사용자의 요구에 따라 응용 프로그램에서 트랜잭션의 수행시 버퍼 블록에 있는 데이터를 프로그램의 변수로 가져오고 데이터 처리 결과를 버퍼 블록으로 옮기는 작업도 필요하다.
회복은 데이터베이스에 장애가 발생했을 때 장애가 발생하기 전의 모순이 없는 일관된 상태로 복구시키는 것이다. DBMS의 회복 관리자는 장애 발생을 탐지하고 장애가 탐지될 경우 데이터베이스 복구 기능을 제공한다. 데이터베이스 복구할 동안에는 업무 처리를 할 수 없기 때문에 빠른 회복 작업이 요구된다.
데이터를 별도의 장소에 미리 복사해두고 장애로 문제가 발생했을 때 복사본을 이용해 원래의 상태로 복원하는 것이 회복이다. 덤프, 로그 방법을 사용해 데이터를 복사해두었다가 회복시킬 때 복사본으로 사용한다.
장애가 발생했을 때, 덤프나 로그를 이용해 데이터베이스를 복구하는 가장 기본적인 방법은 redo나 undo 연산을 실행하는 것이다.
모든 변경 연산을 재실행
하여 장애가 발생하기 직전의 디비 상태로 복구모든 변경 연산을 취소
하여 디비를 원래의 상태로 복구즉시 갱신 회복 기법은 트랜잭션 수행 중에 데이터를 변경한 연산의 결과를 데이터베이스에 즉시 반영
한다.
장애 발생 대비를 위해 데이터 변경에 대한 내용을 로그 파일에도 기록한다. 데이터베이스 회복시 로그를 정상적으로 사용하려면 트랜잭션에서 데이터 변경 연산이 실행되었을 때 로그에 먼저 기록 후 데이터베이스에 변경 연산을 반영해야 한다.
지연 갱신 회복 기법은 트랜잭션이 수행되는 동안에는 데이터 변경 연산의 결과를 데이터베이스에 즉시 반영하지 않고
로그 파일에만 기록해 두었다가, 트랜잭션이 부분 완료된 후에 로그에 기록된 내용을 데이터베이스에 한꺼번에 반영한다.
트랜잭션이 수행되는 동안 장애가 발생할 경우 로그에 기록된 내용만 삭제하면 된다. 따라서 undo 연산은 없고 redo 연산만 필요하므로 로그 레코드에 변경 이전 값을 기록할 필요가 없다.
검사 시점 회복 기법은 로그 기록을 이용하지만 일정 시간 간격으로 검사 시점(checkpoint)를 만들어둔다. 장애가 발생하면 가장 최근 검사 시점 이전의 트랜잭션에는 회복 작업을 수행하지 않고 이후의 트랜잭션에만 회복 작업을 수행한다.
회복 작업의 범위가 checkpoint로 정해지므로 불필요한 회복 작업을 수행하지 않아 데이터베이스 회복 시간이 단축된다는 장점이 있다.
디스크에 발생할 수 있는 장애에 대비한 회복 기법이다. 미디어 회복 기법은 전체 데이터베이스를 다른 저장 장치에 복사하기 때문에 비용이 많이 들고 복사하는 동안, 트랜잭션을 수행 중단해야하므로 CPU가 낭비된다는 단점이 있다.