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

ORA-01107
2026년 07월 05일 | DBMS Error 가이드

이 글에서 다루는 내용

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

ORA-01107 database must be mounted for media recovery 는?

ORA-01107 에러는 미디어 복구(Media Recovery)를 수행하려고 할 때 데이터베이스가 MOUNT 상태가 아닌 경우 발생하는 에러입니다. Oracle에서 미디어 복구는 데이터 파일 손상, 아카이브 로그 적용 등의 복구 작업을 의미하며, 이 작업은 반드시 데이터베이스가 MOUNT 상태일 때만 수행할 수 있습니다. 즉, 데이터베이스가 OPEN 상태이거나 NOMOUNT 상태에서 복구 명령을 실행하면 이 에러가 발생합니다.


주요 발생 원인

  • 데이터베이스가 OPEN 상태에서 복구 명령 실행

가장 흔한 원인으로, DBA가 운영 중인 데이터베이스(OPEN 상태)에서 RECOVER DATABASE 또는 RECOVER DATAFILE 명령을 실행할 때 발생합니다. 미디어 복구는 데이터베이스가 완전히 열려 있으면 실행할 수 없으며, 반드시 MOUNT 상태로 전환 후 수행해야 합니다. 특히 전체 데이터베이스 복구(Complete Recovery) 시나리오에서 이 실수가 자주 발생합니다.

  • NOMOUNT 상태에서 복구 명령 실행

데이터베이스를 시작할 때 STARTUP NOMOUNT 명령으로 시작한 후, 컨트롤 파일 복구 없이 곧바로 데이터 파일 복구를 시도할 때 발생합니다. NOMOUNT 상태는 인스턴스만 기동된 상태로, 컨트롤 파일조차 읽지 않은 상태입니다. 따라서 데이터 파일의 위치와 상태를 알 수 없기 때문에 미디어 복구가 불가능합니다.

  • 스크립트 자동화 오류로 인한 상태 불일치

RMAN 또는 SQL*Plus 복구 스크립트에서 데이터베이스 상태 확인 없이 무조건적으로 복구 명령을 실행하는 경우입니다. 자동화된 백업/복구 스크립트가 이전 단계의 실패를 감지하지 못하고 데이터베이스가 MOUNT 상태가 아님에도 복구 명령을 호출하게 됩니다. 이는 야간 자동 복구 스크립트나 DR(Disaster Recovery) 시나리오에서 특히 빈번하게 나타납니다.


해결 방법

원인 1 해결: 데이터베이스를 MOUNT 상태로 전환 후 복구

현재 데이터베이스 상태를 먼저 확인하고, OPEN 상태라면 MOUNT 상태로 전환합니다.

-- 1. 현재 데이터베이스 상태 확인
SELECT STATUS FROM V$INSTANCE;

-- 2. 데이터베이스가 OPEN 상태라면 종료 후 MOUNT로 기동
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;

-- 3. 미디어 복구 수행 (전체 데이터베이스 복구)
RECOVER DATABASE;

-- 4. 복구 완료 후 데이터베이스 OPEN
ALTER DATABASE OPEN;

-- 5. 특정 데이터 파일만 복구하는 경우
RECOVER DATAFILE '/u01/oradata/ORCL/users01.dbf';
-- 또는 파일 번호로 복구
RECOVER DATAFILE 5;

원인 2 해결: NOMOUNT에서 MOUNT로 상태 전환

-- 1. 현재 NOMOUNT 상태에서 MOUNT로 전환
ALTER DATABASE MOUNT;

-- 2. 상태 확인
SELECT STATUS FROM V$INSTANCE;

-- 3. 아카이브 로그를 이용한 복구 수행
RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL;

-- 4. 복구 후 RESETLOGS로 OPEN
ALTER DATABASE OPEN RESETLOGS;

원인 3 해결: 스크립트에 상태 확인 로직 추가

-- 복구 스크립트 실행 전 상태 확인 프로시저 예시
DECLARE
  v_status VARCHAR2(20);
