언두 정보는
리두에 의해서도 보호됨
Demo#1 (INSERT-UPDATE-DELETE 시나리오) | |
---|---|
{code:sql | borderStyle=solid} insert into t (x, y) values (1, 1); update t set x = x + 1 where x = 1; delete from t where x = 2; {code} |
순번 | 구분 | REDO | UNDO | 상태 | 비고 | |
---|---|---|---|---|---|---|
1 | {code:none | borderStyle=solid}INSERT{code} | 많이발생 | 조금발생 |
| |
2 | {code:none | borderStyle=solid}(가설)시스템 중단시{code} |
| 리두로그버퍼가 디스크에 플러시 되기 전이라고 가정 | ||
3 | {code:none | borderStyle=solid}(가설)버퍼캐시 풀방{code} |
| 복구(롤백)을 위해 리두 먼저 플러시 | ||
4 | {code:none | borderStyle=solid}리두로그버퍼의 플러시{code} | 디스크에 플러시 |
|
| |
5 | {code:none | borderStyle=solid}UPDATE{code} | 발생 | 발생 |
| INSERT 로 인해 생성된 리두 로그의 일부만 디크스에 플러시 되었다고 가정 |
6 | {code:none | borderStyle=solid}(가설)시스템 중단시{code} | 1. 재시작시, 전 단계에서 플러시된 리두 로그로 롤 포워드(INSERT) 2. 트랜잭션이 커밋되지 않은것을 발견하고 롤백(롤 포워드된 INSERT 의 언두 사용) | 리두 엔트리가 플러시 될때는 그것에 해당하는 언두의 리두도 항상 같이 플러시 될까? | ||
7 | {code:none | borderStyle=solid}(가설)AP가 트랜잭션 롤백{code} | - | 사용함 | 1. 메모리(디스크)의 언두 세그먼트 블록에서 언두 정보 확보 2. 언두 정보를 메모리(디스크)의 데이터/인덱스 블록에 반영 |
|
8 | {code:none | borderStyle=solid}DELETE{code} | 조금발생 | 많이발생 | ||
9 | {code:none | borderStyle=solid}COMMIT{code} | 디스크에 플러시 | 일관적인 읽기에 활용됨 |
|