티스토리 뷰

리두로그 (REDO LOG) 생성원리


리두로그 (REDO LOG) :

- 장애가 발생 하였을 경우 복구를 위해서 변경되기전 (UNDO) 내용과 변경된 후 (REDO) 내용을 작업일지 (REDO LOG) 와 같이 메모리 (REDO LOG BUFFER)에 그리고 파일 ( REDO LOG FILE) 에 기록 해둔다.


리두로그 (REDO LOG) 생성원리 :

- ORACLE 에서 데이터변경 (DML, DDL, TCL, SQL) 이 일어났을 때 두가지 매커니즘 (WRITE LOG AHEAD, LOG FORCE AT COMMIT)에 의해 리두로그에 기록이 된다.


    롸이트 로그 어헤드 (WRITE LOG AHEAD) :  

-리두로그에 복구관련 중요정보가 저장되어 있기 때문에 데이터에 먼저 기록 (DBWR) 하지 않고, 리두로그 기록 (LGWR) 부터 한다.


    로그 포스 엣 커밋 (LOG FORCE AT COMMIT) : 

-커밋(COMMIT) 요청이 들어와도 LGWR이 일어나지 않으면 커밋이 완료되지 않는다. 

커밋이 일어나면 데이터파일로 내려쓰는것이 아니라 리두로그 부터 기록된다는 말이다.




1. 

* 체인지 벡터(CHANGE VECTOR) : 변경된 데이터를 나중에 복구할 목적으로 리두로그에 기록할 변경될 데이터에 대한 모든 정보의 세트 ( ROLL FORWARD용 리두(REDO), ROLLBACK용 언두(UNDO) 둘다 포함), 리두 레코드 포맷(REDO RECORD FORMAT)으로 로우 (ROW)단위로 리두 로그 버퍼 (REDO LOG BUFFER)에 복사됨.

* 페이지 픽스(PAGE FIX) : 해당 블록의 해당 로우(ROW)를 다른 사용자가 내용을 변경 할 수 없도록 락(LOCK)을 걸어주는것

- 변경 SQL 요청이 들어오면 서버프로세스(SERVER PROCESS)는 해당 블록을 찾아서 DBC(데이터 버퍼캐시 DATA BUFFER CACHE) 로 가져오고 페이지 픽스(PAGE FIX)를 설정한 후 PGA에서 리두 체이지 벡터(REDO CHANGE VECTOR)를 생성하게 된다.


2. 

* 랫치 (LATCH) : 유한한 메모리 자원을 사용하기 위한 대기표 같은개념

- PGA 에서 체인지벡터(CHANGE VECTOR) 생성후 리두로그버퍼(REDO LOG BUFFER) 에 필요한 용량을 계산하게 됨. 체이지벡터를 리두로그버퍼(REDO LOG BUFFER)에 복사하기 위해서 두가지 랫치(LATCH) : 리두 카피 랫치 (REDO COPY LATCH), 리두 얼로케이션 랫치 (REDO ALLOCATION LATCH)가 필요하다.


3.

* 쉐어드 리두 스트랜 ( SHARED REDO STRAND ) : 스트랜 (STRAND) 은 여러개의 분할된 영역이고, 리두 로그 버퍼 (REDO LOG BUFFER)를 스트랜 (STRAND) 으로 나누어서 스트랜 내에서 리두 얼로케이션 랫치 ( REDO ALLOCATION LATCH ) 를 할당 해주는것이다. 스트랜(STRAND) 갯수는 LOG_PARALLELISM_DYNAMIC (동적 파라미터) 로 자동 지정 된다.

- 리두 카피 랫치 (REDO COPY LATCH) 는 여러개지만 리두 얼로케이션 랫치 (REDO ALLOCATION LATCH)는 1개 밖에 없어서 경합이 발생 할 수 있다. 9i 부터 쉐어드 리두 스트랜 (SHARED REDO STRAND) 기능이 도입되었다.

11g 부터는 프라이빗 리두 스트랜(PRIVATE REDO STRAND) 기능이 도입되어서 랫치(LATCH) 확보 대신 독립적인 프라이빗 스트랜(PRIVATE STRAND) 공간에서 지로 카피 리두 (ZERO COPY REDO) 를 사용한다.


4. 

- 특정상황 ( 3초마다, 리두로그버퍼 (REDO LOG BUFFER) 의 전체크기의 1/3 차거나, 1M 넘을경우 , 커밋(COMMIT) 또는 록백(ROLLBACK), DBWR 요청시) 서버프로세스(SERVER PROCESS) 는 리두 롸이팅 랫치(REDO WRITING LATCH)를 확보한 후 LGWR에게 리두 엔트리 (REDO ENTRY : REDO LOG BUFFER 에 기록된 체인지 벡터) 를 리두로그 파일에 기록하라고 요청한다. 그후 기록된 내용은 플러시(FLUSH : 기록된 REDO ENTRY 를 리두 버퍼(REDO BUFFER)에서 삭제) 된다.

 

'ORACLE DB > Oracle DB Admin' 카테고리의 다른 글

CONTROL FILE 다중화  (0) 2013.03.11
CONTORL FILE 재생성  (0) 2013.03.11
리두로그 (REDO LOG) 구성  (0) 2013.03.06
리두로그 REDO LOG 관리  (0) 2013.03.06
테이블 스페이스 & 데이터 파일 (TABLESPACE & DATAFILE)  (0) 2013.03.06
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함