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

ORA-01033
2026년 06월 29일 | DBMS Error 가이드

이 글에서 다루는 내용

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

ORA-01033 ORACLE initialization or shutdown in progress 는?

ORA-01033 에러는 Oracle 데이터베이스가 초기화(startup) 또는 종료(shutdown) 작업이 진행 중인 상태에서 클라이언트가 접속을 시도할 때 발생하는 에러입니다. 데이터베이스가 완전히 열린(OPEN) 상태가 아닌 MOUNT 또는 NOMOUNT 단계에 머물러 있거나, 관리자가 shutdown 명령을 실행하는 도중에 일반 사용자가 접속을 요청하면 이 에러가 발생합니다. 특히 데이터베이스 재기동 직후 또는 비정상 종료(crash) 후 recovery 작업이 수행되는 동안 자주 목격되며, 운영 환경에서는 서비스 중단으로 이어질 수 있으므로 신속한 대처가 필요합니다.


주요 발생 원인

1. 데이터베이스가 MOUNT 상태에서 OPEN 단계로 전환되지 못한 경우

가장 흔한 원인으로, 데이터베이스가 startup 명령 이후 MOUNT 단계까지는 완료되었으나 OPEN 단계로 넘어가지 못한 상황입니다. 이는 데이터 파일(datafile) 또는 리두 로그 파일(redo log file)의 손상, 누락, 또는 경로 불일치로 인해 발생할 수 있습니다. DBA가 명시적으로 STARTUP MOUNT 명령을 실행한 뒤 ALTER DATABASE OPEN을 잊고 넘어갔을 때도 동일한 증상이 나타납니다.

2. 비정상 종료(Crash) 후 Instance Recovery 진행 중

Oracle 인스턴스가 OS 레벨 장애, 전원 차단, 또는 백그라운드 프로세스 오류로 인해 비정상적으로 종료된 후 재시작될 때, SMON 프로세스가 자동으로 instance recovery를 수행합니다. 이 recovery 작업이 완료되기 전까지 데이터베이스는 외부 접속을 허용하지 않으며, 대용량 트랜잭션이 롤백 중인 경우 이 시간이 상당히 길어질 수 있습니다. 대규모 OLTP 환경에서는 수십 분에서 수 시간이 소요되는 경우도 있습니다.

3. shutdown 명령 실행 중 접속 시도

DBA가 SHUTDOWN IMMEDIATE 또는 SHUTDOWN TRANSACTIONAL 명령을 실행하는 도중, 새로운 세션이 접속을 시도하면 ORA-01033이 발생합니다. SHUTDOWN ABORT의 경우 즉시 인스턴스를 종료하지만, 이후 재기동 시 recovery가 필요하여 또다시 ORA-01033 상황을 만들어낼 수 있습니다. 운영 스케줄 없이 임의로 shutdown을 수행하는 환경에서 자주 발생하는 원인입니다.


해결 방법

원인 1 해결: 데이터베이스 상태 확인 및 OPEN

먼저 현재 데이터베이스의 상태를 확인합니다.

-- SYS 계정으로 SYSDBA 권한으로 접속 후 확인
SELECT STATUS FROM V$INSTANCE;

-- 또는 상세 상태 확인
SELECT INSTANCE_NAME, STATUS, DATABASE_STATUS
FROM V$INSTANCE;

상태가 MOUNTED로 표시될 경우, 아래 명령으로 OPEN 단계로 전환합니다.

-- 데이터베이스를 OPEN 상태로 전환
ALTER DATABASE OPEN;

만약 특정 데이터 파일에 문제가 있어 OPEN이 실패한다면 아래와 같이 원인을 파악합니다.

-- OPEN 실패 시 문제 파일 확인
SELECT FILE#, STATUS, NAME
FROM V$DATAFILE
WHERE STATUS NOT IN ('SYSTEM', 'ONLINE');

-- 오프라인된 파일 온라인 전환 시도
ALTER DATABASE DATAFILE '/oradata/orcl/users01.dbf' ONLINE;

-- 리두 로그 상태 확인
SELECT GROUP#, STATUS, ARCHIVED
FROM V$LOG;

원인 2 해결: Instance Recovery 모니터링

Recovery 진행 상황을 아래 쿼리로 확인하고, 완료될 때까지 대기합니다.

-- Recovery 진행 상태 확인 (SYSDBA 권한 필요)
SELECT RECOVERY_ESTIMATED_IOS,
       ACTUAL_IOS_DONE,
       ESTIMATED_COMPLETION_TIME
FROM V$INSTANCE_RECOVERY;

-- Alert 로그에서 Recovery 관련 메시지 확인 (OS 레벨)
-- tail -f $ORACLE_BASE/diag/rdbms/<db_name>/<instance>/trace/alert_<instance>.log

-- 현재 롤백 중인 트랜잭션 확인
SELECT USEG.SEGMENT_NAME,
       TXN.START_TIME,
       TXN.STATUS
FROM V$TRANSACTION TXN
JOIN DBA_SEGMENTS USEG
  ON TXN.XIDUSN = USEG.HEADER_BLOCK;

