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

ORA-00215
2026년 06월 03일 | DBMS Error 가이드

이 글에서 다루는 내용

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

ORA-00215 must be at least one control file 는?

ORA-00215 에러는 Oracle 데이터베이스가 시작(STARTUP) 또는 마운트(MOUNT) 단계에서 컨트롤 파일을 단 하나도 찾지 못할 때 발생하는 치명적인 에러입니다. 컨트롤 파일은 데이터베이스의 물리적 구조(데이터 파일, 리두 로그 파일 위치, SCN 정보 등)를 담고 있는 핵심 바이너리 파일로, 이 파일 없이는 데이터베이스가 절대 기동될 수 없습니다. 주로 컨트롤 파일이 삭제되거나, 경로 설정이 잘못되었거나, 파일 시스템에 접근이 불가능할 때 이 에러가 발생합니다.


주요 발생 원인

1. SPFILE/PFILE의 CONTROL_FILES 파라미터 경로 오류

가장 흔한 원인으로, CONTROL_FILES 파라미터에 지정된 경로와 실제 컨트롤 파일이 존재하는 경로가 일치하지 않는 경우입니다. 서버 이전, 디렉터리 재구성, 또는 수동으로 파라미터를 잘못 수정했을 때 발생하며, 데이터베이스는 파라미터 파일에 명시된 경로에서만 컨트롤 파일을 찾으려 하기 때문에 경로가 하나라도 틀리면 이 에러가 발생할 수 있습니다.

2. 컨트롤 파일 물리적 삭제 또는 손상

운영자의 실수, 스토리지 장애, 또는 OS 레벨의 파일 시스템 오류로 인해 컨트롤 파일이 물리적으로 삭제되거나 손상된 경우입니다. Oracle은 보통 다중화(multiplexing)를 권장하여 여러 위치에 컨트롤 파일을 유지하지만, 다중화가 되어 있지 않은 환경에서 단일 컨트롤 파일이 손실되면 즉시 이 에러가 발생하며 데이터베이스 복구 절차가 필요합니다.

3. 파일 시스템 마운트 실패 또는 권한 문제

컨트롤 파일은 존재하지만 Oracle 프로세스(oracle OS user)가 해당 파일에 접근할 수 없는 경우입니다. NFS 마운트 해제, ASM 디스크 그룹 오프라인, 또는 파일 퍼미션 변경 등으로 인해 Oracle이 파일을 읽지 못할 때 이 에러가 발생하며, 파일이 물리적으로 존재하더라도 접근 권한이 없으면 “파일 없음”과 동일하게 취급됩니다.


해결 방법

원인 1 해결 – CONTROL_FILES 파라미터 경로 확인 및 수정

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

-- NOMOUNT 단계에서 파라미터 확인
STARTUP NOMOUNT;

-- 현재 CONTROL_FILES 파라미터 조회
SHOW PARAMETER CONTROL_FILES;

-- 또는 V$PARAMETER 뷰 사용
SELECT name, value
FROM v$parameter
WHERE name = 'control_files';

경로가 잘못된 경우 PFILE을 직접 편집하거나, SPFILE을 사용하는 경우 아래와 같이 수정합니다.

-- SPFILE에서 control_files 파라미터 수정 (NOMOUNT 상태에서 가능)
ALTER SYSTEM SET CONTROL_FILES =
  '/u01/app/oracle/oradata/ORCL/control01.ctl',
  '/u02/app/oracle/oradata/ORCL/control02.ctl'
SCOPE=SPFILE;

-- 수정 후 재시작
SHUTDOWN ABORT;
STARTUP;

PFILE(init.ora)을 직접 수정하는 경우:

-- PFILE 내용 예시 (OS 레벨에서 편집 후 아래 명령으로 기동)
-- control_files='/u01/app/oracle/oradata/ORCL/control01.ctl',
--               '/u02/app/oracle/oradata/ORCL/control02.ctl'

-- PFILE로 기동
STARTUP PFILE='/u01/app/oracle/admin/ORCL/pfile/init.ora';

원인 2 해결 – 컨트롤 파일 재생성 (RESETLOGS)

다중화된 컨트롤 파일 중 일부가 손상되었다면 정상 파일을 복사하여 복구합니다.

-- 다중화 컨트롤 파일 중 하나가 살아있는 경우
-- OS 명령어로 정상 파일 복사 (Oracle 종료 후 OS 레벨에서 수행)
-- $ cp /u01/app/oracle/oradata/ORCL/control01.ctl \
--      /u02/app/oracle/oradata/ORCL/control02.ctl

-- 모든 컨트롤 파일이 손실된 경우: RMAN을 활용한 복구
-- RMAN에 접속
-- RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;
-- 또는 특정 백업에서 복구
-- RMAN> RESTORE CONTROLFILE FROM '/backup/ctrl_ORCL_20240101.bkp';

