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

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

이 글에서 다루는 내용

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

ORA-01102 cannot mount database in EXCLUSIVE mode 는?

ORA-01102 에러는 Oracle 데이터베이스를 EXCLUSIVE 모드로 마운트하려 할 때, 이미 다른 인스턴스나 프로세스가 해당 데이터베이스를 점유하고 있어 마운트에 실패할 때 발생합니다. 주로 RAC(Real Application Clusters) 환경이 아닌 단일 인스턴스 환경에서 동일한 데이터베이스를 두 번 이상 기동하려 하거나, 이전 인스턴스가 비정상 종료된 후 잠금 파일(sgadef.dbf 또는 lk 파일)이 남아 있을 때 주로 발생합니다. 이 에러는 데이터베이스 시작(STARTUP) 과정 중 MOUNT 단계에서 발생하며, 운영 환경에서 갑작스러운 서비스 중단을 야기할 수 있어 신속한 원인 파악과 대처가 매우 중요합니다.


주요 발생 원인

  • 잠금 파일(Lock File)이 삭제되지 않고 남아 있는 경우

Oracle 인스턴스가 비정상 종료(OS 크래시, 강제 kill 등)되면 $ORACLE_HOME/dbs/ 디렉토리 아래에 lk 또는 sgadef.dbf 파일이 남아 있을 수 있습니다. 다음 번 인스턴스 기동 시 Oracle은 이 파일의 존재를 확인하고 이미 다른 인스턴스가 마운트 중이라고 판단하여 ORA-01102를 발생시킵니다. 특히 자동화된 스크립트나 HA(High Availability) 솔루션에 의해 재기동이 시도될 때 이 상황이 자주 목격됩니다.

  • 동일한 데이터베이스에 대해 두 개 이상의 인스턴스가 동시에 기동을 시도하는 경우

단일 인스턴스 환경(non-RAC)에서 실수로 동일한 ORACLE_SID를 가진 두 번째 인스턴스를 기동하려 할 때 이 에러가 발생합니다. 예를 들어, DBA가 기존 인스턴스가 살아있음을 모르고 재기동 명령을 실행하거나, 배치 스크립트가 중복 실행되는 경우가 해당됩니다. 이 경우 ps -ef | grep pmon 명령어로 이미 기동 중인 PMON 프로세스를 확인하는 것이 첫 번째 진단 단계입니다.

  • 공유 메모리(SGA) 세그먼트가 해제되지 않고 잔존하는 경우

Oracle 인스턴스가 강제 종료되면 System Global Area(SGA)에 해당하는 공유 메모리 세그먼트가 OS에서 완전히 해제되지 않을 수 있습니다. 이 잔존 공유 메모리 세그먼트는 새로운 인스턴스 기동 시 충돌을 일으키며, ORA-01102와 함께 ORA-27154, ORA-27300 등의 연관 에러를 동반하기도 합니다. ipcs -m 명령으로 잔존 공유 메모리를 확인하고 ipcrm 명령으로 수동 정리가 필요할 수 있습니다.


해결 방법

1단계: 현재 기동 중인 Oracle 프로세스 확인

먼저 동일한 SID로 이미 기동 중인 인스턴스가 있는지 확인합니다.

-- OS 레벨에서 확인 (Linux/Unix)
-- $ ps -ef | grep pmon
-- $ ps -ef | grep ora_pmon_ORCL

-- Oracle 인스턴스 상태 확인 (sqlplus 접속 후)
SELECT instance_name, status, database_status
FROM v$instance;

2단계: 잠금 파일 확인 및 제거

Oracle 데이터베이스가 완전히 종료된 상태임을 확인한 후 잠금 파일을 제거합니다.

-- sqlplus에서 현재 인스턴스 강제 종료 (기동 중인 경우)
SHUTDOWN ABORT;

-- OS 레벨에서 잠금 파일 위치 확인 및 삭제
-- $ ls -la $ORACLE_HOME/dbs/lk*
-- $ ls -la $ORACLE_HOME/dbs/sgadef*
-- $ rm -f $ORACLE_HOME/dbs/lkORCL
-- $ rm -f $ORACLE_HOME/dbs/sgadefORCL.dbf

-- 파일 제거 후 재기동
STARTUP;

3단계: 잔존 공유 메모리 세그먼트 정리 (OS 레벨)

