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

ORA-00203
2026년 10월 25일 | DBMS Error 가이드

이 글에서 다루는 내용

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

ORA-00203 using the wrong control files 는?

ORA-00203 에러는 Oracle 데이터베이스 인스턴스가 시작될 때, 현재 사용 중인 컨트롤 파일이 데이터베이스와 일치하지 않는 잘못된 컨트롤 파일을 참조하고 있을 때 발생합니다. 컨트롤 파일은 데이터베이스의 물리적 구조(데이터 파일, 리두 로그 파일 위치 등)와 SCN(System Change Number) 정보를 담고 있는 핵심 파일로, 이 파일이 잘못 지정되면 데이터베이스는 정상적으로 마운트되거나 오픈될 수 없습니다. 주로 데이터베이스 복구 작업, 컨트롤 파일 재생성, 또는 잘못된 파라미터 파일(init.ora / spfile) 설정으로 인해 발생하며, DBA가 즉시 원인을 파악하고 조치해야 하는 심각한 에러입니다.


주요 발생 원인

1. 잘못된 CONTROL_FILES 파라미터 설정

가장 흔한 원인으로, init.ora 또는 spfile에 지정된 CONTROL_FILES 파라미터가 실제 존재하지 않거나 다른 데이터베이스에 속한 컨트롤 파일을 가리키는 경우입니다. 예를 들어, 데이터베이스를 복제하거나 이전(Migration)한 후 파라미터 파일을 업데이트하지 않으면 이 에러가 발생합니다. 이전 환경의 컨트롤 파일 경로가 그대로 남아 있으면, Oracle은 잘못된 컨트롤 파일을 읽으려 시도하고 ORA-00203을 반환합니다.

2. 컨트롤 파일 복사/복구 과정에서의 불일치

데이터베이스 복구(Recovery) 또는 RMAN 백업에서 복원(Restore) 후, 컨트롤 파일이 다른 데이터베이스 인스턴스나 다른 시점의 것으로 교체된 경우입니다. 컨트롤 파일에는 데이터베이스의 고유 식별자(DBID)와 SCN 정보가 포함되어 있어, 현재 데이터베이스 상태와 맞지 않는 컨트롤 파일을 사용하면 인스턴스는 이를 거부합니다. 이 경우 alert log에서 상세한 DBID 불일치 메시지를 함께 확인할 수 있습니다.

3. 멀티플렉싱된 컨트롤 파일 중 일부 손상 또는 누락

Oracle은 안전성을 위해 컨트롤 파일을 여러 경로에 다중화(Multiplexing)하여 관리하는 것을 권장합니다. 그런데 일부 컨트롤 파일이 삭제되거나 손상된 상태에서 파라미터 파일이 여전히 손상된 경로를 참조하고 있다면, 데이터베이스 시작 시 ORA-00203이 발생할 수 있습니다. 특히 OS 레벨의 파일 시스템 장애나 실수로 인한 파일 삭제 후 이 상황이 자주 발생합니다.


해결 방법

원인 1 해결: CONTROL_FILES 파라미터 수정

먼저 현재 설정된 컨트롤 파일 경로를 확인합니다.

-- NOMOUNT 상태에서 현재 파라미터 확인
STARTUP NOMOUNT;

SHOW PARAMETER control_files;

-- 또는 spfile 내용 확인 (OS에서 strings 명령어 사용 가능)
-- ALTER SYSTEM SET control_files 값 확인
SELECT name, value FROM v$parameter WHERE name = 'control_files';

파라미터가 잘못된 경우, PFILE을 직접 수정하거나 SPFILE을 통해 변경합니다.

-- PFILE을 이용한 수정 (init.ora 파일을 직접 편집)
-- control_files = ('/u01/oradata/ORCL/control01.ctl',
--                  '/u02/oradata/ORCL/control02.ctl')

-- SPFILE에서 직접 수정 (NOMOUNT 상태에서)
ALTER SYSTEM SET control_files =
  '/u01/oradata/ORCL/control01.ctl',
  '/u02/oradata/ORCL/control02.ctl'
  SCOPE=SPFILE;

-- 변경 후 재시작
SHUTDOWN ABORT;
STARTUP;

원인 2 해결: RMAN을 이용한 컨트롤 파일 복원

-- RMAN을 통한 컨트롤 파일 복구
RMAN TARGET /

-- 백업에서 컨트롤 파일 복원
RESTORE CONTROLFILE FROM AUTOBACKUP;

-- 또는 특정 백업 세트에서 복원
RESTORE CONTROLFILE FROM '/backup/rman/cf_backup.bkp';

-- 복원 후 마운트
ALTER DATABASE MOUNT;

-- 데이터베이스 복구
RECOVER DATABASE;

-- RESETLOGS로 오픈
ALTER DATABASE OPEN RESETLOGS;

원인 3 해결: 정상 컨트롤 파일로 복사 후 파라미터 수정

-- 1단계: 정상적인 컨트롤 파일 확인 (OS 레벨)
-- ls -lh /u01/oradata/ORCL/control01.ctl

-- 2단계: 정상 컨트롤 파일을 손상된 경로로 복사 (OS 명령)
-- cp /u01/oradata/ORCL/control01.ctl /u02/oradata/ORCL/control02.ctl

