[정의] REDO중 역사 반복(Repeating history) 붕괴가 발생했을 때의 데이터베이스 상태를 복구하기 위해, 붕괴 발생이전에 수행했던 모든 연산을 다시 한번 수행하는 알고리즘

 

[특징]
- UNDO : 붕괴가 발생했을 때 완료되지 않은 상태였던 진행 트랜잭션은 UNDO 됨
- UNDO 중 로깅하여 도중 실패 시 반복 하지 않음: UNDO를 할 때에도 로깅을 함으로써
회복을 수행하는 도중에 실패하여 회복을 다시 시작할 때에 이미 완료된 UNDO 연산은 반복하지 않음

- WAL(Write-Ahead Logging)방식을 이용 : 데이터베이스 시스템에서 ACID의 특성 가운데 원자성과 내구성을 제공하는 기술의 한 계열이다. WAL을 사용하는 시스템에서 모든 수정은 적용 이전에 로그에 기록된다.

 

 


[회복 알고리즘의 3단계]
1단계) 분석단계 : 붕괴가 발생한 시점에 버퍼에 있는 수정된 페이지와 진행 트랜잭션을 파악,
REDO가 시작되어야 하는 로그의 위치를 결정
2단계) REDO단계 : 분석 단계에서 결정한 REDO 시작 위치의 로그로부터 로그가 끝날 때 까지 REDO를 수행,
REDO 된 로그 레코드의 리스틀 관리하여 불 필요한 REDO 연산이 수행되지 않도록 함
3단계) UNDO단계 : 로그를 역순으로 읽으면서 진행 트랜잭션의 연산을 역순으로 UNDO 함


[필요정보]
- 로그(LOG) : 페이지에 대한 갱신(write), 트랜잭션 완료(commit), 트랜잭션 철회(abort), 갱신에 대한 UNDO, 트랜잭션 종료(end) 시 기록, 각 로그 레코드마다 로그 순차번호LSN 할당. (LSN: 디스크에 저장된 로그 레코드의 주소로서 단조 증가 –Log Sequence Number)
- 트랜잭션 테이블 : 진행 트랜잭션에 대한 정보(트랜잭션 식별자, 트랜잭션 상태, 해당 트랜잭션의 가장 최근 로그레코드의 LSN 관리)
- 오손 페이지 테이블(dirty page table) : 버퍼에 있는 오손 페이지에 대한 정보(페이지 식별자, 해당 페이지에 대한 가장 최근 로그 레코드 LSN 관리)

 

 

 

 

[ARIES에서의 검사점 기록]

1.로그에 begin_checkpoint 레코드를 기록하기

2.로그에 end_checkpoint 레코드를 기록하기

   트랜잭션 테이블과 오손 페이지 테이블의 내용도 함께 저장한다.

3.특수 화일에 begin_checkpoint 레코드의 LSN을 기록하기

 

 

[ARIES에서 회복의 예]

(a) 붕괴시의 로그

 

(b) 검사점을 기록할 때의 트랜잭션 테이블과 오손 페이지 테이블

 

(c) 분석단계가 끝난 후의 트랜잭션 테이블과 오손 페이지 테이블

 

 

 

'ITPE > DB' 카테고리의 다른 글

함수적 종속성  (0) 2021.03.06
데이터 모델링  (0) 2021.03.06
MVCC (MultiVersion concurrency control)  (0) 2021.03.06
Timestamp Ordering  (0) 2021.03.06
낙관적 검증(Validation)  (0) 2021.03.06

 

 

 

 

 

 

[정의] 트랜잭션이 한 데이터 아이템을 접근하려 할 때, 그 트랜잭션의 타임스탬프와 접근하려는 데이터 아이템의 여러 버전의 타임스탬프를 비교하여, 현재 실행하고 있는 스케줄의 직렬가능성이 보장되는 적절한 버전을 선택하여 접근하도록 하는 기법

 

