DEV Community

umzzil nng
umzzil nng

Posted on • Originally published at oraerror.com

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

ORA-00210란?

ORA-00210은 Oracle 데이터베이스가 기동(Startup) 과정에서 지정된 컨트롤 파일(Control File)을 열지 못할 때 발생하는 에러입니다. 컨트롤 파일은 데이터베이스의 물리적 구조 정보(데이터파일 목록, 리두 로그 파일 위치, SCN 정보 등)를 담고 있는 매우 중요한 바이너리 파일로, 이 파일에 접근하지 못하면 데이터베이스는 Mount 단계조차 진행할 수 없습니다. 일반적으로 파일 시스템 손상, 잘못된 파라미터 설정, 파일 권한 문제, 또는 컨트롤 파일 자체의 물리적 손상이 원인이 되며, 즉각적인 조치를 취하지 않으면 데이터베이스 서비스 중단으로 이어질 수 있습니다.


주요 발생 원인

1. 컨트롤 파일 경로 불일치 (spfile/pfile 설정 오류)

가장 흔한 원인으로, CONTROL_FILES 파라미터에 지정된 경로와 실제 파일이 존재하는 경로가 다를 때 발생합니다. 데이터베이스를 다른 서버로 이전(Migration)하거나, 디스크 재배치, ASM 디스크 그룹명 변경 후 파라미터를 업데이트하지 않은 경우 이 문제가 자주 발생합니다. 특히 SPFILE을 사용하는 환경에서는 파라미터 변경 후 재기동하지 않으면 이전 경로가 그대로 남아 에러를 유발합니다.

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

디스크 장애, 스토리지 오류, 또는 실수로 인한 파일 삭제로 인해 컨트롤 파일 자체가 손상되거나 존재하지 않을 수 있습니다. Oracle은 운영의 안정성을 위해 컨트롤 파일을 다중화(Multiplexing)하도록 권장하는데, 모든 다중화 경로의 파일이 동시에 손실되면 복구가 매우 어려워집니다. 이 경우 에러 메시지와 함께 ORA-00202 (control file: 'xxx') 에러가 동반되는 경우가 많습니다.

3. OS 파일 권한 및 소유권 문제

컨트롤 파일이 존재하더라도 Oracle 프로세스(일반적으로 oracle 유저)가 해당 파일에 대한 읽기/쓰기 권한을 가지고 있지 않으면 동일한 에러가 발생합니다. 시스템 패치, OS 업그레이드, 또는 보안 정책 변경 이후 파일 소유권이 변경되는 사례가 실무에서 종종 보고됩니다. NFS 마운트 환경이나 공유 스토리지 환경에서는 특히 주의가 필요합니다.


해결 방법

원인 1 해결: 컨트롤 파일 경로 확인 및 수정

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

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

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

-- 또는 v$parameter 뷰에서 확인
SELECT name, value
FROM v$parameter
WHERE name = 'control_files';
Enter fullscreen mode Exit fullscreen mode

실제 파일 경로와 파라미터 값이 다르다면 다음과 같이 수정합니다.

-- SPFILE을 사용하는 경우 파라미터 수정 후 재기동
-- (NOMOUNT 상태에서는 SCOPE=SPFILE만 가능)
ALTER SYSTEM SET CONTROL_FILES =
    '/oradata/ORCL/control01.ctl',
    '/oradata/ORCL/control02.ctl'
SCOPE=SPFILE;

-- 데이터베이스 재기동
SHUTDOWN ABORT;
STARTUP;
Enter fullscreen mode Exit fullscreen mode

PFILE을 사용하는 경우, 텍스트 에디터로 init.ora 파일을 직접 수정합니다.

-- pfile 위치 확인 (OS 쉘에서)
-- $ORACLE_HOME/dbs/initORCL.ora

-- pfile 내용 예시 수정
-- control_files=('/oradata/ORCL/control01.ctl','/oradata/ORCL/control02.ctl')

-- pfile로 기동
STARTUP PFILE='/u01/app/oracle/product/19c/dbs/initORCL.ora';
Enter fullscreen mode Exit fullscreen mode

원인 2 해결: 컨트롤 파일 복구

Case A - 다중화된 컨트롤 파일 중 일부가 손상된 경우 (가장 쉬운 복구)

-- 1. 현재 유효한 컨트롤 파일 확인
SELECT status, name FROM v$controlfile;

-- 2. 정상적인 컨트롤 파일을 OS에서 복사 (DB 종료 후 진행)
SHUTDOWN ABORT;

-- OS 명령어로 복사 (쉘에서 실행)
-- cp /oradata/ORCL/control01.ctl /oradata/ORCL/control02.ctl

-- 3. DB 재기동
STARTUP;
Enter fullscreen mode Exit fullscreen mode

Case B - 모든 컨트롤 파일이 손실된 경우 (백업에서 복구)

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

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

-- 또는 특정 백업 세트에서 복구
RESTORE CONTROLFILE FROM '/backup/ctl_c-12345-20241015-00';

-- 복구 후 DB Mount
ALTER DATABASE MOUNT;

-- 데이터파일 복구 및 OPEN
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;
Enter fullscreen mode Exit fullscreen mode

Case C - 백업이 없는 경우 (컨트롤 파일 재생성 - 최후의 수단)

