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

ORA-01100
2026년 07월 04일 | DBMS Error 가이드

이 글에서 다루는 내용

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

ORA-01100 database already mounted 는?

ORA-01100 에러는 Oracle 데이터베이스를 마운트(MOUNT) 상태로 전환하려 할 때, 해당 데이터베이스가 이미 마운트된 상태임을 시스템이 감지할 경우 발생합니다. 즉, 동일한 인스턴스 또는 다른 인스턴스에서 이미 해당 데이터베이스를 마운트했음에도 불구하고 중복으로 마운트 명령을 실행했을 때 Oracle이 이를 차단하며 발생시키는 에러입니다. 이 에러는 주로 DBA가 데이터베이스 시작(STARTUP) 스크립트를 반복 실행하거나, RAC 환경에서 인스턴스 관리 실수, 또는 자동화 스크립트의 오류로 인해 실무에서 빈번하게 마주치게 됩니다.


주요 발생 원인

1. 이미 마운트된 상태에서 중복 MOUNT 명령 실행

가장 흔한 원인으로, DBA가 데이터베이스의 현재 상태를 확인하지 않고 ALTER DATABASE MOUNT 또는 STARTUP MOUNT 명령을 반복 실행할 때 발생합니다. Oracle은 단일 인스턴스 환경에서 하나의 데이터베이스가 이미 마운트된 상태라면, 동일 명령을 다시 수행하는 것을 허용하지 않으며 즉시 ORA-01100 에러를 반환합니다. 특히 자동화된 배포 스크립트나 야간 배치 작업에서 상태 점검 없이 명령을 실행할 경우 이 문제가 자주 발생합니다.

2. RAC(Real Application Clusters) 환경에서의 인스턴스 충돌

Oracle RAC 환경에서는 여러 인스턴스가 동일한 데이터베이스를 공유합니다. 한 노드에서 이미 데이터베이스를 마운트한 상태에서 다른 노드 또는 동일 노드의 다른 인스턴스가 마운트를 시도할 경우 ORA-01100 에러가 발생할 수 있습니다. 이는 클러스터 내 인스턴스 간 동기화 실패, 네트워크 단절 이후 재시작 시도, 또는 관리자가 인스턴스 상태를 혼동했을 때 주로 발생하며, 운영 환경에서 특히 주의가 필요합니다.

3. 비정상 종료 후 잔류 프로세스 또는 잠금 파일 문제

데이터베이스가 비정상적으로 종료(Crash)된 이후, 일부 백그라운드 프로세스나 공유 메모리 세그먼트, 잠금 파일(lock file)이 OS에 잔류하는 경우가 있습니다. 이 상태에서 Oracle은 데이터베이스가 여전히 마운트된 상태로 인식하여 새로운 마운트 시도를 차단하고 ORA-01100을 반환합니다. 이 경우 단순히 STARTUP 명령을 재실행하는 것으로는 해결되지 않으며, OS 레벨에서의 정리 작업이 필요합니다.


해결 방법

원인 1 해결: 현재 데이터베이스 상태 확인 후 적절한 조치

먼저 데이터베이스의 현재 상태를 정확히 파악하는 것이 우선입니다.

-- 현재 인스턴스 및 데이터베이스 상태 확인
SELECT INSTANCE_NAME, STATUS, DATABASE_STATUS
FROM V$INSTANCE;

-- 데이터베이스 상태 추가 확인
SELECT NAME, OPEN_MODE, MOUNTED_STATUS
FROM V$DATABASE;

만약 이미 MOUNTED 상태라면, 필요에 따라 OPEN 단계로 진행하면 됩니다.

-- 데이터베이스가 MOUNT 상태일 때 OPEN으로 전환
ALTER DATABASE OPEN;

-- 혹은 읽기 전용으로 오픈할 경우
ALTER DATABASE OPEN READ ONLY;

만약 완전히 닫힌 후 재시작이 필요하다면:

-- 데이터베이스 완전 종료 후 재시작
SHUTDOWN IMMEDIATE;
STARTUP;

원인 2 해결: RAC 환경에서 인스턴스 상태 점검

RAC 환경에서는 각 인스턴스의 상태를 개별적으로 확인해야 합니다.

-- 모든 인스턴스의 상태 확인 (RAC 환경)
SELECT INST_ID, INSTANCE_NAME, STATUS, DATABASE_STATUS
FROM GV$INSTANCE
ORDER BY INST_ID;

-- 특정 인스턴스만 종료 후 재시작
-- (해당 노드에서 실행)
SHUTDOWN ABORT;
STARTUP MOUNT;
ALTER DATABASE OPEN;

SRVCTL 명령을 사용한 RAC 인스턴스 관리:

