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

ORA-65100
2026년 10월 16일 | DBMS Error 가이드

이 글에서 다루는 내용

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

ORA-65100 database is not mounted as a CDB 는?

ORA-65100 에러는 Oracle 멀티테넌트 아키텍처(CDB/PDB) 환경에서 CDB(Container Database)로 마운트되지 않은 데이터베이스에 대해 CDB 전용 작업을 시도할 때 발생하는 오류입니다. 즉, 현재 접속된 데이터베이스가 일반 Non-CDB로 생성되었거나, CDB 모드가 아닌 상태에서 CDB 관련 명령어(PDB 생성, CDB 파라미터 변경 등)를 실행할 때 Oracle 엔진이 이를 거부하며 발생합니다. Oracle 12c 이후 멀티테넌트 기능이 도입된 이래 CDB/PDB 혼용 환경에서 자주 마주치는 오류 중 하나로, 아키텍처에 대한 정확한 이해 없이 DBA 작업을 수행할 경우 빈번하게 발생합니다.


주요 발생 원인

1. Non-CDB 데이터베이스에서 CDB 전용 명령 실행

가장 흔한 원인으로, 데이터베이스가 Non-CDB(전통적인 단일 인스턴스)로 생성되었음에도 불구하고 CREATE PLUGGABLE DATABASE, ALTER SESSION SET CONTAINER 등 CDB 전용 명령을 실행하는 경우입니다. Oracle 11g 이하에서 운영하던 DB를 12c 이상으로 업그레이드하면서 CDB 변환 없이 그대로 사용하는 경우 특히 자주 발생합니다. 이때는 SELECT CDB FROM V$DATABASE; 쿼리로 현재 DB 유형을 먼저 확인해야 합니다.

2. 잘못된 데이터베이스 서비스 또는 TNS 접속 대상 오류

여러 Oracle 인스턴스를 운영하는 환경에서 DBA가 의도한 CDB 인스턴스가 아닌 Non-CDB 인스턴스에 실수로 접속한 상태에서 CDB 관련 작업을 시도하는 경우입니다. 특히 개발, 스테이징, 운영 환경이 혼재된 서버에서 ORACLE_SID 또는 TNS 접속 정보를 혼동하는 경우 이 오류가 발생합니다. sqlplus 접속 전 반드시 현재 접속 환경을 검증하는 습관이 필요합니다.

3. ENABLE_PLUGGABLE_DATABASE 파라미터 미설정 또는 DB 재생성 필요

Oracle 12c 이상에서 데이터베이스 생성 시 enable_pluggable_database=true 파라미터를 누락하거나, DBCA(Database Configuration Assistant) 에서 CDB 옵션을 체크하지 않고 생성한 경우입니다. 이 경우 데이터베이스 자체가 Non-CDB 구조를 갖게 되며, 사후에 단순 파라미터 변경만으로는 CDB로 전환이 불가능합니다. 반드시 DB 재생성 또는 DBMS_PDB 패키지를 활용한 Non-CDB to PDB 전환 절차를 거쳐야 합니다.


해결 방법

Step 1. 현재 데이터베이스 유형 확인

가장 먼저 현재 접속된 데이터베이스가 CDB인지 Non-CDB인지 확인합니다.

-- 데이터베이스 CDB 여부 확인
SELECT NAME, CDB, CON_ID, DB_UNIQUE_NAME
FROM   V$DATABASE;

-- CDB = YES : CDB 환경
-- CDB = NO  : Non-CDB 환경 (ORA-65100 발생 가능)
-- 현재 컨테이너(CDB$ROOT 또는 PDB) 확인
SELECT SYS_CONTEXT('USERENV', 'CON_NAME') AS CURRENT_CONTAINER,
       SYS_CONTEXT('USERENV', 'CON_ID')   AS CURRENT_CON_ID
FROM   DUAL;

Step 2. 접속 환경 검증 (잘못된 인스턴스 접속 오류 시)

