데이터베이스에서 작업을 할 때 작업의 단위를 트랜잭션이라고 부릅니다. 트랜잭션을 실행했을 때 성공적으로 완료가 되면 Commit 을 하고 데이터베이스에 반영이 되게 됩니다. 만약 실패를 하게 되면 Rollback 을 하여 복구를 하게 되는데요. 데이터베이스의 회복기법에는 크게 2가지가 있습니다.
취소 (Undo) : 로그 (Log)에 보관한 정보를 이용하여 가장 최근에 변경된 내용부터 거슬러 올라가면서 트랜잭션 작업을 취소하여 원래의 데이터베이스로 복구함.
재시도 (Redo) : 덤프와 로그를 이용하여 가장 최근의 정상적인 데이터베이스로 회복시킨 후 트랜잭션을 재실행 시킴.
연기 갱신 기법 Defferd Update
연기 갱신 기법은 트랜잭션 작업을 할 때마다 로그를 남기다가, Commit 메시지가 들어왔을 때 데이터베이스에 반영을 하는 방식입니다.
연기 갱신 기법은 로그에만 기록이 남지, 데이터베이스에는 반영이 되지 않습니다. T1 과 T3 는 연산이 끝났기 때문에 REDO를 수행하면 된다. T2 와 T4 는 트랜잭션이 끝나지 않았기 때문에 따로 처리를 해줄 필요가 없이 그냥 무시해도 문제가 없습니다.
교과서적인 정리는 다음과 같습니다. 연기 갱신 기법 Defferred Update 는 트랜잭션이 성공적으로 완료될 때까지 데이터베이스에 대한 실질적인 갱신을 연기하는 방법입니다. 트랜잭션이 수행되는 동안 갱신된 내용은 일단 Log 에 보관됩니다. 트랜잭션의 부분 완료(성공적인 완료 직전) 시점에 Log 에 보관한 갱신 내용을 실제 데이터베이스에 기록하게 됩니다. 트랜잭션이 부분 완료되기 전에 장애가 발생하여 트랜잭션이 Rollback 되면 트랜잭션이 실제 데이터베이스에 아무런 영향을 미치지 않은 상태이기 때문에 어떠한 갱신 내용도 취소(Undo) 시킬 필요 없이 무시하면 되는 특징이 있습니다. 이런 특징의 영향으로 Redo 작업만 수행하게 됩니다.
즉각 갱신 기법 Immediate Update
즉각 갱신 기법은 트랜잭션 작업을 할 때 마다 로그를 남김과 동시에 데이터베이스에 반영하는 방식입니다. 그런데, 작업 중에 문제가 발생하면 회복을 시켜야 하는데요.
T1 하고 T3 는 모든 작업이 완료된 다음에 오류가 발생했기 때문에 REDO 작업을 실행시켜서 정상적으로 처리가 되는지 알아볼 수 있습니다. T2 는 트랜잭션이 완료가 되지 않았는데, 작업 중간 중간 마다 DB에 반영을 이미 시킨 상황이기 때문에, T2 트랜잭션이 작업하기 전의 상황으로 되돌리기 위해 UNDO를 해주어야 합니다.
교과서적으로 정리하면, '즉각 갱신 기법'은 트랜잭션이 데이터를 변경하면 트랜잭션이 부분 완료되기 전이라도 즉시 실제 DB에 그 내용을 반영하는 기법으로, 장애가 발생하여 회복 작업할 경우를 대비하여 갱신된 내용들을 로그(Log)에 보관시킨다. '즉각 갱신 기법'에서 회복 작업을 수행할 경우 Redo 와 Undo 모두 수행이 가능하다.
그림자 페이지 대체 기법 Shadow Paging
갱신 이전의 데이터베이스를 일정 크기의 페이지 단위로 구성하여 각 페이지마다 복사본인 그림자 페이지로 별도 보관해 놓고, 실제 페이지를 대상으로 트랜잭션에 의한 갱신 작업을 하다가 장애가 발생하여 트랜잭션 작업을 Rollback 시킬 때, 갱신된 이후의 실제 페이지 부분에 그림자 페이지를 대체하여 회복시키는 기법입니다. 로그, Undo 및 Redo 알고리즘이 필요가 없는 특징이 있습니다.
검사점 기법 Check Point
트랜잭션 실행 중 특정 단계에서 재실행할 수 있도록 갱신 내용이나 시스템에 대한 상황 등에 관한 정보와 함께 검사점을 로그에 보관해 두고, 장애 발생 시 트랜잭션 전체를 철회하지 않고 검사점부터 회복 작업을 하여 회복시간을 절약하도록 하는 기법입니다.