-- 3단계: DB 재시작
STARTUP NOMOUNT;

ALTER SYSTEM SET control_files =
  '/u01/oradata/ORCL/control01.ctl',
  '/u02/oradata/ORCL/control02.ctl'
  SCOPE=SPFILE;

SHUTDOWN IMMEDIATE;
STARTUP;

-- 4단계: 컨트롤 파일 상태 최종 확인
SELECT status, name FROM v$controlfile;

컨트롤 파일 재생성 (최후 수단)

-- 컨트롤 파일 재생성 스크립트 생성
-- (기존 DB가 OPEN 상태일 때 미리 생성해 두는 것이 좋음)
ALTER DATABASE BACKUP CONTROLFILE TO TRACE
  AS '/tmp/recreate_controlfile.sql' REUSE NORESETLOGS;

-- 생성된 스크립트 내용 예시 (수정 후 실행)
-- STARTUP NOMOUNT;
-- CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS ARCHIVELOG
--   MAXLOGFILES 16
--   MAXLOGMEMBERS 3
--   MAXDATAFILES 100
--   MAXINSTANCES 8
--   MAXLOGHISTORY 292
-- LOGFILE
--   GROUP 1 '/u01/oradata/ORCL/redo01.log' SIZE 200M BLOCKSIZE 512,
--   GROUP 2 '/u01/oradata/ORCL/redo02.log' SIZE 200M BLOCKSIZE 512,
--   GROUP 3 '/u01/oradata/ORCL/redo03.log' SIZE 200M BLOCKSIZE 512
-- DATAFILE
--   '/u01/oradata/ORCL/system01.dbf',
--   '/u01/oradata/ORCL/sysaux01.dbf',
--   '/u01/oradata/ORCL/undotbs01.dbf',
--   '/u01/oradata/ORCL/users01.dbf'
-- CHARACTER SET AL32UTF8;

예방 방법

1. 컨트롤 파일 다중화 및 정기적 백업 자동화

컨트롤 파일은 반드시 서로 다른 디스크(또는 ASM 디스크 그룹)에 3개 이상 다중화하여 관리해야 합니다. 또한 RMAN을 이용한 자동 백업 정책을 수립하여 컨트롤 파일이 항상 최신 상태로 백업되도록 설정하세요.

-- RMAN 자동 백업 설정 (컨트롤 파일 포함)
RMAN TARGET /

CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT
  FOR DEVICE TYPE DISK TO '/backup/rman/cf_%F';

-- 현재 컨트롤 파일 다중화 상태 확인
SELECT * FROM v$controlfile;

-- 컨트롤 파일을 추가 경로에 다중화하는 방법
-- 1. spfile에 경로 추가 후 DB 재시작
-- 2. 기존 컨트롤 파일을 새 경로에 OS 복사
-- 3. CONTROL_FILES 파라미터 업데이트
ALTER SYSTEM SET control_files =
  '/u01/oradata/ORCL/control01.ctl',
  '/u02/oradata/ORCL/control02.ctl',
  '/u03/oradata/ORCL/control03.ctl'
  SCOPE=SPFILE;

2. 변경 관리(Change Management) 프로세스 준수

데이터베이스 마이그레이션, 클론(Clone) 작업, 복구 작업 후에는 반드시 파라미터 파일(init.ora 또는 spfile)의 CONTROL_FILES 경로를 검증하는 체크리스트를 운영 표준에 포함시켜야 합니다. 작업 전후로 v$controlfile, v$parameter 뷰를 통해 컨트롤 파일 경로가 올바른지 이중 확인하는 습관을 가지세요.

-- 작업 전후 컨트롤 파일 상태 점검 스크립트
SELECT cf.status, cf.name, cf.block_size, cf.file_size_blks
FROM v$controlfile cf;

-- 데이터베이스 정보와 컨트롤 파일의 DBID 일치 확인
SELECT dbid, name, db_unique_name, open_mode
FROM v$database;

-- Alert log 경로 확인 (에러 발생 시 즉시 확인)
SELECT value FROM v$diag_info WHERE name = 'Diag Trace';

관련 에러

  • ORA-00202: control file: 'string' — 특정 컨트롤 파일을 열거나 잠그는 데 실패했을 때 발생하며, ORA-00203과 함께 연쇄적으로 나타나는 경우가 많습니다.
  • ORA-00205: error in identifying control file, check alert log for more info — 컨트롤 파일 식별 자체에 실패할 때 발생하며, ORA-00203의 상위 개념 에러로 볼 수 있습니다.
  • ORA-00210: cannot open the specified control file — 지정된 컨트롤 파일을 물리적으로 열 수 없을 때 발생합니다.
  • ORA-00230: operation disallowed: snapshot control file enqueue unavailable — 컨트롤 파일 관련 작업 충돌 시 발생합니다.
  • ORA-01503: CREATE CONTROLFILE failed — 컨트롤 파일 재생성 실패 시 발생하며, ORA-00203 해결 과정에서 만날 수 있습니다.

DBMS 에러 코드 시리즈

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

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

댓글 남기기