- REDO log 파일
온라인 REDO 로그 파일이라고도 하며 이는 데이터 파일에 대한 변경 사항을 기록하는 파일이다.
예를 들어 특정 테이블에 데이터를 insert하여 추가하거나 delete문을 사용하여 row값을 지우는 등의 작업을 수행할때
모든 변경 사항을 기록함
§ REDO log 파일에 기록되는 시점
데이터 파일에 대한 모든 변경 사항은 트랜잭션이 커밋된 시점에 리두 로그 파일에 기록됨
오라클은 커밋된 트랜잭션의 리두 데이터가 리두 로그 파일에 기록되는 것을 보장함
따라서 장애가 발생하여 데이터 변경 사항이 데이터 파일에 기록되지 않았을지라도 리두로그 파일에
변경 사항이 기록되어 있으므로 리두 로그 파일만 존재한다면 데이터가 유실되는 일은 막을 수 있음
만약 리두 로그 파일이 손상되면 손상 이전의 시점까지만 복구가 가능함 - REDO 로그 버퍼와 LGWR
리두 로그 버퍼는데이터 변경 사항 발생 시 생성된 리두데이터를 임시 보관하는 메모리 영역임
리두 데이터는 일단 SGA 영역의 리 두로그 버퍼에 저장되었다가 특정 시점에 백그라운드 프로세스인 LGWR에 의해
REDO 로그 파일에 기록됨
정보를 한꺼번에 내려씀으로 인해 불필요한 디스크 I/O를 줄일 수 있고 이는 성능향상으로 이어짐
리두 로그 버퍼에 할당된 메모리 영역의 크기는 initial parameter인 LOG_BUFFER로 지정 할 수 있음- LGWR이 리두 데이터를 내려 쓰는 시점
- commit
- every 3 second
- DBWn 프로세스가 redo 데이터 쓰기를 요청할 떄(=데이터 파일에 변경된 블록을 기록 할때)
- REDO 로그 버퍼의 용량이 부족한 경우
- 기록해야할 REDO 로그 데이터가 REDO 로그 버퍼 전체 크기의 1/3에 도달 했을때
- REDO 로그 버퍼와 변경 처리의 정지
오라클은 리두로그 버퍼가 가득 차게 되면 데이터 변경 처리를 정지 시킴(=DB Hang)
관리자는 이와 같은 상황이 일어나지 않도록 아래와 같이 유의해야함- REDO 로그 파일은 속도가 빠른 디스크에 위치 시킴
- REDO 로그 버퍼의 사이즈를 여유있게 둔다(공간의 낭비가 생기진 않아야함)
- LGWR이 리두 데이터를 내려 쓰는 시점
REDO 로그 파일의 순환 기록
데이터베이스에는 반드시 두개 이상의 REDO 로그 파일이 할당 되어 야 함
LGWR은 할당된 REDO 로그 파일을 순환해가며 REDO 데이터들을 기록함
§ 로그 파일의 상태
로그 파일의 상태는 v$log view의 status 컬럼을 확인하면 알수 있으며 상세 내용은 아래와 같음status 칼럼값설 명CURRENT LGWR이 해당 REDO 로그 파일(그룹)에 REDO 값을 내려씀 ACTIVE 인스턴스에 장애가 발생하면 해당 REDO 로그 그룹에 기록된 변경 이력이 필요해짐 INACTIVE 현재 사용하지 않는 REDO 로그 파일(그룹) 인스턴스 장애가 발생해도 해당 그룹에 기록된 내용은 필요 없음 순환 기록의 동작
로그 파일이 3개 있다는 가정을 하고 위 그림을 순서대로 설명하면,
① 현재 LGWR 프로세스는 REDO log 파일 #1에 REDO 데이터를 쓰고 있으며 파일의 상태는 current
② #1 파일에 데이터가 가득차서 더이상 LGWR 프로세스가 #1에 REDO 데이터를 쓰지 못하게 되면
log switch라는 이벤트가 발생하며 LGWR 프로세스는 #2에 REDO 데이터를 쓰게 됨
이때 #2에 있던 데이터들은 덮어쓰게 되며 #2에 있던 데이터를 유지하기 위해서는 아카이브가 필요함
③ #2에도 데이터가 가득차게되어 더 이상 공간이 없게 되면 2번과 같이 로그스위치가 발생하며
④ #3에 REDO 데이터를 쓰기 시작함 #3도 동일하게 1번부터의 과정을 순환, 반복함