redolog의_이해

Download Report

Transcript redolog의_이해

Redo log file
Redo logfile과 관련해서 logfile, control file,
datafile에 자료가 어떻게 들어가는지 봅시다.
작성 : 구영훈
1) Data(A) 가 insert되어서 redolog buffer에 선저장됨,
이후에 DB Cache에도 저장
(이해를 돕기위해 여기에서 undo segment 단계는 생략합니다.
DB Cache
Redo log buffer
1) A
1) A
DBWR
datafile
CKPT
Log
group 1
Log
group 2
Log file(group)의 상태 3가지
Control file
Log
group 3
Current : 현재 사용중 ( Pinned buffer와 유사 )
Active : 사용중은 아닌데 logfile안의 내용이 datafile에 저장이 안
된 상태 ( Dirty buffer와 유사 )
Inactive : 내용이 완전히 저장까지 된 상태 ( Free buffer와 유사)
2) 조건이 만족해서(commit, 1/3full, 3초, 등등)
LGWR이 log buffer의 내용을 첫번째 log file에 저장함(SCN까지 저장됨)
또 LGWR이 control file에 SCN을 기록
DB Cache
Redo log buffer
1) A
DBWR
2) 조건만족(commit, 3초, 1/3)
LGWR
datafile
1
Control file
CKPT
2) A,
SCN# : 1
Log
group 1
: Current
(사용중)
Log
group 2
Log
group 3
…………
SCN(System Commit Number)
; 사용자가 실행했던 명령어를 찾기쉽게(나중에 복구를 위해서)
번호를 지정한 것, 명령어마다 번호가 붙지 않고 Transaction단
위로 번호가 매겨진다.
3) Log switch가 일어남
DB Cache
Redo log buffer
1) A
DBWR
3) Log switch
datafile
1
Control file
CKPT
…………
2) A,
SCN# : 1
Log
group 1
(log switch가
발생 후)
Active
Log
group 2
Log
group 3
(log switch가
발생 후)
Current
4) Log switch가 발생하면 CKPT가 log switch를 감지하여
1) control file에 checkpoint SCN을 기록
2) DBWR에게 checkpoint SCN을 알려줌
DB Cache

이후 checkpoint발생 후 datafile에 저장함
Redo log buffer
Checkpoint SCN을 자료
맨앞에 추가하고 자료들
을 datafile에 저장
1) A
Checkpoint발생 후
DBWR
(checkpoint발생 후)
4) Ckeckpoint
SCN을 DBWR에게
알려줌
1A
CKPT
datafile
4) Ckeckpoint SCN을
control file에 기록
1
Log switch
감지
1
Control file
… ……
3) Log switch
2) A,
SCN# : 1
Log
group 1
Log
group 2
Log
group 3
Inactive : checkpoint가 발생하여 해당 내용이
datafile에 저장되었을시
Active : 아직 datafile에 log파일의 내용이 저
장 안되었을 떄
Checkpoint SCN : 마지막 SCN으로 이 checkpoint SCN
만 알면 어디까지 저장할지 알 수 있다.
DBWR에게 checkpoint SCN을 알려만 주는 이유 : DBWR
이 바쁠 수 있어서 나중에 천천히 저장하라고.
5) 새로운 자료(B) 가 들어오고 조건이 만족해서(commit, 1/3full, 3초, 등등)
현재 current인 log group file에 해당 내용 저장됨(SCN까지),
또한 control file에도 LGWR이 해당 SCN기록
DB Cache
Redo log buffer
5) B
5) B  (log file에 내려쓰고는 지워짐)
DBWR
조건만족(commit, 3초, 1/3,)
LGWR
5) B,
SCN# : 2
1A
CKPT
datafile
2
1
Control file
… ……
Log
group 1
Log
group 2
Current
Log
group 3
6) Log switch 발생
DB Cache
Redo log buffer
5) B
DBWR
6) Log switch
5) B,
SCN# : 2
1A
CKPT
datafile
2
1
Control file
… ……
Log
group 1
Log
group 2
(log switch가
발생 후)
Active
Log
group 3
(log switch가
발생 후)
Current
7) CKPT가 log switch감지하여
1)
2)
DBWR에게 checkpoint SCN통보
Control파일에 checkpoint SCN기록
DB Cache
Redo log buffer
5) B
DBWR
앗! Log switch다!
6) Log switch
Checkpoint SCN
5) B,
SCN# : 2
1A
CKPT
datafile
Checkpoint SCN
2
2
Control file
… ……
Log
group 1
Log
group 2
(log switch가
발생 후)
Active
Log
group 3
(log switch가
발생 후)
Current
8) 이후 checkpoint가 발생하게 되면 DB cache이 내용을 checkpoint SCN을 포
함해서 datafile에 저장
DB Cache
Redo log buffer
Checkpoint 발생
DBWR
5) B,
SCN# : 2
2AB
CKPT
datafile
2
2
Control file
… ……
Log
group 1
Log
group 2
(checkpoint발생 후)
Inactive
Log
group 3
Current
이러한 방식으로 log switch 가 일어나고 control file과 datafile이 변경됨