Oracle ORA-00308 오류 원인과 해결 방법 완벽 가이드

ORA-00308
2026년 06월 07일 | DBMS Error 가이드

이 글에서 다루는 내용

ORA-00308 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.

ORA-00308 cannot open archived log 는?

ORA-00308 에러는 Oracle 데이터베이스가 아카이브 로그 파일을 열거나 읽으려 할 때 해당 파일에 접근할 수 없을 때 발생하는 에러입니다. 주로 Recovery, LogMiner, 또는 Standby Database 동기화 작업 중에 아카이브 로그 파일이 삭제되었거나 경로가 변경된 경우에 나타납니다. 이 에러는 데이터베이스 복구 작업을 중단시키거나 Data Guard 환경에서 Redo Apply를 멈추게 하는 심각한 문제로 이어질 수 있으므로 신속한 조치가 필요합니다.


주요 발생 원인

1. 아카이브 로그 파일이 물리적으로 삭제되었거나 손상된 경우

가장 흔한 원인으로, 디스크 공간 부족으로 인해 운영자가 수동으로 아카이브 로그를 삭제하거나, OS 레벨의 파일 시스템 오류로 파일이 손상된 경우 발생합니다. RMAN을 통해 정식으로 삭제하지 않고 rm 명령어 등으로 직접 파일을 삭제했을 때 Oracle 카탈로그와 실제 파일 시스템 간의 불일치가 발생하여 이 에러가 트리거됩니다.

2. 아카이브 로그 파일의 경로(LOG_ARCHIVE_DEST) 설정이 변경된 경우

LOG_ARCHIVE_DEST 파라미터가 변경되었거나 마운트 포인트가 변경되어 기존 아카이브 로그의 위치와 Oracle이 참조하는 경로가 달라진 경우 이 에러가 발생합니다. 특히 스토리지 마이그레이션이나 서버 이전 후 NFS 마운트 경로가 달라졌을 때 자주 목격되는 패턴이며, Oracle Control File에 기록된 경로와 실제 경로가 일치하지 않으면 반드시 이 에러가 발생합니다.

3. Data Guard(Standby) 환경에서 아카이브 로그 전송 실패

Primary DB에서 Standby DB로 아카이브 로그가 정상적으로 전송되지 않았거나, Standby 측의 아카이브 로그 수신 디렉토리에 권한 문제 또는 디스크 풀(Full) 상태가 발생한 경우 Redo Apply 과정에서 이 에러가 발생합니다. FAL(Fetch Archive Log) 서버 설정이 잘못되어 갭(Gap) 발생 시 자동 복구가 안 되는 경우에도 동일한 증상이 나타납니다.


해결 방법

원인 1: 아카이브 로그 파일 누락 또는 손상

먼저 누락된 아카이브 로그 파일의 정보를 확인합니다.

-- 누락된 아카이브 로그 정보 조회
SELECT NAME, SEQUENCE#, STATUS, DELETED
FROM V$ARCHIVED_LOG
WHERE STATUS = 'A'
  AND DELETED = 'NO'
  AND NAME IS NOT NULL
ORDER BY SEQUENCE# DESC;

-- RMAN으로 현재 아카이브 로그 상태 확인
-- RMAN 프롬프트에서 실행
LIST ARCHIVELOG ALL;
CROSSCHECK ARCHIVELOG ALL;

-- 누락된(EXPIRED) 아카이브 로그 등록 해제
DELETE EXPIRED ARCHIVELOG ALL;

파일이 백업에 존재한다면 복구 후 등록합니다.

-- RMAN으로 특정 아카이브 로그 복구
RMAN> RESTORE ARCHIVELOG SEQUENCE 12345 THREAD 1;

-- 복구 후 불완전 복구(Incomplete Recovery) 진행 시
RMAN> RECOVER DATABASE UNTIL SEQUENCE 12346 THREAD 1;
RMAN> ALTER DATABASE OPEN RESETLOGS;

만약 해당 아카이브 로그 없이 복구를 진행해야 할 경우 (데이터 손실 감수):

-- 특정 시점까지만 복구 (불완전 복구)
RECOVER DATABASE UNTIL TIME '2024-01-15 10:30:00';

-- 또는 SCN 기준 복구
RECOVER DATABASE UNTIL SCN 9876543;

원인 2: 아카이브 로그 경로 변경

-- 현재 아카이브 로그 목적지 파라미터 확인
SHOW PARAMETER LOG_ARCHIVE_DEST;

-- V$ARCHIVE_DEST로 상세 확인
SELECT DEST_ID, DEST_NAME, STATUS, TARGET, ARCHIVER, DESTINATION, ERROR
FROM V$ARCHIVE_DEST
WHERE STATUS != 'INACTIVE';

-- 아카이브 로그 경로 변경 (필요 시)
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1 = 'LOCATION=/new/archive/path' SCOPE=BOTH;

-- RMAN 카탈로그에 새 경로의 아카이브 로그 등록
RMAN> CATALOG START WITH '/new/archive/path/';

-- 기존 잘못된 경로 정보 정리
RMAN> CROSSCHECK ARCHIVELOG ALL;
RMAN> DELETE EXPIRED ARCHIVELOG ALL;

Control File에 등록된 아카이브 로그 정보를 갱신합니다.