-- v$sgainfo를 통해 SGA 관련 정보 확인 (인스턴스 기동 가능할 경우)
SELECT name, bytes, resizeable
FROM v$sgainfo;

-- 인스턴스 정상 종료 시도
SHUTDOWN IMMEDIATE;
-- 또는 강제 종료
SHUTDOWN ABORT;

OS 레벨 공유 메모리 정리 (Shell):

-- 아래는 OS 명령어이나 DBA 작업 흐름 참고용으로 함께 기재합니다.
-- ipcs -m 으로 공유 메모리 확인
-- ipcs -m | grep oracle
-- ipcrm -m <shmid>  <-- 해당 세그먼트 ID 지정하여 제거

-- 정리 후 데이터베이스 재기동
STARTUP MOUNT;
ALTER DATABASE OPEN;

4단계: RAC 환경에서의 확인

RAC 환경이라면 다른 노드에서 인스턴스가 기동 중인지 확인해야 합니다.

-- 다른 노드의 인스턴스 상태 확인 (GV$ 뷰 사용)
SELECT inst_id, instance_name, host_name, status
FROM gv$instance
ORDER BY inst_id;

-- 특정 인스턴스만 기동하고 싶은 경우
STARTUP RESTRICT;

-- 또는 MOUNT 후 단계적으로 OPEN
STARTUP MOUNT;
ALTER DATABASE OPEN;

5단계: alert log를 통한 정밀 진단

-- alert log 위치 확인
SELECT value
FROM v$diag_info
WHERE name = 'Diag Trace';

-- 또는 아래 쿼리로 ADR 홈 디렉토리 확인
SELECT value
FROM v$parameter
WHERE name = 'background_dump_dest';

-- alert log 내 에러 확인 후 재기동
STARTUP;

예방 방법

  • 정상적인 Shutdown 절차 준수 및 스크립트 자동화

데이터베이스를 종료할 때는 반드시 SHUTDOWN IMMEDIATE 또는 SHUTDOWN NORMAL을 사용하여 잠금 파일과 공유 메모리가 정상적으로 해제되도록 합니다. OS 재부팅이나 패치 작업 전에는 항상 Oracle 인스턴스를 먼저 정상 종료하는 절차를 SOP(표준운영절차)에 포함시키고, dbstart/dbshut 스크립트 또는 systemd 서비스 유닛을 활용하여 자동화된 정상 기동/종료가 이루어지도록 구성합니다. 비정상 종료가 불가피한 상황이라면 이후 반드시 $ORACLE_HOME/dbs/ 내 잠금 파일 잔존 여부를 점검하는 체크리스트를 운영합니다.

  • 모니터링 및 운영 환경 표준화

Oracle Enterprise Manager(OEM) 또는 별도의 모니터링 솔루션을 통해 인스턴스 상태를 실시간으로 감시하고, 비정상 종료 이벤트 발생 시 즉각적인 알림이 울리도록 설정합니다. 특히 동일한 ORACLE_SID가 여러 환경(개발/운영)에 혼재하지 않도록 명명 규칙을 표준화하고, 기동/종료 권한을 특정 DBA 계정으로만 제한하여 실수로 인한 중복 기동을 방지합니다. 정기적으로 $ORACLE_HOME/dbs/ 디렉토리의 lk 파일 및 sgadef 파일 존재 여부를 점검하는 배치 스크립트를 운영하는 것도 좋은 방법입니다.


관련 에러

  • ORA-01100: Database already mounted — 데이터베이스가 이미 마운트된 상태에서 중복 마운트 시도 시 발생하며 ORA-01102와 유사한 맥락에서 나타납니다.
  • ORA-27154: post/wait create failed — 공유 메모리나 세마포어 관련 OS 레벨 문제로 발생하며 ORA-01102와 함께 나타나는 경우가 많습니다.
  • ORA-27300 / ORA-27301 / ORA-27302: OS-dependent system call 실패 관련 에러로, 공유 메모리 세그먼트 잔존 문제 진단 시 함께 확인해야 합니다.
  • ORA-01507: database not mounted — ORA-01102 해결 과정에서 MOUNT 단계를 건너뛰고 OPEN을 시도할 때 발생할 수 있으므로 단계적 기동 절차를 준수해야 합니다.

DBMS 에러 코드 시리즈

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

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

댓글 남기기