데이터베이스의 회복이란 트랜잭션들을 수행하는 도중 장애로 인해 손상된 데이터베이스를 손상되기 이전의 정상적인 상태로 복구시키는 작업을 말합니다.
장애의 원인으로는 디스크 붕괴, 전원 고장으로 인한 하드웨어 결함, 소프트웨어의 논리 오류로 인한 소프트웨어 경함, 사람의 실수 등 여러가지가 있습니다. 이와 같은 원인으로 발생되는 장애는 다음과 같이 크게 3가지 유형으로 구분할 수 있으며 이러한 장애에 대한 회복을 위해 DBMS는 회복 관리(recovery manager)자를 두고 대비하고 있습니다.
1. 트랜잭션 장애
트랜잭션 내의 논리적 오류나 내부 조건 즉, 입력 데이터의 불량, 데이터의 불명, 시스템 자원의 과다 사용 요구 등으로 정상적인 실행을 계속할 수 없는 상태
2. 시스템 장애
하드웨어의 오동작으로 메인 메모리에 있는 정보의 손실이나 교착 상태가 발생하여 더 이상 실행을 계속할 수 없는 상태
3. 미디어 장애
디스크 헤드 붕괴나 고장으로 인해 저장장치의 데이터베이스 일부 또는 전부가 손상된 상태
데이터베시스 회복의 기본 원리는 데이터 중복에 있습니다. 즉, 데이터베이스에 포함된 정보를 시스템의 어디엔가 별도로 중복해서 저장해 두었다가 장애시 이를 다시 복원하는 것입니다. 이 중복 기법에는 덤프(dump)와 로그(log)가 있습니다. 덤프는 주기적으로 데이터베이스 전체를 다른 저장장치에 복제하는 것을 말하고, 로그는 데이터베이스가 변경될 때마다 변경되는 데이터의 변경 전/후의 값을 파일에 기록해 두는 것을 말합니다.
Redo, Undo
장애가 발생했을 때 회복을 위해 취할 수 있는 조치는 일반적으로 다음과 같은 두 가지 유형이 있습니다.
1. Redo : 재실행
데이터 베이스 내용 자체가 손상이 된 경우 가장 최근의 복제본을 적재시킨 뒤 이 복제본 이후에 일어난 변경만을 로그를 이용하여 재실행함으로써 데이터 베이스를 복원하는 것
2. Undo : 취소
데이터베이스 내용 자체는 손상되지 않았지만 변경 중이거나 변경된 내용에 대한 신뢰성을 잃어버린 경우 로그를 이용하여 모든 변경들을 취소시킴으로써 원래의 데이터베이스 상태로 복원하는 것
장애가 발생했을 때 실제로 시스팀이 취하는 기법은 구현에 따라 다양하며 Redod와 Undo는 회복 조치의 개략적인 방향에 불과합니다. 앞으로 가장 보편적으로 이용되는 로그 이용 회복 기법들을 소개하겠습니다.
로그를 이용한 회복
1. 지연갱신 회복기법 : Redo 수행
트랜잭션이 성공적으로 종료될 때까지 데이터베이스의 갱신을 지연하는 기법으로, 트랜잭션이 실행되는 동안 변경된 내용을 로그에 전부 기록하여 두었다가 한꺼번에 실행시킴으로써 트랜잭션의 원자성을 보장하려는 것입니다. 만약 트랜잭션이 실행도중 장애가 발생되면 그냥 로그에 있는 정보를 버리면 됩니다. 따라서 이 기법은 Redo연산만 수행하면 됩니다.
2. 즉시갱신 회복기법 : Redo, Undo 수행
트랜잭션의 실행 결과를 로그에 기록함과 동시에 데이터베이스에 즉시 기록하는 기법으로, 트랜잭션의 원자성을 보장하지 않기 때문에 장애가 발생하였을 때 Redo,Undo 모두 수행해 주어야 합니다.
검사시점 회복
로그를 이용한 회복기법의 경우 원칙적으로 로그 전체를 조사해야 되는데, 이 경우 시간이 너무 많이 걸립니다. 또한 Redo를 할 필요가 없는 트랜잭션을 또 다시 Redo해야하는 문제가 생깁니다. 이러한 문제점을 해결하기 위한 기법이 검사시점(checkpoint) 방법입니다.
검사점 이전의 트랜잭션이 장애가 발생한 경우 해당 트랜잭션은 Redo하고(다시 실행) 검사점 이후의 트랜잭션이 장애가 발생한 경우 해당 트랜잭션을 Undo(취소)하는 방법입니다.
미디어 회복
미디어(디스크)회복의 기본 원리는 데이터베이스 내용 전체를 주기적으로 다른 장치에 dump시키는 방법입니다. 장애가 발생하게 되면 가장 최근 dump를 복구하고 로그파일을 참조해 dump 이후의 작업을 Redo하는 방법이며 Undo 연산은 사용하지 않습니다.