1. Redo 기능
1) Database 복구를 목적으로 설계
Write ahead rule | 데이터를 변경(DDL, DML 등) 시키기 전에 반드시 리두를 먼저 생성 |
Log force at commit | 사용자가 커밋을 요청하면 반드시 관련된 데이터를 보장하고 인스턴스 장애 시에 성공적으로 리두 로그 파일로부터 데이터 복구를 함 |
2) Database에 적용된 모든 변경 사항에 대한 이력 저장
3) DML/DDL/Recursive SQL에 의해 변경된 모든 Data 이력(nologging 제외)
4) DDL Text 저장(DML Text 제외)
2. LGWR에 의한 Redo 기록
1) Redo Buffer 내용을 Redo Log File에 기록하는 시점
① | 매 3초 마다 |
② | Log Buffer의 1/3 또는 1MB가 저장될 때 |
③ | User Process가 Commit 또는 Rollback으로 Transaction을 종료할 때(Log force at commit) |
④ | DBWR Process에 의해 신호를 받을 때(write ahead logging) | ⑤ | Log Force at Commit : Transaction과 관련된 모든 Redo Record를 Log File에 저장 후 Commit 완료) |
⑥ | Write Ahead Log : Data Buffer에 기록하기 전에 Log Buffer에 먼저 기록 | | Write Ahead Log : Data File에 기록하기 전에 Log File에 먼저 기록 |
2) 모든 프로세서는 리두 버퍼에 변경사항을 저장함
① | 리두 페코드라는 단위로 데이터 변경사항을 저장함 |
② | 리두 버퍼는 리두 레코드를 연속된 형태(SCN 순서)로 저장함 |
③ | 리두 버퍼가 꽉 차게 되면 다시 처음부터 레코드를 저장하는 순환구조 사용 |
3) 참고사항
- LGWR가 리두 버퍼 내용을 리두 버퍼 로그에 기록하는 것을 백그라운드 기록이라 함
- 백그라운드 기록의 기준이 되는 크기는 _LOG_IO_SIZE이며, 10g 기준 리두버퍼의 1/6임(9i는 1/3)
- 리두 로그 파일은 리두 로그 블록 단위로 기록됨
SELECT MAX(LEBSZ)
FROM SYS.XM$KCCLE;
MAX(LEBSZ)
----------
512
- 오라클의 커밋은 커밋 순간의 SCN 까지는 복구를 보장하겠다는 의미
3. Sync Writes / Background Writes
1) Sync Writes
- User Commit 또는 Rollback에 의해 발생함
- log file sync Event는 Sync Writes에 의해서만 발생함
☞ log file sync 대기이벤트 : 서버 프로세스가 커밋 명령을 내린 후 LGWR가 성공적으로 기록할 때 까지 기다리게 됨.
이 때 발생하는 이벤트이며, Sync Writes signal을 기다리고 있음을 의미
☞ Sync Writes signal : LGWR 프로세스가 로그 버퍼의 내용을 리두 로그 파일에 기록 완료 한 후에 유저 프로세스에게 전달하는 시그널
☞ log file sync 대기이벤트 원인
① | 잦은 커밋 |
② | I/O 시스템 성능이 느린 경우 |
③ | 많은 리두의 양 |
④ | 리두 버퍼의 크기 |
2) Background Writes
- Sync Writes를 제외한 나머지 경우에 발생함
- 대량의 Redo Entries를 발생시키는 Server Process는 Redo Buffer의 공간을 할당 받기 위해 Background Writes를 요청함
문서에 대하여
- 최초작성자 : ~xsoft
- 최초작성일 : 2010년 10월 23일
- 이 문서는 오라클클럽 코어 오라클 데이터베이스 스터디 모임에서 작성하였습니다.
- {*}이 문서의 내용은 (주)엑셈에서 출간한 'PRACTICAL OWI IN ORACLE 10G'를 참고하였습니다.*