반응형

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 vectorRedo 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

+ Recent posts