2026년 06월 08일 | DBMS Error 가이드
이 글에서 다루는 내용
ORA-00322 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
ORA-00322 log of thread is not current copy 는?
ORA-00322 에러는 Oracle 데이터베이스가 온라인 리두 로그 파일(Online Redo Log File)을 읽거나 사용하려 할 때, 해당 로그 파일이 현재 유효한 최신 복사본이 아님을 감지했을 때 발생하는 에러입니다. 주로 데이터베이스 복구(Recovery) 작업, 미러링된 로그 그룹 내 멤버 불일치, 또는 미디어 장애 이후 데이터베이스를 재기동할 때 나타납니다. 이 에러가 발생하면 데이터베이스가 정상적으로 OPEN 상태로 전환되지 못하거나, 아카이브 로그 생성 및 로그 스위치가 실패하는 심각한 상황으로 이어질 수 있습니다.
주요 발생 원인
1. 온라인 리두 로그 파일의 물리적 손상 또는 불완전한 미러링
가장 흔한 원인으로, 멀티플렉싱(Multiplexing)된 리두 로그 그룹의 멤버 중 하나가 디스크 장애, 파일 시스템 오류, 또는 OS 레벨의 문제로 인해 손상되거나 동기화가 깨진 경우입니다. Oracle은 로그 그룹 내 모든 멤버가 동일해야 한다는 원칙을 가지고 있으며, 멤버 간 내용이 불일치하면 이 에러를 발생시킵니다. 특히 스토리지 장애 이후 일부 멤버만 복구된 경우 빈번하게 발생합니다.
2. 불완전한 미디어 복구 후 데이터베이스 오픈 시도
RMAN 또는 사용자 관리 복구(User-Managed Recovery)를 수행한 이후, 복구가 완전히 완료되지 않은 상태에서 ALTER DATABASE OPEN 명령을 실행하면 이 에러가 발생할 수 있습니다. 온라인 리두 로그는 복구 시점 이후의 변경 사항을 반영해야 하는데, 불완전한 복구로 인해 SCN(System Change Number) 불일치가 발생하여 현재 로그로 인식되지 않는 상황이 만들어집니다. 이 경우 RESETLOGS 옵션을 사용한 OPEN이 필요합니다.
3. 파일 복사 또는 스냅샷 기반 환경에서의 로그 불일치
스냅샷(Snapshot) 기반의 스토리지 복제, 잘못된 데이터파일 복사, 또는 테스트 환경 구성 시 리두 로그 파일이 의도치 않게 구버전의 것으로 대체된 경우에도 발생합니다. 운영 DB를 스냅샷으로 테스트 DB에 복제하는 과정에서 로그 파일의 헤더 정보가 현재 컨트롤 파일과 맞지 않아 Oracle이 해당 로그를 current copy로 인정하지 않습니다. 클라우드 환경이나 ASM(Automatic Storage Management) 환경에서도 유사한 문제가 발생할 수 있습니다.
해결 방법
1단계: 현재 에러 상태 진단
먼저 어떤 로그 그룹과 멤버에 문제가 있는지 확인합니다.
-- 온라인 리두 로그 그룹 및 멤버 상태 확인
SELECT l.GROUP#, l.THREAD#, l.SEQUENCE#, l.MEMBERS,
l.ARCHIVED, l.STATUS, lm.MEMBER
FROM V$LOG l
JOIN V$LOGFILE lm ON l.GROUP# = lm.GROUP#
ORDER BY l.GROUP#, lm.MEMBER;
-- 각 멤버의 물리적 상태 확인 (INVALID, STALE, DELETED 등)
SELECT GROUP#, STATUS, MEMBER, IS_RECOVERY_DEST_FILE
FROM V$LOGFILE
ORDER BY GROUP#;
2단계: 손상된 리두 로그 멤버 재생성 (멀티플렉스 환경)
동일 그룹 내 다른 멤버가 정상인 경우, 손상된 멤버만 DROP 후 재추가합니다.
-- 손상된 멤버 삭제 (GROUP# 2, 특정 멤버 기준 예시)
ALTER DATABASE DROP LOGFILE MEMBER '/u01/oradata/orcl/redo02b.log';
-- 정상 멤버가 존재하는 그룹에 새 멤버 추가
ALTER DATABASE ADD LOGFILE MEMBER '/u01/oradata/orcl/redo02b.log'
TO GROUP 2;
-- 추가 후 로그 스위치로 새 멤버 동기화 유도
ALTER SYSTEM SWITCH LOGFILE;
ALTER SYSTEM CHECKPOINT;
3단계: CURRENT 또는 ACTIVE 상태의 로그가 손상된 경우
가장 위험한 상황으로, 데이터베이스가 MOUNT 상태에서 아래 절차를 수행합니다.
-- MOUNT 상태에서 로그 클리어 시도
-- 아직 아카이브되지 않은 경우 UNARCHIVED 옵션 사용 (데이터 손실 가능)
ALTER DATABASE CLEAR LOGFILE GROUP 2;
-- 아카이브되지 않은 로그를 강제로 클리어해야 할 경우 (주의: 불완전 복구 필요할 수 있음)
ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 2;
-- 클리어 후 데이터베이스 오픈 시도
ALTER DATABASE OPEN;
4단계: 불완전한 복구 이후 RESETLOGS로 오픈
미디어 복구 이후 ORA-00322가 발생하는 경우 RESETLOGS 옵션으로 오픈합니다.
-- RMAN을 통한 불완전 복구 예시
RMAN> RUN {
RESTORE DATABASE UNTIL SEQUENCE 150 THREAD 1;
RECOVER DATABASE UNTIL SEQUENCE 150 THREAD 1;
}
-- RESETLOGS로 데이터베이스 오픈 (새로운 로그 시퀀스 시작)
ALTER DATABASE OPEN RESETLOGS;
-- RESETLOGS 이후 즉시 전체 백업 수행 (필수!)
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
5단계: 컨트롤 파일 재생성이 필요한 경우
컨트롤 파일 손상으로 인해 로그 정보가 불일치하는 경우 재생성이 필요합니다.
-- 컨트롤 파일 생성 스크립트 예시 (실제 환경에 맞게 수정 필요)
CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 ('/u01/oradata/orcl/redo01.log') SIZE 50M,
GROUP 2 ('/u01/oradata/orcl/redo02.log') SIZE 50M,
GROUP 3 ('/u01/oradata/orcl/redo03.log') SIZE 50M
DATAFILE
'/u01/oradata/orcl/system01.dbf',
'/u01/oradata/orcl/sysaux01.dbf',
'/u01/oradata/orcl/users01.dbf'
CHARACTER SET AL32UTF8;
예방 방법
1. 온라인 리두 로그 멀티플렉싱 및 정기적 상태 모니터링 자동화
리두 로그는 반드시 서로 다른 디스크 또는 스토리지 경로에 최소 2개 이상의 멤버로 멀티플렉싱하여 구성해야 합니다. 아래와 같은 모니터링 쿼리를 스케줄러(DBMS_SCHEDULER 또는 크론잡)를 통해 매일 실행하고, INVALID 또는 STALE 상태의 멤버가 감지되면 즉시 DBA에게 알람이 오도록 설정해야 합니다.
-- 정기 모니터링 쿼리 (INVALID 멤버 탐지)
SELECT l.GROUP#, lm.MEMBER, lm.STATUS, l.STATUS AS LOG_STATUS
FROM V$LOG l
JOIN V$LOGFILE lm ON l.GROUP# = lm.GROUP#
WHERE lm.STATUS = 'INVALID'
OR lm.STATUS = 'STALE';
2. 백업 및 복구 절차 정기 테스트와 RMAN 기반 백업 전략 수립
RESETLOGS 이후 또는 불완전한 복구 시나리오에 대비하여 정기적으로 RMAN 복구 훈련(Restore & Recovery Drill)을 테스트 환경에서 수행해야 합니다. 특히 운영 환경의 스냅샷을 테스트 환경으로 복제하는 경우, 반드시 RMAN의 DUPLICATE 명령을 활용하여 올바른 복제 절차를 따르고 리두 로그 파일이 새롭게 초기화되도록 해야 합니다.
관련 에러
- ORA-00312: 온라인 로그 파일 자체를 찾을 수 없거나 접근 불가능할 때 발생하며, ORA-00322와 함께 나타나는 경우가 많습니다.
- ORA-00313: 로그 그룹의 멤버를 오픈할 수 없을 때 발생하는 에러로, 파일 권한 문제나 경로 불일치에서 기인합니다.
- ORA-00316: 로그 파일이 올바른 Oracle 로그 파일이 아닌 경우 발생하며, 파일 헤더 손상과 관련이 깊습니다.
- ORA-00333: 리두 로그 읽기 오류로, 복구 중 로그를 읽다가 블록 수준의 손상이 발견될 때 발생합니다.
- ORA-00600: 내부 에러로, ORA-00322가 근본 원인인 경우 컨트롤 파일과 로그 파일 간 메타데이터 불일치로 인해 동반 발생할 수 있습니다.
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.