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

ORA-00204
2026년 10월 26일 | DBMS Error 가이드

이 글에서 다루는 내용

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

ORA-00204 error in reading control file 는?

ORA-00204는 Oracle 데이터베이스가 컨트롤 파일(Control File)을 읽는 도중 오류가 발생했을 때 나타나는 에러입니다. 컨트롤 파일은 데이터베이스의 물리적 구조(데이터 파일 위치, 리두 로그 파일 위치, SCN 정보 등)를 담고 있는 매우 중요한 바이너리 파일로, 이 파일이 손상되거나 읽을 수 없는 상태가 되면 데이터베이스 기동 자체가 불가능해집니다. 일반적으로 데이터베이스 시작(STARTUP) 단계 또는 운영 중 컨트롤 파일에 접근이 필요한 시점에 발생하며, 즉각적인 조치가 필요한 심각한 에러입니다.


주요 발생 원인

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

가장 빈번하게 발생하는 원인으로, 스토리지 장애, 디스크 불량 섹터, 또는 실수로 인한 파일 삭제가 원인이 됩니다. Oracle은 기본적으로 다중화(Multiplexing)된 컨트롤 파일을 사용하지만, 모든 복사본이 동일한 디스크에 위치하거나 백업이 없는 경우 복구가 매우 어려워집니다. 운영 중 갑작스러운 서버 전원 차단이나 OS 크래시 이후 파일 시스템이 손상되면서 컨트롤 파일이 유실되는 사례가 실무에서 자주 목격됩니다.

2. 잘못된 초기화 파라미터(CONTROL_FILES) 설정

init.ora 또는 spfile에 설정된 CONTROL_FILES 파라미터가 실제 파일 경로와 일치하지 않을 경우 해당 에러가 발생합니다. 컨트롤 파일을 다른 경로로 이동했거나 파일명을 변경한 후 파라미터를 수정하지 않은 경우, 혹은 새로운 서버로 마이그레이션하면서 경로 설정이 누락된 경우에 발생합니다. 이 경우는 실제 파일은 존재하지만 Oracle이 잘못된 경로를 참조하기 때문에 상대적으로 해결이 용이합니다.

3. 파일 시스템 권한 문제 또는 OS 레벨 잠금

Oracle 프로세스(일반적으로 oracle 계정)가 컨트롤 파일에 대한 읽기 권한이 없거나, 다른 프로세스에 의해 파일이 잠겨 있는 경우에도 발생합니다. OS 패치 이후 파일 소유권이나 권한이 변경되거나, 백업 소프트웨어가 파일을 독점 잠금(Exclusive Lock)한 상태에서 Oracle이 접근하려 할 때 충돌이 발생합니다. NFS 마운트 환경에서는 네트워크 순단으로 인한 일시적인 접근 불가 상황도 이 에러를 유발할 수 있습니다.


해결 방법

원인 1: 컨트롤 파일 손상 및 복구

Step 1. 현재 컨트롤 파일 위치 확인

-- 데이터베이스가 기동 중인 경우
SELECT NAME, STATUS FROM V$CONTROLFILE;

-- NOMOUNT 상태에서 확인
SHOW PARAMETER CONTROL_FILES;

Step 2. 멀티플렉싱된 다른 컨트롤 파일로 복사 후 재기동

-- 1) 데이터베이스 종료
SHUTDOWN ABORT;

-- 2) OS 레벨에서 정상 컨트롤 파일을 손상된 위치로 복사 (OS 명령)
-- cp /u01/oradata/prod/control02.ctl /u01/oradata/prod/control01.ctl

-- 3) 데이터베이스 재기동
STARTUP;

Step 3. RMAN 백업에서 컨트롤 파일 복구

-- RMAN 접속 후 복구
RMAN TARGET /

-- NOMOUNT 상태로 시작
STARTUP NOMOUNT;

-- 백업에서 컨트롤 파일 복구
RESTORE CONTROLFILE FROM AUTOBACKUP;
-- 또는 특정 백업 조각 지정
RESTORE CONTROLFILE FROM '/backup/rman/ctl_backup_20240101.bkp';

-- 마운트 후 데이터베이스 복구
ALTER DATABASE MOUNT;
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;

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

-- 트레이스 파일에서 CREATE CONTROLFILE 스크립트 추출 (사전에 생성된 경우)
ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS '/tmp/create_cf.sql';

-- 위 명령으로 생성된 스크립트 예시 (실제 환경에 맞게 수정 필요)
CREATE CONTROLFILE REUSE DATABASE "PROD" RESETLOGS NOARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
    GROUP 1 '/u01/oradata/prod/redo01.log' SIZE 200M BLOCKSIZE 512,
    GROUP 2 '/u01/oradata/prod/redo02.log' SIZE 200M BLOCKSIZE 512,
    GROUP 3 '/u01/oradata/prod/redo03.log' SIZE 200M BLOCKSIZE 512