[특징]  판독 요청을 거절하지도, 대기하지도 않음.  트랜잭션간의 충돌문제는 대기가 아니라 복귀처리 함으로 연쇄 복귀초래 발생 가능성

 

 

 

 

 

 

[동작설명]
1) 데이터를 변경할 때마다 그 변경사항을 Undo 영역에 저장해 둔다
2) 트랜잭션 시작 시점 이후에 변경된(진행 중이거나 이미 커밋된) 값을 발견하면,
    Undo 영역에 저장된 정보를 이용, CR Copy 를 생성하여 그것을 읽는다. (SCN 이용)
3) 쿼리 도중에 배타적 Lock 이 걸린, 즉 변경이 진행 중인 레코드를 만나도 진행가능
※ SCN(System Change Number) : commit 발생시, 트랜잭션에 연속증가, 고유번호

※ CR Block : 읽기 일관성(Consistent Read) Block 아래 그림에서는 Data Block을 의미


 

 

 

 

 

 

 

 

 

'ITPE > DB' 카테고리의 다른 글

데이터 모델링  (0) 2021.03.06
ARIES (Algorithms for Recovery and Isolation Exploiting Semantics)  (0) 2021.03.06
Timestamp Ordering  (0) 2021.03.06
낙관적 검증(Validation)  (0) 2021.03.06
무결성  (0) 2018.03.03

 

 

 

 

 

 

[정의] 시스템에서 생성하는 고유 번호인 시간 스탬프를 트랜잭션에 부여하는 것으로 트랜잭션간의 순서를 미리 선택하는 방법

 

[종류] 시스템 시계, 논리적 계수기


[구성]
1) read_TS(X): 항목 X 의 읽기 타임스탬프(read timestamp)로서 항목 X 를 성공적으로 읽은 트랜잭션들의 타임스탬프 중 가장 큰 값. 즉, read_TS(X) = TS(T)이고 여기서 T 는 X 를 성공적으로 읽은 가장 최근의(youngest) 트랜잭션.
2) write_TS(X): 항목 X 의 쓰기 타임스탬프(write timestamp)로서 항목 X 를 성공적으로 기록한 트랜잭션들의 타임스탬프 중 가장 큰 값. 즉, write_TS(X) = TS(T)이고 여기서 T 는 X 를 성공적으로 기록한 가장 최근의 트랜잭션.

 

 

 

 

 

 

 


[기본적 타임스탬프 순서(Basic Timestamp Ordering)]
- 트랜잭션 T 가 write_item(X) 연산을 수행하려고 할경우:
1) read_TS(X) > TS(T) 또는 write_TS(X) > TS(T)이면 T 를 철회하고 복귀시키고 그 연산을 거부(reject)한다. => 해당 트랜잭션 순서가 이미 지남
2) a 의 조건이 발생하지 않으면 T 는 write_item(X) 연산을 수행하고 write_TS(X)를 TS(T)로 설정한다.
- 트랜잭션 T 가 read_item(X) 연산을 수행하려고 할 경우:
1) write_TS(X) > TS(T)이면 T 를 철회하고 복귀시키고 그 연산을 거부한다. => 해당 트랜잭션 순서가 이미 지나서 다른 값이 있을수도 있음.
2) write_TS(X) ≤ TS(T)이면 T 의 read_item(X) 연산을 수행하고 read_TS(X)를 TS(T)와 현재의 read_TS(X) 중 큰 값으로 설정한다. => read_TS(X)는 가장 큰값.
※ Cascade rollback이 발생할 수 있음. ==> Strict timestamp(해당 순번TS(T)까지 Read_TS, Write_TS가 올때까지 대기하는 방식)

 

 

 

 

 

 

 

 

'ITPE > DB' 카테고리의 다른 글

데이터 모델링  (0) 2021.03.06
ARIES (Algorithms for Recovery and Isolation Exploiting Semantics)  (0) 2021.03.06
MVCC (MultiVersion concurrency control)  (0) 2021.03.06
낙관적 검증(Validation)  (0) 2021.03.06
무결성  (0) 2018.03.03

+ Recent posts