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

ORA-01547
2026년 07월 23일 | DBMS Error 가이드

이 글에서 다루는 내용

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

ORA-01547 warning: RECOVER succeeded but OPEN RESETLOGS would get error 는?

ORA-01547은 Oracle 데이터베이스 복구 과정에서 발생하는 경고성 에러로, RECOVER 명령은 성공적으로 완료되었지만 이후 ALTER DATABASE OPEN RESETLOGS 명령을 실행하면 에러가 발생할 것임을 사전에 경고하는 메시지입니다. 즉, 복구 자체는 완료되었으나 데이터베이스를 정상적으로 오픈할 수 없는 상태임을 알려주는 중요한 신호입니다. 이 에러는 주로 불완전 복구(Incomplete Recovery) 시나리오 또는 컨트롤 파일, 리두 로그 파일에 문제가 있을 때 나타나며, 즉각적인 원인 파악과 조치가 필요합니다.


주요 발생 원인

1. 온라인 리두 로그 파일(Online Redo Log)의 손상 또는 누락

가장 빈번한 원인 중 하나로, 현재 활성화된 온라인 리두 로그 파일이 손상되거나 삭제된 경우 복구 후 RESETLOGS 오픈이 불가능해집니다. Oracle은 리두 로그 없이 데이터베이스를 정상 오픈 상태로 전환할 수 없기 때문에, 복구가 완료되어도 마지막 단계에서 이 경고가 발생합니다. 특히 미러링(Multiplexing)이 설정되지 않은 환경에서 디스크 장애가 발생하면 이 상황이 자주 발생합니다.

2. 컨트롤 파일과 데이터 파일 간의 SCN 불일치

컨트롤 파일이 데이터 파일보다 이전 시점의 것이거나 백업 컨트롤 파일을 사용하는 경우, SCN(System Change Number)이 일치하지 않아 RESETLOGS 오픈에 실패할 수 있습니다. 이 상황은 RECOVER DATABASE USING BACKUP CONTROLFILE 명령을 사용할 때 자주 발생하며, 컨트롤 파일의 체크포인트 SCN과 데이터 파일의 SCN을 맞춰주는 추가 복구 작업이 필요합니다. 컨트롤 파일이 재생성(RESETLOGS 이후)된 이후 백업본을 복원했을 때도 동일한 문제가 나타납니다.

3. 불완전 복구(Incomplete Recovery) 후 아카이브 로그 체인 단절

특정 시점 복구(Point-In-Time Recovery) 또는 SCN 기반 복구 중 아카이브 로그 파일이 연속적으로 존재하지 않거나 일부 아카이브 로그가 누락된 경우에 발생합니다. Oracle 복구 엔진은 체인이 끊어진 아카이브 로그를 적용할 수 없으며, 이 상태에서 RESETLOGS를 시도하면 에러가 발생합니다. 아카이브 로그의 sequence number 연속성이 깨지면 복구 완료 조건이 충족되지 않아 이 경고가 출력됩니다.


해결 방법

원인 1: 온라인 리두 로그 손상/누락 해결

온라인 리두 로그 상태를 먼저 확인하고, 필요 시 강제로 로그를 초기화합니다.

-- 리두 로그 그룹 상태 확인
SELECT GROUP#, STATUS, ARCHIVED, MEMBERS
FROM V$LOG;

-- 리두 로그 멤버 경로 확인
SELECT GROUP#, MEMBER, STATUS
FROM V$LOGFILE;

-- 현재 활성 리두 로그가 손상된 경우 아래 명령으로 초기화
-- (주의: 데이터 손실 가능성 있음, 반드시 DBA 검토 후 실행)
ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 1;

-- 아카이브 완료된 로그 초기화 시
ALTER DATABASE CLEAR LOGFILE GROUP 2;

-- 이후 RESETLOGS로 오픈 시도
ALTER DATABASE OPEN RESETLOGS;

원인 2: 백업 컨트롤 파일 사용 시 SCN 불일치 해결

-- 컨트롤 파일과 데이터 파일의 SCN 확인
SELECT NAME, CHECKPOINT_CHANGE#, LAST_CHANGE#
FROM V$DATAFILE;

SELECT CHECKPOINT_CHANGE#
FROM V$DATABASE;

-- 백업 컨트롤 파일을 사용한 복구 명령
RECOVER DATABASE USING BACKUP CONTROLFILE;

-- 아카이브 로그 경로 지정 및 자동 적용
RECOVER DATABASE USING BACKUP CONTROLFILE
  UNTIL CANCEL;

