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

ORA-01034
2026년 06월 30일 | DBMS Error 가이드

이 글에서 다루는 내용

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

ORA-01034 ORACLE not available 는?

ORA-01034 에러는 클라이언트 애플리케이션 또는 사용자가 Oracle 데이터베이스에 접속을 시도할 때, 데이터베이스 인스턴스가 시작되지 않았거나 정상적으로 운영 중이지 않은 상태일 때 발생하는 에러입니다. 쉽게 말해 Oracle 데이터베이스 서비스 자체가 가동되어 있지 않거나 비정상적으로 종료된 상황에서 접속을 시도할 때 나타납니다. 이 에러는 Oracle DBA라면 운영 환경에서 반드시 한 번 이상 마주치게 되는 매우 빈번한 에러 중 하나이며, 신속한 원인 파악과 조치가 중요합니다.


주요 발생 원인

1. Oracle 인스턴스가 기동되지 않은 상태

가장 흔한 원인으로, 서버 재부팅 이후 Oracle 인스턴스가 자동으로 시작되지 않았거나 수동으로 기동하지 않은 경우입니다. 운영 서버의 OS 레벨에서 예기치 않은 재시작이 발생했을 때 oraenv 설정이나 자동 시작 스크립트가 누락되어 있으면 이 문제가 발생합니다. 특히 윈도우 환경에서는 OracleService{SID} 서비스가 중지된 경우, 리눅스/유닉스 환경에서는 startup 명령이 실행되지 않은 경우에 빈번히 발생합니다.

2. Oracle 인스턴스의 비정상 종료 (Crash)

메모리 부족(OOM), 하드웨어 장애, OS 강제 종료 등으로 Oracle 인스턴스가 비정상적으로 종료된 경우입니다. 이 상황에서는 단순히 인스턴스를 재기동하는 것만으로 해결될 수도 있지만, 경우에 따라 Instance Recovery가 필요할 수 있습니다. Alert 로그와 trace 파일을 확인하여 정확한 원인을 파악하는 것이 선행되어야 합니다.

3. 환경 변수 설정 오류 (ORACLE_SID, ORACLE_HOME 미설정)

Oracle 클라이언트 또는 서버에서 ORACLE_SID, ORACLE_HOME 환경 변수가 올바르게 설정되지 않은 경우, 시스템이 엉뚱한 인스턴스나 존재하지 않는 인스턴스에 접속을 시도하게 됩니다. 특히 여러 Oracle 버전이나 여러 인스턴스가 동일 서버에 공존하는 환경에서 자주 발생하며, DBA가 직접 서버에 접속하여 작업할 때도 환경 변수 설정을 간과하면 이 에러를 만날 수 있습니다.


해결 방법

원인 1 해결: Oracle 인스턴스 기동

먼저 현재 인스턴스 상태를 확인하고 기동합니다.

-- 1. OS에서 Oracle 프로세스 확인 (Linux/Unix)
-- $ ps -ef | grep pmon

-- 2. sqlplus에 sysdba로 접속
-- $ sqlplus / as sysdba

-- 3. 인스턴스 상태 확인
SELECT STATUS FROM V$INSTANCE;

-- 4. 인스턴스 기동 (NOMOUNT → MOUNT → OPEN 순서)
STARTUP;

-- 또는 단계별 기동이 필요한 경우
STARTUP NOMOUNT;
ALTER DATABASE MOUNT;
ALTER DATABASE OPEN;
-- Windows 환경에서는 CMD에서 서비스 시작
-- net start OracleServiceORCL  (ORCL은 SID명)

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

원인 2 해결: 비정상 종료 후 복구

비정상 종료 후에는 Alert 로그를 먼저 확인한 뒤 기동합니다.

-- Alert 로그 위치 확인
SELECT VALUE FROM V$DIAG_INFO WHERE NAME = 'Diag Trace';

-- 강제 복구가 필요한 경우 (일반적으로는 STARTUP만으로 자동 Instance Recovery 수행)
STARTUP;

-- 만약 STARTUP 중 에러 발생 시 RESTRICT 모드로 기동
STARTUP RESTRICT;

-- 필요 시 복구 수행
RECOVER DATABASE;

-- 복구 완료 후 RESTRICT 해제
ALTER SYSTEM DISABLE RESTRICTED SESSION;
-- 데이터파일 오프라인 후 부분 복구가 필요한 경우
ALTER DATABASE DATAFILE '/oradata/users01.dbf' OFFLINE;
ALTER DATABASE OPEN;
RECOVER DATAFILE '/oradata/users01.dbf';
ALTER DATABASE DATAFILE '/oradata/users01.dbf' ONLINE;

