2010. 7. 13. 20:23
Transaction001 DataBase이야기2010. 7. 13. 20:23
모든 DB블록은 DBA를 가지고 있다. 파일 번호, 블록번호.
데이터베이스의 변경사항을 저장하는 방법에는 3가지가 있다.
1. logical logging
2. physical logging
3. physiological logging.
1. insert, delete, update , select for update : operational logging == logical logging 이라고도 불림.
2. 변경된 모든 블록의 이전, 이후 이미지를 저장하는 방법이다.
logical logging은 오퍼레이션만을 저장하므로 리두의 양이 적지만, 복구 시 복잡한 절차를 따르므로 수행시간이 길다는 단점이 있다. physical logging은 실행시간은 적으나 리두의 양이 많다는 단점이 있다.
오라클에선 이둘의 장점을 취한 3번째 방식, physiological logging 방식을 이용한다. 이는 오퍼레이션 코드와 블록의 변경 사항을 저장하는 방법이다.
statement | Undo | Redo |
insert into t1 values(1,'abc',100) |
Delete row 1 | Row 1 c1 := 1 c2 := 'abc' c3 := 100 |
update t1 set c2 = 'def' where c1 = 1; |
Row 1 c2 :='abc' |
Row 1 c2 := 'def' |
트랜잭션이 커밋될 때, 리두 레코드에는 커밋에 대한 체인지 벡터가 생성되며, 해당 로그 레코드를 포함하는 리두 레코드를 디스크로 기록하기 전까지는 트랜잭션 복구가 불가능하다. 따라서 커밋을 수행한 프로세스는 LGWR 프로세스를 포스트한 후에, log file sync대기 이벤트를 대기하게 된다. 이 기록방식을 sync write라고 함.
'DataBase이야기' 카테고리의 다른 글
Transaction - Enqueue (0) | 2010.07.16 |
---|---|
Transaction-Undo (0) | 2010.07.16 |
'10.03.20 story (0) | 2010.04.01 |
'03.03.05 story (0) | 2010.04.01 |
'10.03.03 story (0) | 2010.04.01 |