-- 트레이스 파일에서 컨트롤 파일 재생성 스크립트 추출
-- (사전에 아래 명령으로 생성해 두었다면 활용 가능)
ALTER DATABASE BACKUP CONTROLFILE TO TRACE
AS '/tmp/controlfile_backup.sql';

-- 재생성 스크립트 예시 구조
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS NOARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
    GROUP 1 '/oradata/ORCL/redo01.log' SIZE 200M BLOCKSIZE 512,
    GROUP 2 '/oradata/ORCL/redo02.log' SIZE 200M BLOCKSIZE 512,
    GROUP 3 '/oradata/ORCL/redo03.log' SIZE 200M BLOCKSIZE 512
DATAFILE
    '/oradata/ORCL/system01.dbf',
    '/oradata/ORCL/sysaux01.dbf',
    '/oradata/ORCL/undotbs01.dbf',
    '/oradata/ORCL/users01.dbf'
CHARACTER SET AL32UTF8;

-- 재생성 후 복구 진행
RECOVER DATABASE USING BACKUP CONTROLFILE;
ALTER DATABASE OPEN RESETLOGS;
Enter fullscreen mode Exit fullscreen mode

원인 3 해결: OS 파일 권한 수정

-- OS 쉘에서 권한 및 소유권 확인 후 수정
-- ls -la /oradata/ORCL/*.ctl

-- 소유권 변경 (root 권한 필요)
-- chown oracle:oinstall /oradata/ORCL/control01.ctl
-- chown oracle:oinstall /oradata/ORCL/control02.ctl

-- 권한 부여
-- chmod 640 /oradata/ORCL/control01.ctl
-- chmod 640 /oradata/ORCL/control02.ctl

-- 권한 수정 후 DB 기동 시도
STARTUP;

-- 디렉토리 권한도 확인 필요
-- ls -ld /oradata/ORCL/
-- chmod 750 /oradata/ORCL/
Enter fullscreen mode Exit fullscreen mode

예방 방법

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

컨트롤 파일은 반드시 서로 다른 물리적 디스크(또는 ASM 디스크 그룹)에 최소 3개 이상 다중화하여 운영해야 합니다. 또한 RMAN의 CONFIGURE CONTROLFILE AUTOBACKUP ON 설정을 활성화하면 백업 또는 구조 변경 시마다 컨트롤 파일이 자동으로 백업되어, 장애 발생 시 신속한 복구가 가능합니다.

-- 컨트롤 파일 자동 백업 활성화 (RMAN)
RMAN TARGET /
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT
    FOR DEVICE TYPE DISK TO '/backup/rman/ctl_%F';

-- 현재 다중화 상태 확인
SELECT name, status FROM v$controlfile;

-- 컨트롤 파일 트레이스 백업 (정기 스크립트에 포함 권장)
ALTER DATABASE BACKUP CONTROLFILE TO TRACE
AS '/backup/trace/controlfile_trace.sql' REUSE;
Enter fullscreen mode Exit fullscreen mode

2. 정기적인 파라미터 및 파일 경로 정합성 점검 자동화

월 1회 이상 CONTROL_FILES 파라미터에 지정된 경로와 실제 OS 파일의 존재 여부, 소유권, 권한을 스크립트로 점검하는 루틴을 구축해야 합니다. 특히 OS 패치, 스토리지 교체, 서버 마이그레이션 작업 이후에는 반드시 점검 절차를 수행하고, 변경 사항을 문서화하는 습관이 중요합니다.

-- 컨트롤 파일 상태 점검 쿼리 (운영 모니터링 스크립트에 포함)
SELECT
    cf.name              AS controlfile_path,
    cf.status            AS status,
    cf.block_size        AS block_size,
    cf.file_size_blks    AS file_size_blocks
FROM v$controlfile cf
ORDER BY cf.name;

-- Alert log에서 컨트롤 파일 관련 에러 모니터링
-- (외부 쉘 스크립트 연동 권장)
SELECT originating_timestamp, message_text
FROM v$diag_alert_ext
WHERE message_text LIKE '%control%'
  AND originating_timestamp > SYSDATE - 1
ORDER BY originating_timestamp DESC;
Enter fullscreen mode Exit fullscreen mode

관련 에러

  • ORA-00202: control file: 'filename' — ORA-00210과 함께 출력되며, 실제 문제가 발생한 컨트롤 파일의 경로를 명시합니다. 두 에러는 거의 항상 쌍으로 발생하므로 함께 확인해야 합니다.
  • ORA-00205: error in identifying control file, check alert log for more info — 컨트롤 파일 식별 자체가 실패한 경우로, ORA-00210과 유사한 맥락에서 발생하며 Alert Log의 상세 내용을 반드시 확인해야 합니다.
  • ORA-00227: corrupt block detected in control file: (block 1, # blocks 1) — 컨트롤 파일이 존재하지만 내부 블록이 손상된 경우 발생하며, 다중화 복사본으로 교체하거나 RMAN 복구가 필요합니다.
  • ORA-00221: error on write to control file — 컨트롤 파일에 쓰기 작업이 실패한 경우로, 디스크 풀(Full) 또는 스토리지 I/O 오류와 함께 발생하는 경우가 많습니다.

Top comments (0)