BEGIN
  SELECT STATUS INTO v_status FROM V$INSTANCE;
  
  IF v_status = 'OPEN' THEN
    DBMS_OUTPUT.PUT_LINE('ERROR: Database is OPEN. Shutdown and mount first.');
    RAISE_APPLICATION_ERROR(-20001, 'Database must be in MOUNT state for media recovery.');
  ELSIF v_status = 'STARTED' THEN
    -- NOMOUNT 상태 (STARTED = NOMOUNT)
    DBMS_OUTPUT.PUT_LINE('INFO: Database is in NOMOUNT state. Mounting...');
    EXECUTE IMMEDIATE 'ALTER DATABASE MOUNT';
    DBMS_OUTPUT.PUT_LINE('INFO: Database mounted successfully.');
  ELSIF v_status = 'MOUNTED' THEN
    DBMS_OUTPUT.PUT_LINE('INFO: Database is in MOUNT state. Ready for recovery.');
  END IF;
END;
/

-- RMAN을 사용한 복구 방법 (권장)
-- RMAN은 자동으로 상태를 관리하므로 더 안전합니다.
RMAN TARGET /

-- RMAN 내에서 복구 명령
-- RMAN> STARTUP MOUNT;
-- RMAN> RESTORE DATABASE;
-- RMAN> RECOVER DATABASE;
-- RMAN> ALTER DATABASE OPEN RESETLOGS;

RMAN을 활용한 완전한 복구 시나리오

-- RMAN 복구 전체 시나리오
-- Step 1: RMAN으로 데이터베이스 연결 및 MOUNT 상태로 기동
-- (OS 커맨드라인에서 실행)
-- $ rman target /

-- RMAN 내부 명령:
-- STARTUP FORCE MOUNT;  -- 강제로 MOUNT 상태로 재시작

-- Step 2: 데이터 파일 복원
-- RESTORE DATABASE;

-- Step 3: 아카이브 로그 적용 (복구)
-- RECOVER DATABASE;

-- Step 4: 데이터베이스 OPEN
-- ALTER DATABASE OPEN;

-- 불완전 복구 (특정 시점까지)
-- RECOVER DATABASE UNTIL TIME "TO_DATE('2024-01-15 10:00:00','YYYY-MM-DD HH24:MI:SS')";
-- ALTER DATABASE OPEN RESETLOGS;

-- 복구 후 상태 최종 확인
SELECT INSTANCE_NAME, STATUS, DATABASE_STATUS 
FROM V$INSTANCE;

SELECT FILE#, NAME, STATUS, RECOVER 
FROM V$DATAFILE;

예방 방법

  • 복구 전 데이터베이스 상태 자동 점검 루틴 구축

모든 복구 스크립트의 첫 번째 단계로 반드시 데이터베이스 상태를 확인하는 로직을 포함해야 합니다. V$INSTANCE 뷰를 조회하여 STATUS 컬럼이 ‘MOUNTED’인지 확인하고, 그렇지 않은 경우 자동으로 올바른 상태로 전환하거나 DBA에게 알림을 발송하는 자동화 체계를 구축하세요. RMAN을 사용하는 경우 RMAN 자체가 상태 관리를 일부 자동화해주므로 SQL*Plus 수동 복구보다 RMAN 활용을 권장합니다.

  • 복구 절차 문서화 및 정기적인 복구 훈련 실시

재해 복구(DR) 시나리오에 대한 단계별 Runbook을 작성하고, 각 단계에서 데이터베이스 상태를 명시적으로 표시해 두어야 합니다. 분기별 또는 반기별로 테스트 환경에서 실제 복구 훈련을 실시하여 스크립트와 절차의 정확성을 검증하고, 팀원 모두가 복구 절차를 숙지할 수 있도록 교육하세요.


관련 에러

  • ORA-01109: database not open — 데이터베이스가 OPEN 상태가 아닐 때 일반 쿼리를 실행하면 발생. 복구 작업 이후 OPEN 전환이 제대로 되지 않았을 때 연계되어 나타남.
  • ORA-01113: file N needs media recovery — 특정 데이터 파일이 미디어 복구가 필요한 상태임을 나타내며, ORA-01107과 함께 자주 등장.
  • ORA-01110: data file N: 'filename' — ORA-01113과 함께 발생하여 복구가 필요한 파일의 경로를 알려줌.
  • ORA-00264: no recovery required — 복구가 필요 없는 상태에서 복구 명령을 실행할 때 발생. 복구 완료 후 재확인 시 나타날 수 있음.
  • ORA-01194: file N needs more recovery to be consistent — 불완전 복구 이후 데이터 파일이 아직 일관성을 확보하지 못한 상태. RESETLOGS 없이 OPEN 시도 시 연계 발생.
DBMS 에러 코드 시리즈

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

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

댓글 남기기