반응형
리두 로그 버퍼(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' 이 함께 리두 로그에 저장되는 방식
- 변경된 블록의 주소 값이 없기 때문에 롤백시 시간이 길어질 수 있다.
물리적 로그 생성
- 변경 전 블록의 전체 이미지와 변경 후 이미지를 모두 리두 로그에 기록
- 리두 로그 용량이 매우 커질 수 있다.
위의 두가지 방식을 병행하는 방법
- 논리적 로그 정보를 포함하고 추가적으로, 변경 후 값과 변경이 발생한 블록의 주소 값, 변경 전 값을 저장하고 있는 언두 블록의 주소 값을 함께 저장한다.
- 물리적 방식보다 비교적 작으면서 빠른 롤백을 보장한다.
리두 로그 생성 절차
- 데이터 버퍼 캐시 내에서 변경되는 데이터/데이터 블록 관련 트랜젝션 정보 발생
- DML 문장이 시작되면 해당 로우가 저장된 데이터 버퍼를 아무도 동시에 변경할 수 없도록 일단 해당 데이터 블록/버퍼를 Pin모드로 전환시키고 진행.
- 변경 관련 정보들에 대한 체인지 벡터를 PGA 내부에 기록
- 체인지 벡터를 리두 로그 버퍼에 기록하기 위해 필요한 Redo copy latch를 획득
- 리두 로그 버퍼에 공간 할당을 받기 위한 Redo allocation latch를 획득
- 리두 로그 버퍼 공간이 있다면 Redo allocation latch를 즉시 반환하고 리두 로그 버퍼의 프리 공간에 체인지 벡터를 비로소 기록하게 된다.
- 기록이 완료되면 Redo copy latch를 반환한다.
- 리두 로그 버퍼에 체인지 벡터 정보가 기록되고 나면 이미 Pin 상태로 만들어둔 데이터 버퍼 블록에 실제적인 데이터 변경을 수행
- 리두 로그 버퍼의 여유공간 확보 실패 시에는 Redo copy latch, Redo allocation latch를 일단 반환하고 Redo write latch 획득 후 LGWR을 호출한다.
- 호출을 받은 LGWR은 리두 로그 버퍼의 변경된 리두 데이터들을 리두 로그 파일에 기록함으로써 리두 로그 버퍼 내부의 여유공간을 확보한다.
- 리두 로그 버퍼 내부의 공간이 확보되면 오라클 서버 프로세스는 다시 3번부터 작업을 진행한다.
반응형
'Oracle' 카테고리의 다른 글
[DB] 백업 & 복구(Backup & Recovery) 관련 용어 정리 (0) | 2018.11.26 |
---|---|
[DB] 오라클 DB 저장공간 개념 정리 (0) | 2018.11.23 |
[DB] 공유 풀 Shared Pool 간단하게 이해하기 -2 (0) | 2018.09.19 |
[DB] 공유 풀 Shared Pool 간단하게 이해하기 -1 (0) | 2018.09.05 |
[DB] 오라클 프로세스 개념 정리 (0) | 2018.09.04 |
[DB] 오라클 데이터베이스 기본 구조 (0) | 2018.09.04 |