-- 복구 후 데이터베이스 마운트
STARTUP MOUNT;

-- 미디어 복구 수행
RECOVER DATABASE;

-- RESETLOGS로 오픈
ALTER DATABASE OPEN RESETLOGS;

컨트롤 파일을 완전히 재생성해야 하는 경우(백업도 없는 최악의 상황):

-- 트레이스 파일에서 CREATE CONTROLFILE 스크립트 추출 (DB가 열려있을 때 미리 수행 권장)
ALTER DATABASE BACKUP CONTROLFILE TO TRACE
  AS '/tmp/recreate_controlfile.sql' REUSE 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;

원인 3 해결 – 파일 접근 권한 및 마운트 포인트 확인

-- OS 레벨에서 파일 존재 여부 및 권한 확인 (터미널에서)
-- $ ls -la /u01/app/oracle/oradata/ORCL/control*.ctl
-- $ stat /u01/app/oracle/oradata/ORCL/control01.ctl

-- 권한이 잘못된 경우 (oracle OS 유저로 수행)
-- $ chmod 640 /u01/app/oracle/oradata/ORCL/control01.ctl
-- $ chown oracle:oinstall /u01/app/oracle/oradata/ORCL/control01.ctl

-- NFS/마운트 포인트 재마운트 후 Oracle 재기동
-- $ mount /u01
-- 이후 DB 기동

-- ASM 환경에서 디스크 그룹 상태 확인
SELECT name, state, total_mb, free_mb
FROM v$asm_diskgroup;

-- ASM 디스크 그룹 마운트
ALTER DISKGROUP DATA MOUNT;

예방 방법

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

컨트롤 파일은 반드시 최소 3개 이상, 서로 다른 디스크(또는 ASM 디스크 그룹)에 다중화하여 운영해야 합니다. 또한 RMAN 백업 정책에 컨트롤 파일 자동 백업(CONFIGURE CONTROLFILE AUTOBACKUP ON)을 반드시 활성화하고, 정기적으로 컨트롤 파일 트레이스 백업도 수행하여 재생성 스크립트를 항상 최신 상태로 유지해야 합니다.

-- RMAN 컨트롤 파일 자동 백업 설정 (필수)
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT
  FOR DEVICE TYPE DISK TO '/backup/rman/%F';

-- 정기적 트레이스 백업 (cron 등으로 자동화 권장)
ALTER DATABASE BACKUP CONTROLFILE TO TRACE
  AS '/backup/trace/ctrl_trace_' ||
     TO_CHAR(SYSDATE,'YYYYMMDD_HH24MI') || '.sql' REUSE;

2. 모니터링 및 Alert Log 정기 점검 체계 구축

컨트롤 파일 관련 문제는 대부분 갑자기 발생하지 않고 사전 징후가 있습니다. Oracle Alert Log(alert_.log)를 실시간으로 모니터링하고, 컨트롤 파일 상태를 주기적으로 확인하는 스크립트를 운영에 포함시켜야 합니다.

-- 컨트롤 파일 현황 모니터링 쿼리
SELECT cf.status, cf.name, cf.is_recovery_dest_file
FROM v$controlfile cf;

-- 컨트롤 파일 레코드 섹션 상태 확인
SELECT type, record_size, records_total, records_used
FROM v$controlfile_record_section
ORDER BY type;

-- 데이터베이스 전반 상태 점검
SELECT name, db_unique_name, open_mode, protection_mode,
       controlfile_type, controlfile_created,
       controlfile_sequence#
FROM v$database;

관련 에러

  • ORA-00202: control file: '' — 특정 컨트롤 파일에 접근할 수 없을 때 ORA-00215와 함께 발생하며, 문제가 되는 파일 경로를 직접 알려줍니다.
  • ORA-00205: error in identifying control file, check alert log for more info — 컨트롤 파일 식별 과정에서 오류가 발생했을 때 나타나며, ORA-00215의 상위 또는 동반 에러로 자주 등장합니다.
  • ORA-00210: cannot open the specified control file — 컨트롤 파일을 열 수 없을 때 발생하며, 권한 문제나 파일 잠금 상황에서 ORA-00215와 함께 스택됩니다.
  • ORA-00227: corrupt block detected in control file — 컨트롤 파일 블록이 손상되었을 때 발생하며, 이 상태가 지속되면 결국 ORA-00215로 이어질 수 있습니다.
  • RMAN-06495: mandatory channel DISK is not configured — RMAN 백업 환경이 구성되지 않아 컨트롤 파일 복구가 불가능한 상황에서 연관되어 나타날 수 있습니다.

DBMS 에러 코드 시리즈

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

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

댓글 남기기