솜은 코튼

[DB] 로그 이용 회복 (즉시 갱신 회복) 본문

DB

[DB] 로그 이용 회복 (즉시 갱신 회복)

솜.코 2023. 6. 2. 16:29

2023.06.02 - [DB] - [DB] 로그 이용 회복

 

[DB] 로그 이용 회복

2023.06.02 - [DB] - [DB] 트랜잭션 [DB] 트랜잭션 트랜잭션 . 트랜잭션은 하나의 논리적 기능을 수행하기 위한 작업의 단위로서 데이터베이스의 일관된 상태를 또 다른 일관된 상태로 변환시킨다. 트랜

sommda.tistory.com

 

 

즉시 갱신의 회복

.

 

즉시 갱신 회복 기법은 트랜잭션이 연산을 실행하고 있는 활동 상태에서

데이터의 변경 결과를 데이터베이스에 그대로 반영한다.

 

활동성 완료가 안 된 트랜잭션에 의해 데이터베이스에 반영된 갱신을 '미완료 갱신'이라 한다.

 

 

시스템 붕괴나 트랜잭션 장애가 일어나면

트랜잭션이 실행되기 전 상태의 데이터 값으로 복원시키는데

이때는 로그 레코드의 옛 값이 사용된다.

 

즉, 로그 레코드는 <트랜잭션 id, 데이터 아이템, 변경 전 값, 변경된 값> 형식을 취한다.

 

 

이 즉시 갱신에 대한 회복 방법은 Undo 프로시저를 사용한다.

 

 

 

 

이 Undo 연산도 같은 Undo를 여러번 실행한 것이나 한 번 실행한 것이나 결과는 동일해야 한다.

 

 

로그가 데이터베이스 회복에 사용될 수 있기 위해서는

로그 레코드가 기록되기 전에 데이터베이스가 갱신되어서는 안 된다.

 

따라서 Output(Bx)를 실행하려면 X에 대응하는 로그 레코드를 먼저 안정 저장소에 기록시켜야 한다.

 

 

예로, 트랜잭션 T1과 T2가 <T1, T2> 순으로 실행되었다고 하면 로그는 아래와 같다.

 

 

이 순서는 앞에 설명한 지연 갱신의 회복 기법에는 가능하지 않다.

 

 

만약 장애가 일어나면 회복 관리자는 로그를 검사해 보고 Redo나 Undo를 실행할 트랜잭션을 결정한다.

 

1. 만일 로그에 <Ti, Start> 레코드만 있고 <Ti, Commit> 레코드가 없으면 Undo(Ti)를 수행한다.

2. 만일 로그에 <Ti, Start> 레코드와 <Ti, Commit> 레코드가 모두 다 있으면 Redo(Ti)를 수행한다.

 

 

 

 

CASE1. Commit하기 직전에 시스템이 붕괴

 

<T1, Commit> 레코드가 로그에 없게 되며, Undo(T1)을 실행해야 한다.

이 연산을 수행한 뒤에 A, B의 값은 원래의 1000, 2000으로 돌아간다.

 

 

CASE2. T2가 Commit하기 직전에 시스템이 붕괴

 

시스템이 다시 작동되면 T1에 대해서는 Redo(T1)을 실행해야 되고

T2에 대해서는 Undo(T2)를 실행시켜야 된다.

이때 Undo(T2)를 먼저 실행한 다음 Redo(T1)을 실행시켜야 한다.

 

일반적으로 모든 Undo 연산을 마친 뒤에 Redo 연산을 하는 것이 효율적이다.

Undo 연산은 로그에 기록된 순서의 역순으로 수행하고

Redo 연산은 로그에 기록된 순서로 수행하여야 하기 때문이다.

 

이 회복 결과 A, B, C는 900, 2100, 3000이 되며

C만 값이 변하지 않는다.

 

 

CASE3. T2가 <T2, Commit> 로그 레코드를 출력한 직후에 시스템이 붕괴

 

시스템이 재가동되면 T1과 T2에 대해서 모두 Redo 연산을 수행해야 되고

이 결과 A, B, C는 900, 2100, 2800이 된다.

 

 

 

 

 

 

 

 

* 해당 글은 '데이터베이스 시스템' 책을 참고하여 작성하였습니다. 출처: 데이터베이스 시스템 (이석호)

'DB' 카테고리의 다른 글

[DB] 그림자 페이징 기법  (0) 2023.06.02
[DB] 검사시점 회복  (0) 2023.06.02
[DB] 로그 이용 회복 (데이터베이스 로그, 지연 갱신의 회복)  (0) 2023.06.02
[DB] 트랜잭션  (0) 2023.06.02
[DB] 장애와 회복  (0) 2023.06.02