Recovery가 비정상적으로 오래 걸린다면 Alert 로그를 통해 구체적인 오류 메시지를 반드시 확인해야 합니다.


원인 3 해결: Shutdown 완료 후 재기동

Shutdown이 진행 중이라면 DBA가 완료 여부를 확인한 뒤 정상적으로 재기동합니다.

-- SYSDBA로 접속 후 인스턴스 상태 확인
CONNECT / AS SYSDBA

-- 완전한 재기동 절차
SHUTDOWN IMMEDIATE;
STARTUP;

-- 만약 SHUTDOWN ABORT 후 재기동 시 (Recovery 자동 수행됨)
SHUTDOWN ABORT;
STARTUP;

-- 기동 후 최종 상태 확인
SELECT INSTANCE_NAME,
       STATUS,
       DATABASE_STATUS,
       ACTIVE_STATE
FROM V$INSTANCE;

종합 진단 스크립트

실무에서 ORA-01033 발생 시 빠르게 상황을 파악하기 위한 진단 스크립트입니다.

-- 1. 인스턴스 전체 상태 확인
SELECT INSTANCE_NUMBER,
       INSTANCE_NAME,
       HOST_NAME,
       VERSION,
       STATUS,
       DATABASE_STATUS,
       ACTIVE_STATE,
       STARTUP_TIME
FROM V$INSTANCE;

-- 2. 컨트롤 파일 상태 확인
SELECT STATUS, NAME FROM V$CONTROLFILE;

-- 3. 데이터 파일 상태 확인
SELECT FILE#, STATUS, NAME, ENABLED
FROM V$DATAFILE
ORDER BY FILE#;

-- 4. 아카이브 로그 모드 확인
SELECT LOG_MODE FROM V$DATABASE;

-- 5. 현재 접속 가능 여부 테스트 (SYS 권한 필요)
SELECT 'DATABASE IS OPEN AND ACCESSIBLE' AS STATUS
FROM DUAL;

예방 방법

1. 데이터베이스 기동/종료 절차 표준화 및 모니터링 자동화

운영 환경에서는 반드시 표준화된 startup/shutdown 스크립트를 사용하고, 데이터베이스 상태를 주기적으로 모니터링하는 자동화 스크립트를 구성해야 합니다. Oracle Enterprise Manager(OEM) 또는 Zabbix, Nagios와 같은 모니터링 도구를 활용하여 데이터베이스가 OPEN 상태가 아닐 경우 즉시 알림을 받을 수 있도록 설정하고, 아래와 같은 헬스 체크 스크립트를 cron 등으로 주기적으로 실행합니다.

-- 데이터베이스 헬스 체크 스크립트 (5분마다 cron으로 실행 권장)
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS CHECK_TIME,
       INSTANCE_NAME,
       STATUS,
       DATABASE_STATUS
FROM V$INSTANCE
WHERE STATUS != 'OPEN'
   OR DATABASE_STATUS != 'ACTIVE';
-- 결과가 있을 경우 즉시 DBA에게 알림 발송

2. Fast Recovery Area(FRA) 및 Redo Log 충분한 확보

비정상 종료 후 Recovery 시간을 최소화하기 위해 Redo Log 그룹과 멤버를 충분히 구성하고, Fast Recovery Area를 적절히 설정해야 합니다. 또한 MTTR_TARGET 파라미터를 설정하여 인스턴스 복구 시간을 목표치 이하로 유지하도록 Oracle이 자동으로 체크포인트 주기를 조정하게 합니다.

-- MTTR Target 설정 (초 단위, 예: 60초 이내 복구 목표)
ALTER SYSTEM SET FAST_START_MTTR_TARGET = 60 SCOPE=BOTH;

-- 현재 MTTR 설정 및 예상 복구 시간 확인
SELECT TARGET_MTTR,
       ESTIMATED_MTTR,
       RECOVERY_ESTIMATED_IOS
FROM V$INSTANCE_RECOVERY;

-- Redo Log 멀티플렉싱 확인
SELECT GROUP#, MEMBERS, STATUS, BYTES/1024/1024 AS SIZE_MB
FROM V$LOG
ORDER BY GROUP#;

관련 에러

  • ORA-01034: ORACLE not available — 데이터베이스 인스턴스 자체가 기동되지 않은 상태로, ORA-01033과 함께 자주 쌍으로 발생합니다. ORA-01033은 기동 중이지만 OPEN이 안 된 상태, ORA-01034는 아예 인스턴스가 없는 상태입니다.
  • ORA-00600: Internal error code — Recovery 과정에서 내부 오류가 발생하면 ORA-01033 상황과 함께 Alert 로그에 기록되며, Oracle Support에 SR(Service Request)을 열어야 하는 심각한 상황을 의미합니다.
  • ORA-01113: File needs media recovery — 데이터 파일이 media recovery가 필요한 상태일 때 발생하며, OPEN 시도 중 ORA-01033과 연계되어 나타날 수 있습니다.
  • ORA-01122: Database file version check failed — 데이터 파일의 버전이 컨트롤 파일과 불일치할 때 발생하며, 마찬가지로 OPEN 실패와 함께 ORA-01033을 유발합니다.

DBMS 에러 코드 시리즈

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

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

댓글 남기기