Redo Log : 변경되는 내용이 있을경우 모두 기록해 두었다가 장애를 대비하는 기능
Redo Log Buffer : 오라클에서 데이터 변경시 장애가 발생할 것을 대비해 변경되기 전과 후의 내용을 기록하는 메모리
Redo Log File : 오라클에서 데이터 변경시 장애가 발생할 것을 대비해 변경되기 전과 후의 내용을 기록하는 파일
데이터 변경( DDL , DML , TCL ) 이 발생하면 두가지 매커니즘에 의해 Redo Log 에 기록 됨
- Write Log Ahead : 데이터를 변경하기 전에 Redo Log 에 먼저 기록한 후 데이터를 변경
DBWR 이 작동하기 전에 LGWR 이 먼저 작동
- Log force at Commit : 사용자로 부터 commit 요청이 들어오면 관련된 모든 Redo Record 들은 Redo Log File 에 저장한후 Commit 을 완료
< Redo log 기록 원리 >
1. 사용자가 쿼리를 수행 하면 서버 프로세스는 원하는 Block 이 D.B.Buffer Cache 에 있는지 확인한 후 없을 경우 해당 블록을 Data file 에서 찾아서 D.B.Buffer Cache 로 복사해온다. 그 후 해당 블록을 다른 사용자가 바꿀 수 없도록 Lock 을 설정 ( page fix 라고 함 ) 한 후, PGA 에서 Redo Change Vector 를 생성. ( Change Vector = 변경된 데이터를 나중에 복구할 목적으로 Redo log 에 기록할 변경된 데이터에 대한 모든 정보 ) change vector는 row 단위로 redo log buffer 에 복사됨
2. PGA에서 Redo Log Buffer 에 복사하기 위해 latch 를 획득해야 함. ( latch = 한정된 자원을 여러 사용자가 사용하는 것을 막기위해 순서를 정리해 주는 역할을 하는 장치 ) . Redo log buffer 에 기록하기전에 먼저 Redo Copy latch 를 획득해야 한다. redo copy latch 는 change vector 가 Redo log buffer에 기록될 때 까지 갖고 있어야 해서 여러개가 존재
3. Redo Copy Latch 를 확보한 서버 프로세스는 Redo Log Buffer 에 내용을 기록하기 위해 Redo Allocation latch 를 확보해야 한다. 8i 버전 까지는 Redo Allocation latch 가 1개 밖에 없어서 데이터의 변경이 많이되는 서버일경우 경합이 일어나 속도가 저하 됬었다. 9i 부터는 Redo Log Buffer 를 여러 공간으로 나눠 공간마다 Redo Allocation latch 를 할당해 주는 Shared Redo Strand라는 기능이 도입되 여러 프로세스가 동시에 작업이 가능하게 해주었다.
4. Redo log buffer 에 기록된 내용들은 특정 상황이 되면 LGWR 에 요청해서 Redo Log file 로 데이터를 기록한후 Redo log buffer 에서 삭제( Flush )
- LGWR 이 Redo log file 로 기록하는 경우
1. 3초마다
2. Redo log buffer 의 전체크기의 1/3 이 찼거나 1M 이 넘을 경우
3. 사용자가 commit 또는 rollback 을 수행할 때
4. DBWR 이 LGWR 에게 쓰기를 요청할 때
1. LGWR ( Log Writer ) 에 의한 Redo Log File 에 파일 쓰기
< 데이터를 입력받기 전에 Data File 에서 빈 블록을 D.B.Buffer Cache 에 이동시키고 다른 사용자가 사용하지 못하게 LOCK을 걸어준다.>
1. Redo Log Buffer 에 데이터가 들어오면 LGWR 프로세스를 이용해 commit데이터에 SCN을 기록 해서 Redo Log File로 이동시킨다. 이때 이동하고 나면 Redo Log Buffer 에 있던 데이터는 없어진다.
2. Redo Log Buffer 에 데이터가 들어오면 D.B.Buffer Cache 에도 똑같이 데이터가 들어간다, 이때 데이터는 Data File 에서 이동시켰던 빈 블록으로 들어감
3. LGWR 은 Redo Log File 에 저장하고 부여한 각각의 데이터의 SCN 최종 번호를 Control File의 commit SCN 부분에 기록한다.
2. Log Switch 발생에 따른 변화
1,2 Commit 된 데이터들이 Redo Log File 에 기록하다가 공간이 부족하면 다음 파일로 이동해 기록하는 것을 Log Switch가 발생했다고 한다.
3. Log Switch 가 발생하면 CKPT 프로세스가 Log Switch 를 감지해서 checkpoint 신호를 발생시킨다
Redo Log File 의 상태
- Current : 현재 LGWR 에 의해서 Redo Log File 에 기록되고 있는 상태 ( = Pinned Buffer )
- Active : Redo Log File의 공간이 가득차서 Log Switch 에 의해 다른파일로 Current 넘어간 상태, 그러나 저장된 기록은 Data File 에 저장되지 않은 파일의 상태 ( = Dirty Buffer )
- Inactive : Redo Log File 에 저장된 데이터가 DataFile 에도 저장된 상태. 이 상태에서만 Redo Log File 을 지울수 있다.( = Free Buffer )
3. CheckPoint 에 따른 변화
1. CKPT 프로세스가 Log Switch 를 감지하고 DBWR에 checkpoint 신호를 전달 ( 가득찬 그룹의 최종 SCN을 보냄 )
2. DBWR 은 D.B.Buffer cache 에 기록된 데이터를 DataFile 에 저장 ( Log Switch 가 일어나서 넘어온 SCN 숫자와 그에 맞는 데이터만 저장 )
3. CKPT 프로세스는 Control File 의 checkpoint SCN에도 직접 SCN을 기록
Redo Log File 의 그룹과 멤버
|
최소 |
최대 |
그룹 |
2 |
3 |
멤버 |
1 |
2 |
'오라클 > 관리 실무' 카테고리의 다른 글
사용자 관리 (0) | 2014.10.27 |
---|---|
Oracle 저장구조 (0) | 2014.10.23 |
Tablespace 와 Data File 관리하기 (2) | 2014.10.21 |
Control File 관리하기 (0) | 2014.10.20 |
ORACLE 시작하기 & 종료하기 (0) | 2014.10.20 |
Oracle Background Process (0) | 2014.10.17 |
SQL 문장의 실행 원리 (0) | 2014.10.17 |