DEV Community

umzzil nng
umzzil nng

Posted on • Originally published at oraerror.com

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

ORA-00227란?

ORA-00227은 Oracle 데이터베이스가 컨트롤 파일(Control File)을 읽는 과정에서 블록 손상(Corruption)을 감지했을 때 발생하는 에러입니다. 컨트롤 파일은 데이터베이스의 물리적 구조 정보(데이터파일 위치, 리두 로그 파일 위치, 체크포인트 정보 등)를 담고 있는 핵심 파일로, 이 파일이 손상되면 데이터베이스 기동 자체가 불가능해질 수 있습니다. 주로 데이터베이스 기동(STARTUP) 시점 또는 아카이브 로그 작업 중에 해당 에러가 표면화되며, 즉각적인 조치 없이는 서비스 중단으로 이어질 수 있는 심각한 에러입니다.


주요 발생 원인

1. 컨트롤 파일이 위치한 스토리지/파일시스템의 물리적 오류

가장 빈번하게 발생하는 원인으로, 디스크 배드 섹터, SAN/NAS 스토리지 장애, 파일시스템 손상 등 하드웨어 레벨의 문제가 컨트롤 파일 블록을 오염시킵니다. 운영체제 레벨에서 dmesg 또는 이벤트 로그를 확인하면 I/O 에러 메시지가 선행하여 기록된 경우가 많으므로, 에러 발생 시 즉시 OS 로그를 함께 확인하는 것이 필수입니다.

2. 비정상적인 데이터베이스 종료(비정상 셧다운)

운영체제 크래시, 전원 장애, kill -9를 통한 Oracle 프로세스 강제 종료 등 비정상적인 종료 상황에서 컨트롤 파일에 기록 중이던 블록이 불완전한 상태로 남아 손상이 발생할 수 있습니다. 특히 컨트롤 파일은 체크포인트마다 지속적으로 업데이트되기 때문에, 쓰기 도중 시스템이 중단되면 해당 블록의 CRC 체크섬이 맞지 않아 ORA-00227이 발생합니다.

3. 컨트롤 파일 다중화(Multiplexing) 미구성

Oracle은 컨트롤 파일을 여러 위치에 동일하게 복사하여 관리하는 다중화를 지원하는데, 이를 구성하지 않은 환경에서는 단일 컨트롤 파일이 손상되면 복구 수단이 없어집니다. 다중화가 되어 있더라도 모든 복사본이 동일한 물리적 디스크에 위치해 있다면 실질적인 이중화 효과가 없으므로, 서로 다른 디스크 그룹 또는 마운트 포인트에 분산 배치해야 합니다.


해결 방법

방법 1: 정상 컨트롤 파일 복사본으로 교체 (다중화 구성 환경)

컨트롤 파일이 다중화되어 있는 경우, 손상되지 않은 복사본을 확인한 후 손상된 파일을 덮어씁니다.

-- 1단계: 현재 컨트롤 파일 위치 확인 (NOMOUNT 상태에서)
STARTUP NOMOUNT;

SHOW PARAMETER control_files;

-- 또는 spfile/pfile 직접 확인
SELECT VALUE FROM V$PARAMETER WHERE NAME = 'control_files';
Enter fullscreen mode Exit fullscreen mode
-- 2단계: 데이터베이스 종료 후 OS 레벨에서 복사
SHUTDOWN ABORT;
Enter fullscreen mode Exit fullscreen mode
# OS 레벨에서 정상 복사본을 손상된 파일 위치로 복사
# 예시: /u01/oradata/orcl/control01.ctl 이 손상된 경우
cp /u02/oradata/orcl/control02.ctl /u01/oradata/orcl/control01.ctl
cp /u03/oradata/orcl/control03.ctl /u01/oradata/orcl/control01.ctl
Enter fullscreen mode Exit fullscreen mode
-- 3단계: 데이터베이스 재기동
STARTUP;

-- 기동 후 컨트롤 파일 상태 확인
SELECT STATUS FROM V$CONTROLFILE;

SELECT NAME, STATUS FROM V$CONTROLFILE;
Enter fullscreen mode Exit fullscreen mode

방법 2: RMAN 백업으로부터 컨트롤 파일 복구

정상 복사본이 없거나 전체 컨트롤 파일이 손상된 경우 RMAN 백업을 통해 복구합니다.

# RMAN 접속
rman target /
Enter fullscreen mode Exit fullscreen mode
-- RMAN을 통한 컨트롤 파일 복구
RMAN> STARTUP NOMOUNT;

-- 가장 최근 백업으로부터 컨트롤 파일 복구
RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;

-- 특정 백업 피스를 지정할 경우
RMAN> RESTORE CONTROLFILE FROM '/backup/rman/ctl_backup_20240101.bkp';

-- 컨트롤 파일 복구 후 마운트
RMAN> ALTER DATABASE MOUNT;

-- 데이터베이스 복구 (컨트롤 파일 복구 후 반드시 수행)
RMAN> RECOVER DATABASE;

-- RESETLOGS 옵션으로 오픈 (컨트롤 파일 복원 후 필수)
RMAN> ALTER DATABASE OPEN RESETLOGS;
Enter fullscreen mode Exit fullscreen mode

방법 3: 컨트롤 파일 재생성 (최후의 수단)

백업도 없고 복사본도 없는 최악의 상황에서는 컨트롤 파일을 재생성해야 합니다. 이 방법은 데이터 손실 위험이 있으므로 신중하게 수행해야 합니다.

