본문 바로가기
Oracle

[DB] 리두 로그(Redo Log) 란?

by 공대냥이 2018. 11. 26.
반응형

리두 로그 버퍼(Redo Log Buffer) 

    • DDL 또는 DML 문장에 의해 데이터베이스에 저장된 값 또는 테이더베이스 구조에 변경사항이 생기는 경우 이러한 정보를 놓치지 않고 저장하는 메모리 영역
    • 해당 영역에 저장되는 정보들은 커밋되는 순간 LGWR(Log Writer)에 의해 리두 로그 파일(Redo Log file)로 저장된다. 다시 말해 메모리 영역에 저장된 데이터를 디스크에 쓴다고 보면 된다.
 

로그 생성 

 

논리적 로그 생성

    • 변경을 발생시키는 명령문과 변경 사항을 롤백시킬 수 있는 명령문만을 저장한다.
      • ex) insert into test(data) values('data1'); 실행하면 insert문과 delete from test where data='data1' 이 함께 리두 로그에 저장되는 방식
    • 변경된 블록의 주소 값이 없기 때문에 롤백시 시간이 길어질 수 있다.
물리적 로그 생성
    • 변경 전 블록의 전체 이미지와 변경 후 이미지를 모두 리두 로그에 기록
    • 리두 로그 용량이 매우 커질 수 있다.
위의 두가지 방식을 병행하는 방법
    • 논리적 로그 정보를 포함하고 추가적으로, 변경 후 값과 변경이 발생한 블록의 주소 값, 변경 전 값을 저장하고 있는 언두 블록의 주소 값을 함께 저장한다.
    • 물리적 방식보다 비교적 작으면서 빠른 롤백을 보장한다.
 

 

리두 로그 생성 절차 

 

  1. 데이터 버퍼 캐시 내에서 변경되는 데이터/데이터 블록 관련 트랜젝션 정보 발생
    •  DML 문장이 시작되면 해당 로우가 저장된 데이터 버퍼를 아무도 동시에 변경할 수 없도록 일단 해당 데이터 블록/버퍼를 Pin모드로 전환시키고 진행. 
  2. 변경 관련 정보들에 대한 체인지 벡터를 PGA 내부에 기록
  3. 체인지 벡터를 리두 로그 버퍼에 기록하기 위해 필요한 Redo copy latch를 획득
  4. 리두 로그 버퍼에 공간 할당을 받기 위한 Redo allocation latch를 획득
  5. 리두 로그 버퍼 공간이 있다면 Redo allocation latch를 즉시 반환하고 리두 로그 버퍼의 프리 공간에 체인지 벡터를 비로소 기록하게 된다.
  6. 기록이 완료되면 Redo copy latch를 반환한다.
  7. 리두 로그 버퍼에 체인지 벡터 정보가 기록되고 나면 이미 Pin 상태로 만들어둔 데이터 버퍼 블록에 실제적인 데이터 변경을 수행
    • 리두 로그 버퍼의 여유공간 확보 실패 시에는 Redo copy latch, Redo allocation latch를 일단 반환하고 Redo write latch 획득 후 LGWR을 호출한다.
  8. 호출을 받은 LGWR은 리두 로그 버퍼의 변경된 리두 데이터들을 리두 로그 파일에 기록함으로써 리두 로그 버퍼 내부의 여유공간을 확보한다.
  9. 리두 로그 버퍼 내부의 공간이 확보되면 오라클 서버 프로세스는 다시 3번부터 작업을 진행한다.

반응형