DATAFILE
    '/u01/oradata/prod/system01.dbf',
    '/u01/oradata/prod/sysaux01.dbf',
    '/u01/oradata/prod/undotbs01.dbf',
    '/u01/oradata/prod/users01.dbf'
CHARACTER SET AL32UTF8;

원인 2: CONTROL_FILES 파라미터 경로 수정

-- SPFILE 사용 시 파라미터 수정
-- 1) NOMOUNT 상태로 시작
STARTUP NOMOUNT;

-- 2) PFILE 생성 후 수동으로 경로 수정
CREATE PFILE='/tmp/init_temp.ora' FROM SPFILE;

-- /tmp/init_temp.ora 파일을 OS에서 편집하여 CONTROL_FILES 경로 수정
-- *.control_files='/u01/oradata/prod/control01.ctl',
--                 '/u02/oradata/prod/control02.ctl'

-- 3) 수정된 PFILE로 SPFILE 재생성
CREATE SPFILE FROM PFILE='/tmp/init_temp.ora';

-- 4) 재기동
SHUTDOWN IMMEDIATE;
STARTUP;

-- 5) 현재 파라미터 확인
SHOW PARAMETER CONTROL_FILES;

원인 3: OS 권한 문제 해결

# OS 레벨에서 컨트롤 파일 권한 확인 및 수정
ls -la /u01/oradata/prod/control*.ctl

# oracle 사용자 소유권 및 권한 수정
chown oracle:oinstall /u01/oradata/prod/control01.ctl
chmod 640 /u01/oradata/prod/control01.ctl

# 파일 잠금 확인 (Linux)
lsof /u01/oradata/prod/control01.ctl
-- Oracle alert log 확인 (에러 상세 내용 파악)
-- Oracle 19c 이상
SELECT ORIGINATING_TIMESTAMP, MESSAGE_TEXT
FROM V$DIAG_ALERT_EXT
WHERE MESSAGE_TEXT LIKE '%ORA-00204%'
  AND ORIGINATING_TIMESTAMP > SYSDATE - 1
ORDER BY ORIGINATING_TIMESTAMP DESC;

예방 방법

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

컨트롤 파일은 반드시 서로 다른 물리 디스크(또는 ASM 디스크 그룹)에 3개 이상 다중화하여 관리해야 합니다. 또한 RMAN을 활용하여 BACKUP CURRENT CONTROLFILE을 정기적으로 수행하고, CONFIGURE CONTROLFILE AUTOBACKUP ON 설정을 통해 백업 시 자동으로 컨트롤 파일이 백업되도록 구성하는 것이 Best Practice입니다.

-- RMAN에서 컨트롤 파일 자동 백업 설정
RMAN TARGET /
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/rman/cf_%F';

-- 컨트롤 파일 다중화 설정 확인
SELECT NAME FROM V$CONTROLFILE;

-- 컨트롤 파일을 텍스트 트레이스로 주기적 백업 (크론 등록 권장)
ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS '/backup/trace/control_trace_backup.sql' REUSE;

2. 모니터링 및 헬스 체크 자동화

Oracle의 V$CONTROLFILE 뷰와 Alert Log를 주기적으로 모니터링하여 컨트롤 파일 이상 징후를 조기에 탐지해야 합니다. OEM(Oracle Enterprise Manager) 또는 커스텀 쉘 스크립트를 활용하여 컨트롤 파일 상태를 매일 점검하고, 이상 발생 시 즉시 담당자에게 알림이 가도록 설정하는 것이 중요합니다.

-- 컨트롤 파일 상태 모니터링 쿼리
SELECT 
    NAME,
    STATUS,
    IS_RECOVERY_DEST_FILE,
    BLOCK_SIZE,
    FILE_SIZE_BLKS
FROM V$CONTROLFILE;

-- 데이터베이스 전반적인 헬스 체크
SELECT * FROM V$DATABASE;
SELECT CHECKPOINT_CHANGE#, ARCHIVE_CHANGE# FROM V$DATABASE;

관련 에러

  • ORA-00202: control file: '{파일경로}' — 컨트롤 파일 경로를 특정하여 ORA-00204와 함께 출력되는 에러로, 어떤 컨트롤 파일에 문제가 있는지 파악하는 데 활용됩니다.
  • ORA-00205: error in identifying control file — 컨트롤 파일 식별 자체가 불가능한 경우로, 파라미터 설정 오류 시 주로 발생합니다.
  • ORA-00206: error in writing (block %s, # blocks %s) of control file — 컨트롤 파일 쓰기 오류로, 읽기 오류(ORA-00204)와 쌍을 이루는 에러입니다.
  • ORA-00210: cannot open the specified control file — 지정된 컨트롤 파일을 열 수 없을 때 발생하며, 권한 또는 경로 문제와 밀접한 관련이 있습니다.

DBMS 에러 코드 시리즈

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

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

댓글 남기기