2026년 07월 09일 | DBMS Error 가이드
이 글에서 다루는 내용
ORA-01190 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
ORA-01190 control file or data file is from before the last RESETLOGS 는?
ORA-01190 에러는 Oracle 데이터베이스 복구 과정에서 컨트롤 파일 또는 데이터 파일의 SCN(System Change Number)이 마지막 RESETLOGS 작업 이전의 것일 때 발생하는 에러입니다. 즉, 복구에 사용 중인 파일이 가장 최근의 RESETLOGS 시점과 일치하지 않아 데이터베이스가 일관성 없는 상태에 놓일 위험이 있음을 Oracle이 감지한 것입니다. 이 에러는 주로 불완전 복구(Incomplete Recovery) 또는 PITR(Point-In-Time Recovery) 수행 시, 혹은 잘못된 백업본을 사용하여 복구를 시도할 때 빈번하게 나타납니다.
주요 발생 원인
- 이전 RESETLOGS 이전 백업본으로 복구 시도
가장 흔한 원인으로, 마지막 RESETLOGS 이전에 생성된 오래된 백업본(컨트롤 파일 또는 데이터 파일)을 현재 데이터베이스 복구에 사용할 때 발생합니다. RESETLOGS는 새로운 인카네이션(Incarnation)을 시작하는 작업이므로, 이전 인카네이션의 파일을 현재 인카네이션에 적용하려 하면 Oracle이 SCN 불일치를 감지하여 ORA-01190을 발생시킵니다. 특히 RMAN 없이 수동으로 백업/복구를 관리하던 환경에서 자주 나타납니다.
- 컨트롤 파일과 데이터 파일 간의 인카네이션 불일치
데이터베이스에는 여러 번의 RESETLOGS 이력이 존재할 수 있으며, 컨트롤 파일과 데이터 파일이 서로 다른 인카네이션에 속할 경우 이 에러가 발생합니다. 예를 들어, 새로운 컨트롤 파일을 생성(CREATE CONTROLFILE)하거나 백업 컨트롤 파일을 복원한 후, 해당 컨트롤 파일이 인식하는 인카네이션보다 오래된 데이터 파일을 복구에 사용하려 할 때 충돌이 생깁니다. 이 경우 V$DATABASE_INCARNATION 뷰를 통해 인카네이션 정보를 반드시 확인해야 합니다.
- RMAN 복구 시 잘못된 UNTIL 절 또는 백업 세트 선택
RMAN을 이용한 복구 시 UNTIL SCN, UNTIL TIME, UNTIL SEQUENCE 등의 옵션을 잘못 지정하거나, RESETLOGS 이전 시점의 백업 세트를 선택했을 때 발생할 수 있습니다. 특히 여러 인카네이션이 존재하는 환경에서 RMAN 카탈로그 없이 복구를 시도하면, RMAN이 올바른 백업 세트를 자동으로 선택하지 못해 이 에러가 유발되기도 합니다. RMAN 복구 스크립트 작성 시 반드시 목표 인카네이션과 SCN을 명확히 지정해야 합니다.
해결 방법
원인 1 해결: 올바른 인카네이션 백업본 확인 및 사용
먼저 현재 데이터베이스의 인카네이션 정보를 확인합니다.
-- 데이터베이스 인카네이션 목록 확인
SELECT incarnation#, resetlogs_change#, resetlogs_time, status
FROM v$database_incarnation
ORDER BY incarnation#;
-- 현재 컨트롤 파일의 RESETLOGS SCN 확인
SELECT resetlogs_change#, resetlogs_time
FROM v$database;
-- 데이터 파일별 RESETLOGS 정보 확인
SELECT file#, name, resetlogs_change#, creation_change#
FROM v$datafile
ORDER BY file#;
RMAN을 사용하여 올바른 인카네이션의 백업본을 명시적으로 선택합니다.
-- RMAN에서 인카네이션 목록 확인
RMAN> LIST INCARNATION OF DATABASE;
-- 특정 인카네이션으로 복구 대상 설정
RMAN> RESET DATABASE TO INCARNATION 3;
-- 해당 인카네이션의 백업으로 복구
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;
원인 2 해결: 컨트롤 파일 재생성 또는 올바른 백업 컨트롤 파일 사용
-- 백업 컨트롤 파일을 이용한 복구 시 (MOUNT 상태에서)
STARTUP MOUNT;
-- 트레이스 파일로부터 컨트롤 파일 재생성 스크립트 확인
ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS '/tmp/cf_recreate.sql';
-- 컨트롤 파일 재생성 (RESETLOGS 옵션 포함)
-- cf_recreate.sql 파일을 열어 RESETLOGS 버전의 스크립트 실행
-- 아래는 예시입니다.
CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/u01/app/oracle/oradata/ORCL/redo01.log' SIZE 200M BLOCKSIZE 512,
GROUP 2 '/u01/app/oracle/oradata/ORCL/redo02.log' SIZE 200M BLOCKSIZE 512,
GROUP 3 '/u01/app/oracle/oradata/ORCL/redo03.log' SIZE 200M BLOCKSIZE 512
DATAFILE
'/u01/app/oracle/oradata/ORCL/system01.dbf',
'/u01/app/oracle/oradata/ORCL/sysaux01.dbf',
'/u01/app/oracle/oradata/ORCL/undotbs01.dbf',
'/u01/app/oracle/oradata/ORCL/users01.dbf'
CHARACTER SET AL32UTF8;
-- 복구 후 RESETLOGS로 오픈
RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL;
ALTER DATABASE OPEN RESETLOGS;
원인 3 해결: RMAN에서 올바른 복구 시점 지정
-- RMAN 카탈로그 연결 후 백업 목록 조회
RMAN> CONNECT CATALOG rman_catalog/password@catdb;
RMAN> LIST BACKUP OF DATABASE;
RMAN> LIST BACKUP OF CONTROLFILE;
-- 특정 SCN 시점까지 복구 (올바른 인카네이션 기반)
RMAN> RUN {
SET UNTIL SCN 1234567;
RESTORE DATABASE;
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;
}
-- 특정 시간 기준 복구
RMAN> RUN {
SET UNTIL TIME "TO_DATE('2024-01-15 10:00:00', 'YYYY-MM-DD HH24:MI:SS')";
RESTORE DATABASE;
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;
}
-- 복구 후 상태 확인
SELECT status, checkpoint_change#, resetlogs_change#
FROM v$datafile_header
ORDER BY file#;
예방 방법
- RMAN 카탈로그 사용 및 정기적인 전체 백업 정책 수립
RESETLOGS 수행 후에는 반드시 즉시 전체 데이터베이스 백업을 수행하여 새로운 인카네이션 기반의 백업본을 확보해야 합니다. RMAN 카탈로그를 사용하면 여러 인카네이션에 걸친 백업 이력을 체계적으로 관리할 수 있으며, 복구 시 자동으로 올바른 백업 세트를 선택하는 데 큰 도움이 됩니다. 다음과 같이 RESETLOGS 직후 백업을 자동화하는 스크립트를 운영 절차에 포함시키십시오.
“`sql
— RESETLOGS 후 즉시 전체 백업 수행 (RMAN)
RMAN> BACKUP DATABASE PLUS ARCHIVELOG TAG ‘POST_RESETLOGS_BACKUP’;
RMAN> BACKUP CURRENT CONTROLFILE TAG ‘POST_RESETLOGS_CONTROLFILE’;
“`
- 복구 작업 전 인카네이션 및 SCN 검증 절차 의무화
복구 작업을 시작하기 전에 반드시 컨트롤 파일, 데이터 파일, 아카이브 로그의 인카네이션 및 SCN 정보를 교차 검증하는 체크리스트를 운영 절차에 포함시켜야 합니다. 특히 운영 환경에서의 복구 작업은 테스트 환경에서 먼저 시뮬레이션하고, 검증된 절차서에 따라 진행하는 것이 필수적입니다.
“`sql
— 복구 전 사전 검증 쿼리
SELECT ‘DATABASE’ type, resetlogs_change# scn, resetlogs_time
FROM v$database
UNION ALL
SELECT ‘CONTROLFILE’, controlfile_sequence#, null
FROM v$database;
— 데이터 파일 헤더 정보 일괄 확인
SELECT file#, status, checkpoint_change#, resetlogs_change#, name
FROM v$datafile_header
ORDER BY file#;
“`
관련 에러
- ORA-01194: 데이터 파일이 추가 복구가 필요한 상태일 때 발생하며, ORA-01190과 함께 나타나는 경우가 많습니다.
- ORA-01152: 파일이 이전 데이터베이스 인카네이션에서 복원되어 복구가 필요할 때 발생합니다.
- ORA-01110: 특정 데이터 파일에 문제가 있을 때 파일 번호와 경로를 알려주는 에러로, ORA-01190 발생 시 함께 출력되어 어느 파일이 문제인지 식별하는 데 사용됩니다.
- ORA-01547: RECOVER 명령 수행 시 미디어 복구가 필요하지 않은 상황에서 호출될 때 발생하며, 잘못된 복구 절차와 연관됩니다.
- RMAN-06004 / RMAN-06025: RMAN 복구 시 아카이브 로그나 백업 세트를 찾지 못할 때 발생하며, ORA-01190과 연계되어 나타날 수 있습니다.
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.