2026년 06월 05일 | DBMS Error 가이드
이 글에서 다루는 내용
ORA-00283 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
ORA-00283 recovery session canceled due to errors 는?
ORA-00283 에러는 Oracle 데이터베이스의 복구(Recovery) 세션이 진행되는 도중 내부적으로 오류가 발생하여 복구 작업이 강제 중단될 때 나타나는 에러입니다. 주로 데이터베이스를 MOUNT 상태에서 OPEN 상태로 전환하거나, 불완전 복구(Incomplete Recovery) 또는 완전 복구(Complete Recovery)를 수행하는 과정에서 발생합니다. 이 에러는 단독으로 발생하기보다는 ORA-00283 이전에 출력되는 다른 에러 메시지(예: ORA-00600, ORA-01547, ORA-01194 등)와 함께 나타나는 경우가 많으므로, 반드시 Alert Log와 트레이스 파일을 함께 확인해야 합니다.
주요 발생 원인
- 아카이브 로그 파일 누락 또는 손상
복구 과정에서 필요한 아카이브 로그(Archive Log) 파일이 특정 경로에 존재하지 않거나, 파일 자체가 손상된 경우 복구 세션이 중단됩니다. Oracle은 복구를 위해 순차적으로 아카이브 로그를 적용해야 하는데, 중간에 하나라도 빠지면 복구 체인이 끊어지면서 ORA-00283이 발생합니다. 이 경우 Alert Log에는 ORA-00283과 함께 ORA-00308(cannot open archived log) 또는 ORA-27037(unable to obtain file status) 에러가 함께 출력됩니다.
- 온라인 리두 로그 파일(Online Redo Log) 손상 또는 미적용
온라인 리두 로그 파일이 손상되었거나, 현재 사용 중인 리두 로그 그룹(Current Log Group)이 유실된 경우 OPEN RESETLOGS 없이는 데이터베이스를 열 수 없습니다. 특히 미디어 장애(Disk Failure) 이후 복구를 시도할 때, 리두 로그에 커밋되지 않은 변경사항이 남아 있어 복구 세션이 실패하는 상황이 자주 발생합니다. 이 경우 ORA-01194(file 1 needs more recovery to be consistent) 에러와 함께 ORA-00283이 나타납니다.
- 데이터 파일 헤더(Datafile Header) 불일치 또는 손상
데이터 파일의 헤더 정보가 컨트롤 파일(Control File)의 정보와 일치하지 않거나, 데이터 파일 자체가 물리적으로 손상된 경우 복구 세션이 취소됩니다. 백업본으로부터 데이터 파일을 복원한 후 충분한 아카이브 로그가 적용되지 않았거나, 잘못된 시점의 백업을 복원했을 때 이 문제가 발생합니다. Alert Log에 ORA-01110(data file N: ‘filename’) 또는 ORA-01122(database file N failed verification check) 에러가 함께 출력되는 것이 특징입니다.
해결 방법
원인 1: 아카이브 로그 파일 누락 시 해결
먼저 어떤 아카이브 로그 시퀀스가 필요한지 확인합니다.
-- Alert Log 확인 후 누락된 시퀀스 조회
SELECT SEQUENCE#, NAME, APPLIED
FROM V$ARCHIVED_LOG
WHERE APPLIED = 'NO'
ORDER BY SEQUENCE#;
-- 아카이브 로그 경로 확인
SHOW PARAMETER LOG_ARCHIVE_DEST;
-- 수동으로 아카이브 로그 위치 지정 후 복구 재시도
RECOVER DATABASE UNTIL CANCEL;
-- 프롬프트에서 누락된 로그 경로 직접 입력
-- AUTO 또는 CANCEL 입력 가능
누락된 아카이브 로그를 복구할 수 없다면, 불완전 복구(Incomplete Recovery)로 전환하여 해당 시퀀스 이전 시점까지 복구합니다.
-- 불완전 복구: 특정 SCN 기준
RECOVER DATABASE UNTIL SCN 123456;
-- 불완전 복구: 특정 시각 기준
RECOVER DATABASE UNTIL TIME '2024-01-15 10:00:00';
-- 불완전 복구 후 RESETLOGS로 오픈
ALTER DATABASE OPEN RESETLOGS;
원인 2: 온라인 리두 로그 손상 시 해결
-- 현재 리두 로그 상태 확인
SELECT GROUP#, STATUS, ARCHIVED, MEMBERS
FROM V$LOG;
-- 리두 로그 멤버 경로 확인
SELECT GROUP#, MEMBER, STATUS
FROM V$LOGFILE;
-- 손상된 리두 로그 강제 클리어 (비현재 그룹의 경우)
ALTER DATABASE CLEAR LOGFILE GROUP 2;
-- 아카이브되지 않은 손상 로그 강제 클리어 (최후 수단)
ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 2;
-- 이후 데이터베이스 오픈 시도
-- 필요 시 불완전 복구 후 RESETLOGS
RECOVER DATABASE UNTIL CANCEL;
ALTER DATABASE OPEN RESETLOGS;
> ⚠️ 주의: CLEAR UNARCHIVED LOGFILE은 데이터 손실 가능성이 있으므로, 반드시 전체 백업이 없는 상황에서는 Oracle Support에 문의 후 진행하세요.
원인 3: 데이터 파일 헤더 불일치 시 해결
-- 데이터 파일 상태 확인
SELECT FILE#, NAME, STATUS, CHECKPOINT_CHANGE#
FROM V$DATAFILE;
-- 컨트롤 파일과 데이터 파일의 SCN 비교
SELECT CHECKPOINT_CHANGE# FROM V$DATABASE;
SELECT FILE#, CHECKPOINT_CHANGE#, LAST_CHANGE#
FROM V$DATAFILE_HEADER;
-- 특정 데이터 파일만 복구
RECOVER DATAFILE '/oradata/ORCL/users01.dbf';
-- 또는 테이블스페이스 단위 복구
RECOVER TABLESPACE users;
-- RMAN을 사용한 데이터 파일 복구
-- RMAN 접속 후
RMAN> RESTORE DATAFILE 4;
RMAN> RECOVER DATAFILE 4;
RMAN을 활용한 통합 복구 절차
-- RMAN 접속
rman target /
-- 복구 전 데이터베이스 상태 확인
RMAN> LIST BACKUP SUMMARY;
RMAN> CROSSCHECK BACKUP;
RMAN> DELETE EXPIRED BACKUP;
-- 데이터베이스 전체 복구
RMAN> STARTUP MOUNT;
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN RESETLOGS;
-- 특정 시점으로 복구 (PITR)
RMAN> RUN {
SET UNTIL TIME "TO_DATE('2024-01-15 09:00:00','YYYY-MM-DD HH24:MI:SS')";
RESTORE DATABASE;
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;
}
예방 방법
- 정기적인 아카이브 로그 백업 및 관리 자동화
ORA-00283의 주요 원인인 아카이브 로그 누락을 방지하기 위해, RMAN을 이용한 정기적인 아카이브 로그 백업 정책을 수립해야 합니다. 아카이브 로그는 빠르게 쌓이기 때문에, 아래와 같이 RMAN 스케줄을 구성하고 백업 후 오래된 아카이브 로그는 자동으로 삭제되도록 설정하는 것이 Best Practice입니다.
“`sql
— RMAN 아카이브 로그 백업 및 삭제 스크립트 예시
RMAN> BACKUP ARCHIVELOG ALL DELETE INPUT;
— 보존 정책 설정 (7일 이후 삭제)
RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 1 TIMES TO DISK;
RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
— 중복 아카이브 로그 목적지 설정 (이중화)
— init.ora 또는 spfile 파라미터
— LOG_ARCHIVE_DEST_1=’LOCATION=/arch1 MANDATORY’
— LOG_ARCHIVE_DEST_2=’LOCATION=/arch2 OPTIONAL’
“`
- 주기적인 복구 가능성 검증(Recoverability Test) 수행
백업이 존재하더라도 실제로 복구가 가능한지 주기적으로 검증하지 않으면, 실제 장애 상황에서 ORA-00283과 같은 에러를 만날 수 있습니다. 최소 분기 1회 이상 테스트 환경(Test DB)에서 전체 복구 시나리오를 수행하고, RMAN의 RESTORE VALIDATE 및 RECOVER VALIDATE 명령을 통해 백업 유효성을 정기적으로 확인해야 합니다.
“`sql
— 실제 복구 없이 백업 유효성 검증
RMAN> RESTORE DATABASE VALIDATE;
RMAN> RECOVER DATABASE VALIDATE;
— 특정 데이터 파일 검증
RMAN> RESTORE DATAFILE 1 VALIDATE;
— 아카이브 로그 검증
RMAN> RESTORE ARCHIVELOG ALL VALIDATE;
“`
관련 에러
- ORA-00308:
cannot open archived log 'filename'— 아카이브 로그 파일을 열 수 없을 때 발생하며, ORA-00283과 가장 빈번하게 함께 출력됩니다. - ORA-01547:
warning: RECOVER succeeded but OPEN RESETLOGS would get error below— 복구는 성공했으나 RESETLOGS 오픈 시 추가 에러가 예상될 때 나타납니다. - ORA-01194:
file N needs more recovery to be consistent— 데이터 파일이 아직 일관성 있는 상태에 도달하지 못했을 때 발생하며, ORA-00283의 직접적인 원인이 되기도 합니다. - ORA-01122:
database file N failed verification check— 데이터 파일 헤더 검증 실패 시 발생합니다. - ORA-00600: Oracle 내부 에러로, 복구 과정 중 예상치 못한 내부 오류가 발생하면 ORA-00283과 함께 출력될 수 있습니다. 이 경우 반드시 Oracle Support에 SR(Service Request)을 오픈해야 합니다.
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.