원인 3 해결: 환경 변수 설정 확인 및 수정

-- Linux/Unix 환경에서 환경 변수 확인 및 설정
-- $ echo $ORACLE_SID
-- $ echo $ORACLE_HOME

-- oraenv를 사용한 환경 변수 설정 (Linux)
-- $ . oraenv
-- ORACLE_SID = [현재값] ? ORCL   ← 올바른 SID 입력

-- 환경 변수 수동 설정 예시 (.bash_profile)
-- export ORACLE_BASE=/u01/app/oracle
-- export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/dbhome_1
-- export ORACLE_SID=ORCL
-- export PATH=$ORACLE_HOME/bin:$PATH

-- 설정 후 sqlplus 재접속 확인
-- $ sqlplus / as sysdba

-- 접속 후 현재 SID 확인
SELECT SYS_CONTEXT('USERENV', 'DB_NAME') AS DB_NAME,
       SYS_CONTEXT('USERENV', 'INSTANCE_NAME') AS INSTANCE_NAME
FROM DUAL;
-- tnsnames.ora를 통한 원격 접속 시 TNS 설정 확인
-- tnsping으로 TNS 연결 테스트
-- $ tnsping ORCL

-- 원격 접속 테스트
-- $ sqlplus scott/tiger@ORCL

-- listener 상태 확인 및 재기동
-- $ lsnrctl status
-- $ lsnrctl start

예방 방법

1. Oracle 자동 시작 스크립트 등록 및 Health Check 자동화

서버 재부팅 후 Oracle 인스턴스와 리스너가 자동으로 시작되도록 OS 레벨에서 등록해두는 것이 필수입니다. Linux 환경에서는 /etc/oratab에 자동 기동 플래그(Y)를 설정하고, dbstart/dbshut 스크립트를 systemd 또는 rc.local에 등록합니다. 또한 모니터링 도구(Oracle Enterprise Manager, Zabbix, 자체 쉘 스크립트 등)를 활용하여 인스턴스 상태를 주기적으로 점검하고, 이상 발생 시 즉각 알림(Alert)을 받을 수 있도록 구성합니다.

-- 정기 헬스체크 쿼리 예시 (모니터링 스크립트에 포함)
SELECT INSTANCE_NAME,
       HOST_NAME,
       VERSION,
       STATUS,
       DATABASE_STATUS,
       TO_CHAR(STARTUP_TIME, 'YYYY-MM-DD HH24:MI:SS') AS STARTUP_TIME
FROM V$INSTANCE;

2. Alert 로그 및 주요 뷰 정기 모니터링

ORA-01034가 발생하기 전에 선행되는 에러들(ORA-00600, ORA-07445 등)이 Alert 로그에 기록되는 경우가 많습니다. 주기적으로 Alert 로그를 모니터링하고 이상 징후를 사전에 감지하는 습관을 들여야 합니다. 또한 AWR, ASH 리포트를 활용하여 시스템 자원(메모리, CPU, I/O) 사용 추이를 분석하고, 잠재적인 장애 요인을 사전에 제거하는 것이 중요합니다.

-- Alert 로그 최근 에러 확인 (Oracle 11g 이상)
SELECT ORIGINATING_TIMESTAMP,
       MESSAGE_TEXT
FROM V$DIAG_ALERT_EXT
WHERE MESSAGE_TEXT LIKE '%ORA-%'
  AND ORIGINATING_TIMESTAMP > SYSDATE - 1
ORDER BY ORIGINATING_TIMESTAMP DESC;

관련 에러

  • ORA-01033: ORACLE initialization or shutdown in progress — 데이터베이스가 기동 중이거나 종료 중인 상태로, ORA-01034와 유사하게 접속 불가 상태를 나타냅니다.
  • ORA-12541: TNS:no listener — 리스너가 기동되지 않아 원격 접속이 불가한 경우로, ORA-01034와 함께 자주 발생합니다.
  • ORA-12514: TNS:listener does not currently know of service requested — 리스너가 해당 서비스를 인식하지 못하는 경우이며, 인스턴스 재기동 또는 리스너 재등록으로 해결합니다.
  • ORA-00600: Internal error code — 인스턴스 크래시의 근본 원인이 될 수 있으며, ORA-01034 발생 직전 Alert 로그에서 발견되는 경우가 많습니다.
  • ORA-03113: end-of-file on communication channel — 서버 프로세스가 비정상 종료될 때 발생하며, 이후 재접속 시 ORA-01034로 이어질 수 있습니다.

DBMS 에러 코드 시리즈

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

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

댓글 남기기