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

ORA-00372
2026년 06월 11일 | DBMS Error 가이드

이 글에서 다루는 내용

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

ORA-00372 file cannot be modified at this time 는?

ORA-00372는 Oracle 데이터베이스에서 특정 데이터 파일을 수정하려 할 때, 해당 파일이 현재 수정 불가능한 상태에 있을 때 발생하는 에러입니다. 주로 데이터 파일이 오프라인(OFFLINE) 상태이거나, 읽기 전용(READ ONLY) 테이블스페이스에 속해 있거나, 복구(RECOVERY) 작업이 필요한 상태일 때 발생합니다. 이 에러는 단독으로 발생하기보다는 ORA-01110 등 다른 에러와 함께 나타나며, 정확한 원인 파악 후 신속하게 처리하지 않으면 데이터베이스 운영에 심각한 영향을 줄 수 있습니다.


주요 발생 원인

1. 데이터 파일이 OFFLINE 상태인 경우

가장 빈번하게 발생하는 원인으로, 특정 데이터 파일이 관리자에 의해 수동으로 오프라인 처리되었거나, 예기치 않은 I/O 오류로 인해 자동으로 오프라인 상태가 된 경우입니다. Oracle은 OFFLINE 상태의 파일에 대해 DML 또는 DDL 작업을 허용하지 않으며, 이 상태에서 해당 파일이 속한 테이블스페이스 내 객체를 조작하려 하면 ORA-00372가 발생합니다. 오프라인된 파일은 복구 작업 후 다시 온라인 상태로 전환해야만 정상적인 작업이 가능합니다.

2. 테이블스페이스가 READ ONLY 모드로 설정된 경우

테이블스페이스가 READ ONLY 모드로 변경된 경우, 해당 테이블스페이스에 속한 데이터 파일은 쓰기 작업이 원천 차단됩니다. 이 상태는 데이터 마이그레이션, 아카이빙, 또는 특정 데이터 보호 목적으로 DBA가 의도적으로 설정하는 경우도 있지만, 의도치 않게 이 모드가 유지된 채로 애플리케이션이 INSERT/UPDATE/DELETE를 시도할 때 에러가 발생합니다. 실무에서는 마이그레이션 작업 후 READ WRITE 모드로 되돌리는 것을 잊는 경우가 종종 있어 주의가 필요합니다.

3. 미디어 복구(Media Recovery)가 필요한 파일인 경우

데이터베이스가 비정상 종료되거나 물리적인 디스크 오류가 발생한 후, 특정 데이터 파일이 복구가 완료되지 않은 상태에 있을 수 있습니다. 이 경우 Oracle은 해당 파일을 수정 불가능한 상태로 표시하여 데이터 무결성을 보호합니다. 미디어 복구 없이 파일을 온라인 상태로 전환하려 하면 ORA-00372와 함께 복구 관련 에러가 연속으로 발생하므로, 반드시 아카이브 로그와 백업을 이용한 복구 절차를 먼저 수행해야 합니다.


해결 방법

원인 1: 데이터 파일 OFFLINE 상태 해결

먼저 현재 파일 상태를 확인합니다.

-- 데이터 파일 상태 전체 조회
SELECT file#, name, status, recover
FROM v$datafile
ORDER BY file#;

-- 특정 테이블스페이스의 파일 상태 확인
SELECT df.file_id, df.file_name, df.status, ts.status AS ts_status
FROM dba_data_files df
JOIN dba_tablespaces ts ON df.tablespace_name = ts.tablespace_name
WHERE ts.tablespace_name = 'USERS';

파일이 OFFLINE 상태라면 복구 후 온라인으로 전환합니다.

-- 미디어 복구가 필요 없는 단순 OFFLINE 파일 온라인 전환
ALTER DATABASE DATAFILE '/u01/oradata/orcl/users01.dbf' ONLINE;

-- 복구가 필요한 경우 먼저 RECOVER 수행
RECOVER DATAFILE '/u01/oradata/orcl/users01.dbf';

-- 복구 완료 후 온라인 전환
ALTER DATABASE DATAFILE '/u01/oradata/orcl/users01.dbf' ONLINE;

-- 테이블스페이스 단위로 온라인 전환
ALTER TABLESPACE USERS ONLINE;

원인 2: READ ONLY 테이블스페이스 해결

테이블스페이스 모드를 확인하고 READ WRITE로 변경합니다.

-- 현재 테이블스페이스 상태 확인
SELECT tablespace_name, status
FROM dba_tablespaces
WHERE status != 'ONLINE'
ORDER BY tablespace_name;

-- READ ONLY 상태 확인
SELECT tablespace_name, status
FROM dba_tablespaces
WHERE status = 'READ ONLY';