-- 1단계: NOMOUNT 상태로 기동
STARTUP NOMOUNT;

-- 2단계: 컨트롤 파일 재생성 스크립트 실행
-- (아래 정보는 환경에 맞게 수정 필요)
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 50M,
  GROUP 2 '/u01/oradata/orcl/redo02.log' SIZE 50M,
  GROUP 3 '/u01/oradata/orcl/redo03.log' SIZE 50M
DATAFILE
  '/u01/oradata/orcl/system01.dbf',
  '/u01/oradata/orcl/sysaux01.dbf',
  '/u01/oradata/orcl/undotbs01.dbf',
  '/u01/oradata/orcl/users01.dbf'
CHARACTER SET AL32UTF8;

-- 3단계: 복구 수행
RECOVER DATABASE;

-- 4단계: 데이터베이스 오픈
ALTER DATABASE OPEN;

-- 5단계: TEMPFILE 재추가 (재생성 후 TEMP 파일은 수동 추가 필요)
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/oradata/orcl/temp01.dbf'
    SIZE 512M REUSE AUTOEXTEND ON NEXT 64M MAXSIZE UNLIMITED;
Enter fullscreen mode Exit fullscreen mode
-- 재생성 후 컨트롤 파일 백업 즉시 수행
ALTER DATABASE BACKUP CONTROLFILE TO
    '/backup/manual/control_backup_after_recreate.ctl';

-- 또는 트레이스 파일로 백업 (재생성 스크립트 보존 목적)
ALTER DATABASE BACKUP CONTROLFILE TO TRACE
    AS '/backup/manual/create_controlfile.sql';
Enter fullscreen mode Exit fullscreen mode

방법 4: 컨트롤 파일 다중화 재구성 (예방 및 복구 후 조치)

-- 현재 컨트롤 파일 위치 확인
SELECT NAME FROM V$CONTROLFILE;

-- SPFILE 사용 환경에서 추가 컨트롤 파일 경로 설정
ALTER SYSTEM SET CONTROL_FILES =
    '/u01/oradata/orcl/control01.ctl',
    '/u02/oradata/orcl/control02.ctl',
    '/u03/oradata/orcl/control03.ctl'
SCOPE=SPFILE;

-- 데이터베이스 종료 후 OS에서 파일 복사, 재기동
SHUTDOWN IMMEDIATE;
Enter fullscreen mode Exit fullscreen mode
# OS 레벨: 기존 컨트롤 파일을 새 경로에 복사
cp /u01/oradata/orcl/control01.ctl /u02/oradata/orcl/control02.ctl
cp /u01/oradata/orcl/control01.ctl /u03/oradata/orcl/control03.ctl
Enter fullscreen mode Exit fullscreen mode
-- 재기동 후 확인
STARTUP;
SELECT NAME, STATUS FROM V$CONTROLFILE;
Enter fullscreen mode Exit fullscreen mode

예방 방법

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

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

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

-- 설정 확인
RMAN> SHOW CONTROLFILE AUTOBACKUP;
Enter fullscreen mode Exit fullscreen mode

2. 정기적인 컨트롤 파일 무결성 모니터링 및 알림 체계 구축

주기적으로 V$CONTROLFILE_RECORD_SECTION 뷰를 조회하거나, Oracle Enterprise Manager의 컨트롤 파일 상태 모니터링을 활용하여 이상 징후를 사전에 탐지하는 체계를 갖춰야 합니다. 아울러 OS 레벨의 디스크 상태 모니터링(SMART 데이터, 스토리지 벤더 모니터링 툴)을 병행하면 하드웨어 장애로 인한 컨트롤 파일 손상을 사전에 예방할 수 있습니다.

-- 컨트롤 파일 섹션별 상태 조회
SELECT TYPE, RECORD_SIZE, RECORDS_TOTAL, RECORDS_USED
FROM V$CONTROLFILE_RECORD_SECTION
ORDER BY TYPE;

-- 정기 백업 스크립트 예시 (cron 등록용)
-- 매일 자정 컨트롤 파일 트레이스 백업
ALTER DATABASE BACKUP CONTROLFILE TO TRACE
    AS '/backup/trace/ctlfile_backup_$(date +%Y%m%d).sql' REUSE;
Enter fullscreen mode Exit fullscreen mode

관련 에러

  • ORA-00205: 컨트롤 파일을 식별하는 중 오류 발생. CONTROL_FILES 파라미터에 지정된 경로에 파일이 없거나 접근 불가 시 발생하며 ORA-00227과 함께 나타나는 경우가 많습니다.
  • ORA-00202: 컨트롤 파일 자체를 열 수 없을 때 발생하며, ORA-00227의 전조 증상으로 나타나기도 합니다.
  • ORA-00210: 지정된 컨트롤 파일을 열 수 없는 경우로, 파일 권한 문제나 파일 삭제 시 발생합니다.
  • ORA-00214: 컨트롤 파일의 버전이 서로 불일치할 때 발생하며, 다중화된 컨트롤 파일 중 하나만 업데이트된 상황에서 나타납니다.
  • ORA-00600: 내부 에러로, 컨트롤 파일 손상이 Oracle 커널 레벨까지 영향을 미친 경우 ORA-00227과 동반하여 발생할 수 있으며, Oracle Support에 SR을 통해 분석이 필요합니다.

Top comments (0)