ORA-00221란?
ORA-00221은 Oracle 데이터베이스가 컨트롤 파일(Control File)에 쓰기 작업을 수행하는 도중 오류가 발생했을 때 나타나는 에러입니다. 컨트롤 파일은 데이터베이스의 물리적 구조(데이터파일, 리두 로그 파일 위치, SCN 정보 등)를 기록하는 핵심 파일로, 이 파일에 접근하지 못하면 데이터베이스는 정상적인 운영을 지속할 수 없습니다. 일반적으로 이 에러는 단독으로 발생하기보다는 ORA-00202, ORA-27063 등의 OS 레벨 에러와 함께 출력되며, alert log에 관련 상세 메시지가 함께 기록됩니다.
주요 발생 원인
1. 디스크 공간 부족 또는 I/O 오류
컨트롤 파일이 위치한 디스크의 여유 공간이 부족하거나, 디스크 자체에 물리적 불량이 발생한 경우 쓰기 작업이 실패합니다. 특히 ASM(Automatic Storage Management) 환경에서는 디스크 그룹의 여유 공간 부족이나 디스크 멤버 장애로 인해 해당 에러가 빈번하게 발생합니다. 운영 중 갑작스러운 디스크 교체나 스토리지 장애 역시 주요 원인으로 꼽힙니다.
2. 파일 권한 및 소유권 문제
컨트롤 파일에 대한 OS 레벨의 파일 권한이 변경되거나, Oracle 프로세스가 해당 파일에 쓰기 권한을 잃었을 경우에도 이 에러가 발생합니다. 예를 들어 OS 관리자가 보안 정책 적용 중에 실수로 oracle 계정의 파일 접근 권한을 변경하거나, NFS 마운트 포인트의 옵션이 ro(read-only)로 변경된 경우가 대표적입니다. 이 경우 실제 데이터파일이나 리두 로그는 정상이지만 컨트롤 파일만 문제가 생기는 경우도 있습니다.
3. 컨트롤 파일 다중화(Multiplexing) 설정 중 특정 멤버 손상
Oracle은 컨트롤 파일을 여러 위치에 다중화하여 보관하는 것을 권장하며, 다중화된 멤버 중 하나라도 쓰기에 실패하면 ORA-00221이 발생합니다. 특정 경로의 마운트 해제, 파일 시스템 오류, 또는 백업 소프트웨어가 컨트롤 파일을 잠금(lock) 상태로 유지하는 경우에 이런 상황이 벌어질 수 있습니다. 다중화된 컨트롤 파일 중 하나가 손상되면 데이터베이스 자체가 중단될 수 있으므로, 신속한 조치가 필요합니다.
해결 방법
원인 1: 디스크 공간 부족 또는 I/O 오류 해결
먼저 alert log를 확인하여 정확한 에러 메시지와 해당 컨트롤 파일의 경로를 파악합니다.
-- alert log 위치 확인
SELECT VALUE FROM V$DIAG_INFO WHERE NAME = 'Diag Trace';
-- 현재 등록된 컨트롤 파일 목록 확인
SELECT NAME, STATUS FROM V$CONTROLFILE;
OS 레벨에서 디스크 공간을 확인한 후, 불필요한 파일을 정리하거나 디스크를 확장합니다.
# OS 레벨 디스크 여유 공간 확인 (Linux/Unix)
df -h
du -sh /oracle/oradata/*
ASM 환경에서는 다음과 같이 디스크 그룹 여유 공간을 확인합니다.
-- ASM 디스크 그룹 여유 공간 확인
SELECT GROUP_NUMBER, NAME,
TOTAL_MB, FREE_MB,
ROUND((FREE_MB/TOTAL_MB)*100, 2) AS FREE_PCT
FROM V$ASM_DISKGROUP;
원인 2: 파일 권한 및 소유권 문제 해결
컨트롤 파일의 소유권과 권한을 OS 레벨에서 재설정합니다.
# 컨트롤 파일 권한 확인
ls -al /oracle/oradata/ORCL/control01.ctl
# 권한 및 소유자 복구
chown oracle:oinstall /oracle/oradata/ORCL/control01.ctl
chmod 640 /oracle/oradata/ORCL/control01.ctl
NFS 마운트 옵션 확인 및 재마운트가 필요한 경우 다음을 수행합니다.
# 마운트 옵션 확인
mount | grep /oracle
# rw 옵션으로 재마운트
mount -o remount,rw /oracle
권한 복구 후 데이터베이스를 재시작하기 전 컨트롤 파일 접근 가능 여부를 먼저 검증합니다.
-- DB 재기동 후 컨트롤 파일 정상 여부 재확인
SELECT NAME, BLOCK_SIZE, FILE_SIZE_BLKS, STATUS
FROM V$CONTROLFILE;
원인 3: 손상된 컨트롤 파일 멤버 복구
다중화된 컨트롤 파일 중 하나가 손상된 경우, 정상 컨트롤 파일을 이용해 손상된 파일을 복사 후 재등록합니다.
-- 현재 컨트롤 파일 목록 및 상태 확인
SELECT NAME, STATUS FROM V$CONTROLFILE;
-- SPFILE에 등록된 컨트롤 파일 경로 확인
SHOW PARAMETER CONTROL_FILES;
# DB를 MOUNT 상태로 기동 후 정상 컨트롤 파일 복사
cp /oracle/oradata/ORCL/control01.ctl /oracle/oradata/ORCL/control02.ctl
cp /oracle/oradata/ORCL/control01.ctl /oracle/fast_recovery_area/ORCL/control03.ctl
-- DB 완전 종료 후 SPFILE 파라미터 수정
SHUTDOWN ABORT;
-- PFILE 편집 후 SPFILE 재생성
CREATE PFILE='/tmp/initORCL.ora' FROM SPFILE;
-- 이후 /tmp/initORCL.ora 파일에서 control_files 파라미터를 수정
-- 수정된 PFILE로 SPFILE 재생성
CREATE SPFILE FROM PFILE='/tmp/initORCL.ora';
-- 재기동 확인
STARTUP;
-- 최종 컨트롤 파일 다중화 상태 점검
SELECT NAME, STATUS FROM V$CONTROLFILE;
컨트롤 파일 전체가 손상되어 복구가 불가한 경우에는 RMAN을 활용하여 복구합니다.
-- RMAN을 통한 컨트롤 파일 복구
RMAN> STARTUP NOMOUNT;
RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;
RMAN> ALTER DATABASE MOUNT;
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN RESETLOGS;
예방 방법
1. 컨트롤 파일 다중화 및 주기적 백업 설정
컨트롤 파일은 반드시 서로 다른 물리적 디스크에 최소 2~3개 이상 다중화하여 운영해야 합니다. 또한 RMAN의 BACKUP CURRENT CONTROLFILE 또는 AUTOBACKUP 기능을 활성화하여 데이터베이스 구조 변경 시 자동으로 컨트롤 파일이 백업되도록 설정합니다.
-- RMAN AUTOBACKUP 활성화
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/rman/%F';
-- 수동 컨트롤 파일 백업 (트레이스 포함)
ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS '/backup/controlfile_backup.trc' REUSE NORESETLOGS;
ALTER DATABASE BACKUP CONTROLFILE TO '/backup/control_backup.ctl' REUSE;
2. 디스크 및 컨트롤 파일 모니터링 자동화
OEM(Oracle Enterprise Manager) 또는 커스텀 모니터링 스크립트를 활용하여 컨트롤 파일의 상태와 디스크 여유 공간을 주기적으로 점검하는 체계를 구축해야 합니다. 특히 아래와 같은 쿼리를 크론(cron)에 등록하여 이상 징후를 조기에 감지하는 것을 권장합니다.
-- 컨트롤 파일 상태 및 크기 모니터링 쿼리
SELECT
NAME,
STATUS,
BLOCK_SIZE,
FILE_SIZE_BLKS,
(BLOCK_SIZE * FILE_SIZE_BLKS) / 1024 / 1024 AS SIZE_MB
FROM V$CONTROLFILE
ORDER BY NAME;
-- alert log에서 ORA-00221 관련 에러 발생 이력 조회
SELECT ORIGINATING_TIMESTAMP, MESSAGE_TEXT
FROM V$DIAG_ALERT_EXT
WHERE MESSAGE_TEXT LIKE '%ORA-00221%'
ORDER BY ORIGINATING_TIMESTAMP DESC;
관련 에러
-
ORA-00202:
control file: '{파일경로}'— ORA-00221과 함께 출력되며, 문제가 발생한 컨트롤 파일의 실제 경로를 명시합니다. - ORA-00210: 지정된 컨트롤 파일을 열 수 없을 때 발생하며, ORA-00221 발생 직전 단계에서 나타날 수 있습니다.
- ORA-00227: 컨트롤 파일에서 손상된 블록이 감지될 때 발생하며, 물리적 파일 손상과 관련이 깊습니다.
- ORA-00257: 아카이브 로그 대상이 꽉 찬 경우 발생하며, 디스크 공간 부족 맥락에서 ORA-00221과 동시에 발생하는 경우가 있습니다.
- ORA-27063: OS 레벨의 I/O 오류로, ORA-00221의 근본 원인으로 자주 함께 출력됩니다.
Top comments (0)