-- OS 레벨에서 ORACLE_SID 확인 (Linux/Unix)
-- $ echo $ORACLE_SID

-- sqlplus 접속 후 인스턴스 확인
SELECT INSTANCE_NAME, HOST_NAME, VERSION, STATUS
FROM   V$INSTANCE;

-- 등록된 서비스 목록 확인
SELECT NAME, PDB
FROM   V$SERVICES
ORDER BY PDB;

올바른 CDB 인스턴스에 접속하려면 tnsnames.ora 또는 sqlplus 접속 문자열을 수정합니다.

-- CDB$ROOT(관리자 모드)로 접속 예시
-- sqlplus sys/password@//hostname:1521/CDB_SERVICE_NAME as sysdba

-- 접속 후 PDB 목록 확인
SHOW PDBS;
-- 또는
SELECT CON_ID, NAME, OPEN_MODE, RESTRICTED
FROM   V$PDBS
ORDER BY CON_ID;

Step 3. Non-CDB를 PDB로 전환 (DBMS_PDB 활용)

이미 운영 중인 Non-CDB를 CDB 환경의 PDB로 편입시켜야 할 경우 아래 절차를 따릅니다.

-- [Non-CDB 측 작업] Non-CDB를 READ ONLY로 오픈
SHUTDOWN IMMEDIATE;
STARTUP OPEN READ ONLY;

-- Non-CDB XML 매니페스트 파일 생성
EXEC DBMS_PDB.DESCRIBE(
    PDB_DESCR_FILE => '/oracle/admin/noncdb_manifest.xml'
);

SHUTDOWN IMMEDIATE;
-- [CDB 측 작업] 호환성 검사
-- CDB에 sysdba로 접속 후 실행
DECLARE
    v_result BOOLEAN;
BEGIN
    v_result := DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
        PDB_DESCR_FILE => '/oracle/admin/noncdb_manifest.xml',
        PDB_NAME       => 'NEW_PDB'
    );
    IF v_result THEN
        DBMS_OUTPUT.PUT_LINE('Compatible: TRUE');
    ELSE
        DBMS_OUTPUT.PUT_LINE('Compatible: FALSE - Check PDB_PLUG_IN_VIOLATIONS');
    END IF;
END;
/

-- 비호환 항목 확인
SELECT NAME, CAUSE, TYPE, STATUS, MESSAGE
FROM   PDB_PLUG_IN_VIOLATIONS
WHERE  NAME = 'NEW_PDB';
-- Non-CDB를 PDB로 플러그인
CREATE PLUGGABLE DATABASE NEW_PDB
    USING '/oracle/admin/noncdb_manifest.xml'
    COPY
    FILE_NAME_CONVERT = ('/oracle/oradata/NONCDB/',
                         '/oracle/oradata/NEW_PDB/');

-- PDB 오픈 및 Non-CDB 딕셔너리 동기화
ALTER PLUGGABLE DATABASE NEW_PDB OPEN;

ALTER SESSION SET CONTAINER = NEW_PDB;

-- noncdb_to_pdb.sql 스크립트 실행 (필수)
@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql

Step 4. 신규 CDB 생성 (처음부터 CDB로 구성)

기존 DB를 재생성해야 하는 경우, 반드시 CDB 옵션을 포함합니다.

-- init.ora 또는 SPFILE에 CDB 활성화 파라미터 설정 확인
-- (DBCA 사용 시 자동 설정되지만, 수동 생성 시 필수)