-- 프롬프트에서 아카이브 로그 경로 지정 또는 AUTO 입력
-- AUTO 입력 시 Oracle이 자동으로 로그 경로 탐색

-- 복구 완료 후 RESETLOGS 오픈
ALTER DATABASE OPEN RESETLOGS;

원인 3: 아카이브 로그 체인 단절 해결

-- 아카이브 로그 목록 및 sequence 연속성 확인
SELECT SEQUENCE#, FIRST_CHANGE#, NEXT_CHANGE#,
       ARCHIVED, STATUS, NAME
FROM V$ARCHIVED_LOG
ORDER BY SEQUENCE#;

-- 특정 SCN 시점까지 복구 (아카이브 로그가 존재하는 마지막 시점)
RECOVER DATABASE UNTIL CHANGE 1234567;

-- 특정 시간 기준 복구
RECOVER DATABASE UNTIL TIME '2024-01-15 14:00:00';

-- CANCEL 기반 복구 후 강제 오픈
RECOVER DATABASE UNTIL CANCEL;
-- 누락된 아카이브 로그 이전까지 적용 후 CANCEL 입력

-- 복구 후 RESETLOGS 오픈
ALTER DATABASE OPEN RESETLOGS;

RMAN을 활용한 복구 접근법

-- RMAN 환경에서의 불완전 복구
RMAN> STARTUP MOUNT;
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;

-- 특정 시점까지 복구
RMAN> RUN {
  SET UNTIL TIME "TO_DATE('2024-01-15 14:00:00', 'YYYY-MM-DD HH24:MI:SS')";
  RESTORE DATABASE;
  RECOVER DATABASE;
  ALTER DATABASE OPEN RESETLOGS;
}

-- 복구 후 상태 확인
SELECT STATUS, CHECKPOINT_CHANGE#, RESETLOGS_CHANGE#
FROM V$DATABASE;

예방 방법

1. 온라인 리두 로그 다중화(Multiplexing) 및 정기적인 컨트롤 파일 백업

온라인 리두 로그는 최소 2개 이상의 멤버로 다중화하고, 서로 다른 물리적 디스크에 배치하여 단일 장애점(Single Point of Failure)을 제거해야 합니다. 또한 컨트롤 파일은 ALTER DATABASE BACKUP CONTROLFILE TO TRACEALTER DATABASE BACKUP CONTROLFILE TO '경로' 명령을 통해 주요 변경 작업(테이블스페이스 추가, 리두 로그 변경 등) 이후 반드시 백업해야 합니다.

-- 리두 로그 다중화 예시
ALTER DATABASE ADD LOGFILE MEMBER
  '/disk2/redo/redo01b.log' TO GROUP 1,
  '/disk2/redo/redo02b.log' TO GROUP 2,
  '/disk2/redo/redo03b.log' TO GROUP 3;

-- 컨트롤 파일 백업
ALTER DATABASE BACKUP CONTROLFILE TO '/backup/control_backup.ctl';
ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS '/backup/control_trace.sql';

2. RMAN을 활용한 주기적인 전체 백업 및 아카이브 로그 관리 자동화

RMAN을 사용하여 전체 백업(Full Backup)과 아카이브 로그 백업을 자동화하고, 아카이브 로그의 보존 기간(Retention Period)을 업무 복구 목표(RTO/RPO)에 맞게 설정해야 합니다. 아카이브 로그가 누락되면 복구 체인이 끊어지므로, 백업 이후 반드시 CROSSCHECKLIST FAILURE 명령으로 백업 유효성을 검증하는 습관을 갖는 것이 중요합니다.

-- RMAN 정기 백업 스크립트 예시
RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
RMAN> CROSSCHECK BACKUP;
RMAN> DELETE OBSOLETE;

관련 에러

  • ORA-00283: Recovery session cancelled due to errors — 복구 세션이 에러로 인해 취소될 때 ORA-01547과 함께 발생하는 경우가 많습니다.
  • ORA-01194: file N needs more recovery to be consistent — 데이터 파일이 완전히 복구되지 않은 상태에서 오픈을 시도할 때 발생하며, ORA-01547의 후속 에러로 자주 나타납니다.
  • ORA-01152: file N was not restored from a sufficiently old backup — 복원된 백업이 너무 최신 시점이어서 필요한 아카이브 로그를 적용할 수 없을 때 발생합니다.
  • ORA-00600: internal error code — ORA-01547 발생 시 내부 에러로 함께 기록되는 경우가 있으며, alert.log와 trace 파일을 통해 상세 원인을 추적해야 합니다.

DBMS 에러 코드 시리즈

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

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

댓글 남기기