2026년 10월 28일 | DBMS Error 가이드
이 글에서 다루는 내용
ORA-00221 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
ORA-00221 error on write to control file 는?
ORA-00221 에러는 Oracle 데이터베이스가 컨트롤 파일(Control File)에 데이터를 기록하는 과정에서 실패했을 때 발생하는 치명적인 에러입니다. 컨트롤 파일은 데이터베이스의 물리적 구조 정보, SCN(System Change Number), 로그 파일 위치 등 핵심 메타데이터를 담고 있어, 쓰기 실패 시 데이터베이스 전체 운영에 심각한 영향을 미칩니다. 이 에러는 단독으로 발생하기보다 ORA-00210, ORA-00202 같은 관련 에러와 함께 발생하는 경우가 많으며, 즉각적인 조치가 필요한 긴급 상황입니다.
주요 발생 원인
- 디스크 공간 부족 또는 I/O 오류
컨트롤 파일이 위치한 파일시스템의 디스크 공간이 가득 찼거나, 디스크 자체에 물리적 I/O 오류가 발생한 경우가 가장 흔한 원인입니다. Oracle은 체크포인트, 로그 스위치 등 다양한 이벤트 발생 시 컨트롤 파일을 지속적으로 업데이트하는데, 이 과정에서 디스크 레벨 장애가 발생하면 즉시 ORA-00221이 트리거됩니다. 특히 ASM(Automatic Storage Management) 환경이 아닌 로컬 파일시스템을 사용하는 경우 디스크 용량 모니터링을 더욱 철저히 해야 합니다.
- 컨트롤 파일 권한 문제 또는 파일 손상
Oracle 프로세스(주로 oracle 또는 grid 사용자)가 컨트롤 파일에 대한 쓰기 권한을 상실하거나, 운영체제 레벨에서 파일이 읽기 전용(Read-Only)으로 변경된 경우에도 이 에러가 발생합니다. 또한 컨트롤 파일 자체가 파일시스템 오류, 비정상 종료 등으로 인해 내부적으로 손상(Corruption)된 경우에도 쓰기 작업이 실패할 수 있습니다. 이 경우 백업된 컨트롤 파일을 이용한 복구 절차가 필요합니다.
- 멀티플렉싱된 컨트롤 파일 중 일부 유실 또는 접근 불가
Oracle은 컨트롤 파일을 여러 위치에 다중화(Multiplexing)하여 운영하는 것을 권장합니다. 그러나 멀티플렉싱된 컨트롤 파일 중 하나라도 접근이 불가능하거나 삭제된 경우, Oracle은 해당 파일에 대한 쓰기 작업에 실패하고 ORA-00221을 발생시킵니다. 모든 컨트롤 파일 멤버가 정상적으로 존재하고 접근 가능한 상태인지 주기적으로 점검해야 합니다.
해결 방법
1단계: 에러 상세 정보 확인
먼저 alert 로그와 trace 파일을 확인하여 정확한 에러 원인을 파악합니다.
-- alert 로그 위치 확인
SELECT VALUE FROM V$DIAG_INFO WHERE NAME = 'Diag Trace';
-- 컨트롤 파일 현재 상태 및 경로 확인
SELECT NAME, STATUS FROM V$CONTROLFILE;
-- 컨트롤 파일 관련 파라미터 확인
SHOW PARAMETER CONTROL_FILES;
2단계: 디스크 공간 확인 및 정리
운영체제 레벨에서 디스크 사용량을 확인합니다(Linux/Unix 기준).
-- Oracle 내부에서 데이터파일 및 관련 경로 공간 확인
SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES)/1024/1024, 2) AS TOTAL_MB,
ROUND(SUM(MAXBYTES)/1024/1024, 2) AS MAX_MB
FROM DBA_DATA_FILES
GROUP BY TABLESPACE_NAME;
-- 불필요한 아카이브 로그 삭제 (RMAN 사용)
-- RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
3단계: 컨트롤 파일 권한 복구
OS 레벨에서 권한 이상 여부를 확인한 후 복구합니다.
-- 현재 컨트롤 파일 목록 상세 조회
SELECT NAME, BLOCK_SIZE, FILE_SIZE_BLKS, STATUS
FROM V$CONTROLFILE;
-- 컨트롤 파일 다중화 현황 확인
SELECT * FROM V$PARAMETER WHERE NAME = 'control_files';
# OS 레벨 권한 확인 및 수정 (Linux)
ls -la /oracle/oradata/ORCL/control01.ctl
chown oracle:dba /oracle/oradata/ORCL/control01.ctl
chmod 640 /oracle/oradata/ORCL/control01.ctl
4단계: 손상된 컨트롤 파일 복구
멀티플렉싱 중 하나가 손상된 경우, 정상적인 컨트롤 파일로 복사하여 복구합니다.
-- 데이터베이스를 MOUNT 상태로 시작
STARTUP MOUNT;
-- 기존 파라미터 파일에서 control_files 확인
SHOW PARAMETER CONTROL_FILES;
-- 손상되지 않은 컨트롤 파일을 손상된 위치로 복사 후
-- 파라미터 파일 수정 (PFILE 기준)
-- control_files = '/u01/oradata/orcl/ctrl01.ctl','/u02/oradata/orcl/ctrl02.ctl'
-- SPFILE을 사용하는 경우
ALTER SYSTEM SET CONTROL_FILES =
'/u01/oradata/orcl/ctrl01.ctl',
'/u02/oradata/orcl/ctrl02.ctl'
SCOPE=SPFILE;
-- 재시작 후 확인
SHUTDOWN IMMEDIATE;
STARTUP;
5단계: RMAN을 이용한 컨트롤 파일 복구
컨트롤 파일이 완전히 손상된 경우 RMAN 백업으로부터 복구합니다.
-- RMAN 접속 후 컨트롤 파일 복구
-- RMAN>
RESTORE CONTROLFILE FROM AUTOBACKUP;
-- 또는 특정 백업셋에서 복구
RESTORE CONTROLFILE FROM '/backup/rman/ctrl_backup.bkp';
-- 복구 후 데이터베이스 오픈
ALTER DATABASE MOUNT;
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;
예방 방법
- 컨트롤 파일 멀티플렉싱 및 정기 백업 자동화
컨트롤 파일은 반드시 서로 다른 디스크 또는 디스크 그룹에 최소 3개 이상 다중화하여 운영해야 합니다. RMAN의 BACKUP CURRENT CONTROLFILE 또는 CONFIGURE CONTROLFILE AUTOBACKUP ON 설정을 통해 체크포인트 및 구조 변경 시 자동으로 백업이 수행되도록 구성하는 것이 실무 Best Practice입니다.
“`sql
— RMAN 컨트롤 파일 자동 백업 활성화
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘/backup/rman/cf_%F’;
— 컨트롤 파일 수동 백업 (트레이스 포함)
ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS ‘/backup/controlfile_backup.sql’ REUSE NORESETLOGS;
ALTER DATABASE BACKUP CONTROLFILE TO ‘/backup/control_bkp.ctl’ REUSE;
“`
- 디스크 공간 및 I/O 상태 모니터링 자동화
컨트롤 파일이 위치한 파일시스템의 디스크 사용률이 80%를 초과하기 전에 알림을 받을 수 있는 모니터링 스크립트를 설정해야 합니다. Oracle Enterprise Manager(OEM) 또는 커스텀 스크립트를 활용하여 주기적으로 V$CONTROLFILE, V$DISK_PING 등을 모니터링하고 이상 징후를 사전에 포착하는 체계를 구축하세요.
“`sql
— 컨트롤 파일 상태 정기 점검 쿼리 (crontab 스크립트에 활용)
SELECT NAME,
STATUS,
BLOCK_SIZE,
FILE_SIZE_BLKS,
FILE_SIZE_BLKS * BLOCK_SIZE / 1024 / 1024 AS SIZE_MB
FROM V$CONTROLFILE
ORDER BY NAME;
“`
관련 에러
- ORA-00210: 지정된 컨트롤 파일을 열 수 없을 때 발생하며, ORA-00221과 함께 자주 등장합니다.
- ORA-00202: 컨트롤 파일 자체를 식별하는 에러로, 파일 경로나 이름 문제 시 발생합니다.
- ORA-00227: 컨트롤 파일 내부 블록 손상이 감지될 때 발생하는 에러입니다.
- ORA-00235: 컨트롤 파일의 고정 테이블을 읽는 도중 발생하는 동시성 관련 에러입니다.
- ORA-01122: 데이터베이스 파일 검증 실패로, 컨트롤 파일과 데이터파일 간 불일치 시 발생합니다.
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.