-- READ WRITE 모드로 전환
ALTER TABLESPACE USERS READ WRITE;

-- 전환 후 상태 재확인
SELECT tablespace_name, status
FROM dba_tablespaces
WHERE tablespace_name = 'USERS';

원인 3: 미디어 복구가 필요한 경우

-- 복구가 필요한 파일 목록 확인
SELECT file#, name, status, recover
FROM v$datafile
WHERE recover = 'YES' OR status = 'RECOVER';

-- 아카이브 로그 모드 확인
SELECT log_mode FROM v$database;

-- RMAN을 이용한 데이터 파일 복구 (권장)
-- RMAN 접속 후 수행
-- RMAN> RESTORE DATAFILE '/u01/oradata/orcl/users01.dbf';
-- RMAN> RECOVER DATAFILE '/u01/oradata/orcl/users01.dbf';

-- SQL*Plus에서 수동 복구
RECOVER AUTOMATIC DATAFILE '/u01/oradata/orcl/users01.dbf';

-- 복구 완료 후 파일 온라인 전환
ALTER DATABASE DATAFILE '/u01/oradata/orcl/users01.dbf' ONLINE;

-- 전체 데이터베이스 복구가 필요한 경우 (MOUNT 상태에서)
-- STARTUP MOUNT;
-- RECOVER DATABASE;
-- ALTER DATABASE OPEN;

에러 발생 시 빠른 진단 쿼리

-- 문제 있는 파일을 한 번에 파악하는 종합 진단 쿼리
SELECT 
    df.file#,
    df.name AS file_name,
    df.status AS file_status,
    df.recover,
    ts.name AS tablespace_name,
    ts.status AS ts_status
FROM v$datafile df
JOIN v$tablespace ts ON df.ts# = ts.ts#
WHERE df.status != 'ONLINE'
   OR df.recover = 'YES'
   OR ts.status NOT IN ('ONLINE', 'READ ONLY')
ORDER BY df.file#;

예방 방법

1. 정기적인 데이터 파일 및 테이블스페이스 상태 모니터링 자동화

데이터 파일과 테이블스페이스의 상태를 주기적으로 점검하는 모니터링 스크립트를 스케줄러(DBMS_SCHEDULER 또는 cron)에 등록하여 이상 상태가 감지되면 즉시 알람을 받을 수 있도록 구성해야 합니다. 아래와 같은 스크립트를 일 1회 이상 실행하여 비정상 파일을 조기에 탐지하십시오.

-- 모니터링용 이상 상태 감지 쿼리 (정기 실행 권장)
SELECT 
    'DATAFILE' AS object_type,
    name AS object_name,
    status
FROM v$datafile
WHERE status NOT IN ('ONLINE', 'SYSTEM')
UNION ALL
SELECT 
    'TABLESPACE',
    tablespace_name,
    status
FROM dba_tablespaces
WHERE status NOT IN ('ONLINE', 'READ ONLY');

2. ARCHIVELOG 모드 운영 및 정기 백업 체계 구축

프로덕션 환경에서는 반드시 ARCHIVELOG 모드로 운영하고, RMAN을 통한 정기적인 전체 백업(Full Backup) 및 증분 백업(Incremental Backup)을 유지해야 합니다. 미디어 장애 발생 시 복구 가능한 아카이브 로그가 없으면 데이터 손실 없이 파일을 복구하는 것이 불가능하므로, 백업 및 아카이브 로그 보존 정책을 철저히 준수해야 합니다. 또한 READ ONLY로 변경한 테이블스페이스는 작업 완료 즉시 READ WRITE로 되돌리는 절차를 표준 운영 프로세스(SOP)에 명문화하는 것을 강력히 권장합니다.


관련 에러

  • ORA-01110: “data file N: ‘filename'” — ORA-00372와 거의 항상 함께 발생하며, 문제가 발생한 실제 파일의 경로와 번호를 알려줍니다.
  • ORA-01113: 파일이 미디어 복구를 필요로 한다는 것을 나타내며, ORA-00372 이후 연속 발생하는 경우가 많습니다.
  • ORA-01114: 파일에 블록을 쓰는 도중 I/O 오류가 발생할 때 나타나며, 데이터 파일 OFFLINE의 직접적인 원인이 되기도 합니다.
  • ORA-00376: 현재 파일을 읽을 수 없는 상태임을 나타내며, ORA-00372의 읽기 버전에 해당하는 에러입니다.
  • ORA-01033: Oracle 초기화 또는 종료 중에 발생하며, 데이터 파일 복구와 관련된 상황에서 함께 나타날 수 있습니다.
DBMS 에러 코드 시리즈

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

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

댓글 남기기