-- 아카이브 로그 파일을 새 위치로 이동 후 수동 카탈로그 등록
RMAN> CATALOG ARCHIVELOG '/new/path/arch_1_12345_123456789.arc';

-- 여러 파일 일괄 등록
RMAN> CATALOG START WITH '/new/archive/path/' NOPROMPT;

원인 3: Data Guard 환경에서의 Gap 복구

-- Primary DB에서 아카이브 로그 GAP 확인
SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE#
FROM V$ARCHIVE_GAP;

-- Standby DB에서 수신된 아카이브 로그 확인
SELECT SEQUENCE#, APPLIED, REGISTRAR, NEXT_TIME
FROM V$ARCHIVED_LOG
WHERE STANDBY_DEST = 'YES'
ORDER BY SEQUENCE# DESC;

-- FAL 서버 설정 확인
SHOW PARAMETER FAL_SERVER;
SHOW PARAMETER FAL_CLIENT;

-- FAL 서버 수동 설정 (Standby DB에서 실행)
ALTER SYSTEM SET FAL_SERVER = 'PRIMARY_DB' SCOPE=BOTH;
ALTER SYSTEM SET FAL_CLIENT = 'STANDBY_DB' SCOPE=BOTH;

-- Redo Apply 재시작
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

Primary에서 수동으로 아카이브 로그를 Standby로 복사한 후 등록합니다.

-- Standby DB에서 누락된 아카이브 로그 수동 등록
RMAN> CATALOG START WITH '/standby/archive/path/' NOPROMPT;

-- Standby에서 Recovery 재개
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;

예방 방법

1. RMAN을 이용한 아카이브 로그 자동 관리 및 백업 정책 수립

아카이브 로그는 반드시 RMAN을 통해 백업 및 삭제 관리를 해야 하며, OS 명령어로 직접 삭제하는 행위는 절대 금물입니다. 아래와 같이 RMAN 보존 정책과 정기적인 백업 스크립트를 설정하여 아카이브 로그가 백업된 후 자동으로 삭제되도록 구성하면 디스크 공간 문제와 ORA-00308 에러를 동시에 예방할 수 있습니다.

-- RMAN 보존 정책 설정 (복구 윈도우 기준)
RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;

-- 아카이브 로그 백업 후 자동 삭제 설정
RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 1 TIMES TO DISK;

-- 정기 백업 및 아카이브 정리 스크립트 (cron 등록 권장)
RMAN> BACKUP ARCHIVELOG ALL DELETE INPUT;
RMAN> DELETE NOPROMPT OBSOLETE;
RMAN> CROSSCHECK ARCHIVELOG ALL;
RMAN> DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;

2. 아카이브 로그 디렉토리 모니터링 자동화

아카이브 로그 디렉토리의 사용량을 주기적으로 모니터링하고, 임계치(예: 80%) 초과 시 자동으로 알림을 발송하는 체계를 구축해야 합니다. 또한 Data Guard 환경에서는 아래 쿼리를 활용한 GAP 모니터링 스크립트를 스케줄러에 등록하여 실시간으로 이상 상황을 감지하도록 구성하는 것이 중요합니다.

-- 아카이브 로그 디스크 사용량 모니터링
SELECT DEST_ID,
       DEST_NAME,
       SPACE_LIMIT / 1024 / 1024 / 1024 AS LIMIT_GB,
       SPACE_USED  / 1024 / 1024 / 1024 AS USED_GB,
       ROUND((SPACE_USED / NULLIF(SPACE_LIMIT,0)) * 100, 2) AS USE_PCT
FROM V$RECOVERY_FILE_DEST;

-- Data Guard GAP 자동 모니터링 (DBLink 활용)
SELECT * FROM V$ARCHIVE_GAP;

-- 아카이브 로그 생성 추이 확인 (용량 계획에 활용)
SELECT TRUNC(COMPLETION_TIME, 'DD') AS LOG_DATE,
       COUNT(*) AS LOG_COUNT,
       ROUND(SUM(BLOCKS * BLOCK_SIZE) / 1024 / 1024 / 1024, 2) AS TOTAL_GB
FROM V$ARCHIVED_LOG
WHERE COMPLETION_TIME > SYSDATE - 30
GROUP BY TRUNC(COMPLETION_TIME, 'DD')
ORDER BY 1;

관련 에러

  • ORA-00279: 복구에 필요한 아카이브 로그 파일을 요청하는 에러로, ORA-00308과 함께 자주 발생합니다.
  • ORA-00280: 아카이브 로그의 Sequence 번호와 Thread 정보를 보여주며, ORA-00308 직전에 출력되는 경우가 많습니다.
  • ORA-01547: RECOVER DATABASE 실패 시 발생하며, ORA-00308이 복구 작업을 중단시킨 결과로 이어질 수 있습니다.
  • ORA-19755 / ORA-19756: RMAN 백업 중 아카이브 로그 파일 접근 실패 시 발생하며, 내부적으로 ORA-00308과 유사한 원인을 공유합니다.
  • ORA-16055 / ORA-16014: Data Guard 환경에서 아카이브 로그 전송 실패와 관련된 에러로, ORA-00308로 이어지는 선행 에러입니다.

DBMS 에러 코드 시리즈

주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.

본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.

댓글 남기기