-- OS 레벨에서 인스턴스 상태 확인 (Shell 명령)
-- srvctl status database -d <DB_NAME>
-- srvctl stop instance -d <DB_NAME> -i <INSTANCE_NAME>
-- srvctl start instance -d <DB_NAME> -i <INSTANCE_NAME>

원인 3 해결: 잔류 프로세스 및 잠금 파일 정리

비정상 종료 후 OS에 잔류하는 Oracle 관련 프로세스와 파일을 정리해야 합니다.

-- 현재 연결된 세션 및 프로세스 확인
SELECT SID, SERIAL#, USERNAME, STATUS, PROGRAM
FROM V$SESSION
WHERE STATUS = 'ACTIVE';

-- 공유 메모리 및 세마포어 확인 (OS 레벨 - Linux/Unix)
-- ipcs -m  (공유 메모리 확인)
-- ipcs -s  (세마포어 확인)

-- Oracle 백그라운드 프로세스 강제 종료 후
-- STARTUP FORCE 명령으로 재시작
STARTUP FORCE;

만약 STARTUP FORCE도 실패한다면 다음 순서로 진행합니다:

-- 1단계: 강제 종료
SHUTDOWN ABORT;

-- 2단계: 잠금 파일 확인 및 삭제 (OS 레벨 수행 후)
-- $ORACLE_BASE/diag/rdbms/<DB_NAME>/<INSTANCE_NAME>/
-- lk<INSTANCE_NAME> 파일 삭제 검토

-- 3단계: 재시작
STARTUP;

-- 4단계: alert log 확인으로 정상 시작 여부 검증
-- tail -f $ORACLE_BASE/diag/rdbms/<DB_NAME>/<INSTANCE_NAME>/trace/alert_<INSTANCE_NAME>.log

예방 방법

1. 자동화 스크립트에 상태 점검 로직 반드시 포함

데이터베이스 시작/종료 스크립트를 작성할 때, 반드시 현재 데이터베이스 상태를 먼저 확인한 후 다음 단계를 수행하도록 조건 분기를 넣어야 합니다. 아래와 같이 SQL 조회 결과를 기반으로 분기 처리하는 로직을 표준화하면 중복 실행으로 인한 ORA-01100 에러를 사전에 차단할 수 있습니다.

-- 스크립트 내 상태 확인 표준 쿼리
DECLARE
  v_status VARCHAR2(20);
BEGIN
  SELECT STATUS INTO v_status FROM V$INSTANCE;
  IF v_status = 'MOUNTED' THEN
    DBMS_OUTPUT.PUT_LINE('DB already mounted. Proceeding to OPEN.');
    EXECUTE IMMEDIATE 'ALTER DATABASE OPEN';
  ELSIF v_status = 'OPEN' THEN
    DBMS_OUTPUT.PUT_LINE('DB is already OPEN. No action needed.');
  ELSE
    DBMS_OUTPUT.PUT_LINE('DB status: ' || v_status || '. Please check manually.');
  END IF;
END;
/

2. Oracle Enterprise Manager 또는 모니터링 도구를 통한 실시간 상태 감시

운영 환경에서는 Oracle Enterprise Manager(OEM), Zabbix, Prometheus + Grafana 등의 모니터링 툴을 활용하여 데이터베이스 인스턴스 상태를 실시간으로 감시하고, 비정상적인 상태 변화 시 즉시 알람이 발송되도록 설정해야 합니다. 특히 RAC 환경에서는 각 노드의 인스턴스 상태를 독립적으로 모니터링하고, 이상 감지 시 자동으로 책임자에게 통보되는 체계를 구축하는 것이 장애를 사전에 예방하는 최선의 방법입니다.


관련 에러

  • ORA-01081: cannot start already-running ORACLE — 이미 실행 중인 Oracle 인스턴스를 다시 시작하려 할 때 발생하며, ORA-01100과 함께 자주 나타납니다.
  • ORA-01507: database not mounted — ORA-01100의 반대 상황으로, 데이터베이스가 마운트되지 않은 상태에서 OPEN 또는 특정 작업을 시도할 때 발생합니다.
  • ORA-01012: not logged on — 세션 연결 없이 데이터베이스 명령을 수행할 때 발생하며, 비정상 종료 후 재접속 과정에서 함께 발생할 수 있습니다.
  • ORA-27140: attach to post/wait facility failed — OS 레벨의 공유 메모리 또는 세마포어 문제로 인스턴스 시작이 실패할 때 나타나며, 비정상 종료 후 잔류 리소스 정리 시 관련됩니다.

DBMS 에러 코드 시리즈

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

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

댓글 남기기