-- CREATE DATABASE 구문에 ENABLE PLUGGABLE DATABASE 포함
CREATE DATABASE NEWCDB
    USER SYS   IDENTIFIED BY oracle
    USER SYSTEM IDENTIFIED BY oracle
    LOGFILE GROUP 1 ('/oracle/redo/redo01.log') SIZE 200M,
            GROUP 2 ('/oracle/redo/redo02.log') SIZE 200M
    MAXLOGFILES 32
    MAXLOGMEMBERS 5
    CHARACTER SET AL32UTF8
    NATIONAL CHARACTER SET AL16UTF16
    EXTENT MANAGEMENT LOCAL
    DATAFILE '/oracle/oradata/NEWCDB/system01.dbf' SIZE 1G AUTOEXTEND ON
    SYSAUX DATAFILE '/oracle/oradata/NEWCDB/sysaux01.dbf' SIZE 1G AUTOEXTEND ON
    DEFAULT TABLESPACE USERS
        DATAFILE '/oracle/oradata/NEWCDB/users01.dbf' SIZE 500M AUTOEXTEND ON
    DEFAULT TEMPORARY TABLESPACE TEMP
        TEMPFILE '/oracle/oradata/NEWCDB/temp01.dbf' SIZE 100M AUTOEXTEND ON
    UNDO TABLESPACE UNDOTBS1
        DATAFILE '/oracle/oradata/NEWCDB/undo01.dbf' SIZE 500M AUTOEXTEND ON
    ENABLE PLUGGABLE DATABASE       -- ★ 핵심 옵션
        SEED FILE_NAME_CONVERT = ('/oracle/oradata/NEWCDB/',
                                   '/oracle/oradata/pdbseed/');

예방 방법

1. 데이터베이스 접속 직후 환경 확인 스크립트 표준화

모든 DBA 작업 세션 시작 시 아래 스크립트를 login.sql에 등록하여 자동 실행되도록 설정합니다. 이를 통해 현재 접속된 데이터베이스 유형(CDB/Non-CDB), 현재 컨테이너, 인스턴스 정보를 즉시 파악할 수 있으며, 잘못된 인스턴스에서 작업하는 실수를 원천 차단할 수 있습니다.

-- $ORACLE_HOME/sqlplus/admin/login.sql 또는 개인 login.sql에 등록
SET FEEDBACK OFF
PROMPT +-----------------------------------------------+
PROMPT | Oracle Instance Information                   |
PROMPT +-----------------------------------------------+
SELECT INSTANCE_NAME,
       HOST_NAME,
       VERSION,
       STATUS,
       (SELECT CDB FROM V$DATABASE)        AS IS_CDB,
       SYS_CONTEXT('USERENV','CON_NAME')   AS CONTAINER
FROM   V$INSTANCE;
SET FEEDBACK ON

2. DBCA 및 운영 표준 문서에 CDB 생성 의무화 정책 수립

Oracle 12c 이상 환경에서는 신규 데이터베이스 생성 시 반드시 CDB 형태로 생성하는 것을 팀 내 표준으로 문서화하고, DBCA 사용 시 CDB 옵션 체크 여부를 2인 검토(4-eyes principle) 하도록 운영 절차를 수립합니다. Non-CDB는 Oracle 21c부터 공식적으로 지원이 종료(Deprecated)되었으므로, 신규 구축 시 Non-CDB 선택은 기술 부채가 됩니다.


관련 에러

  • ORA-65040: operation not allowed from within a pluggable database — PDB 내부에서 CDB 전용 작업 시도 시 발생. CDB$ROOT로 전환 후 재실행 필요.
  • ORA-65048: error encountered when switching to pluggable database — PDB 전환(ALTER SESSION SET CONTAINER) 실패 시 발생. PDB 상태 및 권한 확인 필요.
  • ORA-65011: Pluggable database does not exist — 존재하지 않는 PDB 이름 지정 시 발생. V$PDBS 뷰로 PDB 목록 확인 필요.
  • ORA-01033: ORACLE initialization or shutdown in progress — DB 마운트/오픈 상태 불완전 시 발생. CDB 기동 상태와 함께 PDB OPEN 상태도 병행 확인 필요.
  • ORA-65131: operation is not allowed unless connected to the root of a CDB — 특정 관리 작업이 CDB$ROOT에서만 허용될 때 발생.

DBMS 에러 코드 시리즈

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

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

댓글 남기기