Redo Log 상태와 동작 원리: Current, Active, Inactive

·2024년 12월 20일

Oracle 데이터베이스의 Redo Log는 트랜잭션 변경 사항을 기록하여 데이터 무결성과 복구를 보장합니다. 이 로그는 Current, Active, Inactive라는 세 가지 상태를 가질 수 있으며, 각각의 상태는 데이터베이스 동작과 밀접한 관련이 있습니다.

[설명 내용]

  • Redo Log 상태 변화와 관련 개념
  • DBA로서 모니터링해야 할 포인트

Redo Log의 구성

Redo Log는 v$logv$logfile 뷰를 통해 확인할 수 있습니다.

v$log : Redo Log 그룹 정보와 상태(Status), 로그 시퀀스(Log Sequence)를 보여줍니다.
v$logfile: Redo Log 파일의 경로와 이름을 확인할 수 있습니다.
예시 쿼리:

SELECT l.group#, l.status, l.archived, f.member
FROM v$log l, v$logfile f 
WHERE l.group# = f.group#
ORDER BY l.group#;

출력:

GROUP#STATUSARCHIVEDMEMBER
1CURRENTNO/u01/app/oracle/redo01.log
2ACTIVEYES/u01/app/oracle/redo02.log
3INACTIVEYES/u01/app/oracle/redo03.log

Redo Log의 상태

1. CURRENT

현재 쓰기 중인 Redo Log입니다.
데이터베이스는 하나의 Redo Log 그룹만 "Current" 상태로 유지합니다.
LGWR(Log Writer)가 실시간으로 변경 사항을 기록합니다.

주요 특징:
"Current" 상태의 로그는 절대 재사용되지 않습니다.
데이터가 지속적으로 쓰이는 상태로, 복구 시 필요한 최신 정보가 포함되어 있습니다.

2. ACTIVE

Redo Log가 여전히 복구에 필요한 상태입니다.
"Active" 상태의 로그는 아직 db buffer cache 에서 디스크(data file)에 기록된 데이터가 변경되지 않았거나, 백업이 완료되지 않은 경우 복구를 위해 유지됩니다.

주요 특징:
데이터베이스 복구 시 필요하므로 덮어쓸 수 없습니다.
Standby 데이터베이스가 있다면, Active 상태의 로그는 전송 대상이 될 수 있습니다.

3. INACTIVE

Redo Log가 복구에 필요 없는 상태입니다.
변경 사항이 모두 디스크에 기록되고, 관련 데이터가 안정적인 상태가 되었을 때 "Inactive"로 전환됩니다.

주요 특징:
"Inactive" 상태의 로그는 재사용 가능하며, 덮어쓸 수 있습니다.
Archiving Mode에서는 로그가 Archive Log로 백업된 후 재사용됩니다. 만약 REDO LOG FILE을 삭제하고 싶다면 반드시 INACTIVE 상태로 만들고 삭제 수행해야한다.

Redo Log 상태 변경 과정

Redo Log는 순환적(Circular)으로 동작하며, 상태는 아래와 같은 조건에서 변경됩니다:

CURRENT → ACTIVE

Redo Log 파일이 로그 스위치를 통해 다른 Redo Log로 변경되면, 이전 "Current" 로그는 "Active" 상태로 전환됩니다.
이때 "Active" 상태는 데이터가 복구에 필요할 수 있음을 의미합니다.

ACTIVE → INACTIVE

"Active" 로그의 데이터가 모두 Checkpoint를 통해 디스크에 기록되면, "Inactive" 상태로 변경됩니다.
Checkpoint는 DBWR(Database Writer) 프로세스가 데이터를 데이터 파일에 기록하는 작업입니다.

INACTIVE → CURRENT

"Inactive" 상태의 로그는 Redo Log 순환에 따라 다시 쓰기 가능해지며, "Current" 상태가 됩니다.

Redo Log 상태와 Archived 상태

"Archived"는 Redo Log의 복사본이 Archive Log로 저장되었는지 여부를 나타냅니다.

YES: 해당 로그가 Archive Log로 저장되었습니다.
NO: 아직 Archive Log로 저장되지 않았습니다.

Archived 상태는 v$log 뷰의 ARCHIVED 컬럼에서 확인 가능합니다:

SELECT group#, status, archived FROM v$log;

Redo Log 관련 모니터링 포인트

1. 로그 상태 확인

현재 사용 중인 Redo Log 상태 및 사용 가능 여부를 주기적으로 점검합니다.
SELECT group#, status FROM v$log;

2. 로그 순환 확인

Redo Log가 적절히 순환하지 않으면 성능 저하가 발생할 수 있습니다.
SELECT group#, status, bytes, archived FROM v$log;

3. Archive Log 공간

Archive Log Mode를 사용하는 경우, Archive Log 저장 공간이 부족하지 않은지 확인합니다.
SHOW PARAMETER db_recovery_file_dest_size;

4. Checkpoint 지연

Checkpoint가 지연되면 "Active" 상태의 로그가 "Inactive"로 전환되지 않아 병목이 발생할 수 있습니다.

오류

현재 테스트DB에서 insert 작업을 하는데 너무 오래걸려서 alert.log를 봤더니 아래와 같은 에러가 있었다.

Thread 1 cannot allocate new log, sequence 1112
Checkpoint not complete

오류 원인 :
새로운 redo Log를 할당하려고 하는데, 이전 로그파일이 아직 사용가능한 상태가 아니라서 (아직 active 상태) 발생하는 문제

해결 방법 :
새로운 redo log 파일을 추가하였습니다.

alter database add logfile group 4 size 1gb; 
profile
금융권 DBA (ORACLE)

0개의 댓글