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

ORA-65219
2026년 10월 20일 | DBMS Error 가이드

이 글에서 다루는 내용

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

ORA-65219 cannot convert a non-CDB to CDB 는?

ORA-65219 에러는 기존의 비-CDB(Non-Container Database) 환경을 CDB(Container Database) 구조로 전환하려 할 때 발생하는 오류입니다. Oracle 12c 이상부터 도입된 멀티테넌트 아키텍처에서는 데이터베이스를 CDB와 PDB(Pluggable Database)로 구분하는데, 잘못된 절차나 지원되지 않는 방식으로 변환을 시도할 때 이 에러가 발생합니다. 특히 Oracle 19c 이후부터는 non-CDB 방식이 공식적으로 deprecated 처리되어 많은 DBA들이 마이그레이션 과정에서 이 에러를 접하게 됩니다.


주요 발생 원인

  • DBMS_PDB 패키지를 통한 잘못된 변환 시도

non-CDB를 PDB로 직접 변환하려 할 때 내부적으로 지원되지 않는 옵션을 사용하면 이 에러가 발생합니다. Oracle에서는 non-CDB를 CDB로 직접 변환하는 기능을 제공하지 않으며, 반드시 정해진 절차(DBMS_PDB.DESCRIBE → XML 생성 → PDB로 플러그인)를 따라야 합니다. 절차를 건너뛰거나 파라미터를 잘못 지정하면 ORA-65219가 발생합니다.

  • 초기화 파라미터(ENABLE_PLUGGABLE_DATABASE) 미설정 또는 오설정

CDB를 생성하거나 non-CDB를 CDB 환경으로 전환하기 위해서는 반드시 ENABLE_PLUGGABLE_DATABASE=TRUE 파라미터가 설정되어 있어야 합니다. 이 파라미터가 FALSE이거나 누락된 상태에서 변환을 시도하면 에러가 발생합니다. 또한 이 파라미터는 데이터베이스 생성 이후에는 변경이 불가능하므로 사전에 반드시 확인해야 합니다.

  • Oracle 버전 호환성 문제 및 지원되지 않는 에디션 사용

Oracle Standard Edition에서는 멀티테넌트 기능이 제한적으로만 지원되며, 특정 버전에서는 non-CDB → PDB 변환 기능 자체가 지원되지 않습니다. Oracle 21c부터는 모든 데이터베이스가 CDB 구조로만 생성되므로, 구버전 데이터베이스를 업그레이드하면서 잘못된 방식으로 변환을 시도할 경우 이 에러가 발생합니다. 사용 중인 Oracle 버전과 에디션이 해당 기능을 지원하는지 사전 확인이 필수입니다.


해결 방법

방법 1: non-CDB를 PDB로 올바르게 변환하는 절차

non-CDB를 CDB 내 PDB로 변환하는 공식적인 방법은 DBMS_PDB.DESCRIBE를 사용하는 것입니다. 아래 절차를 순서대로 진행하세요.

Step 1: non-CDB에서 XML 디스크립션 파일 생성

-- non-CDB 데이터베이스에 접속 후 READ ONLY 모드로 전환
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE OPEN READ ONLY;

-- XML 파일 생성 (non-CDB에서 실행)
BEGIN
  DBMS_PDB.DESCRIBE(
    pdb_descr_file => '/u01/app/oracle/oradata/NONCDB/noncdb.xml'
  );
END;
/

-- 생성 후 데이터베이스 종료
SHUTDOWN IMMEDIATE;

Step 2: 대상 CDB에서 호환성 검사

-- 대상 CDB에 SYSDBA로 접속
-- 호환성 여부 사전 점검
SET SERVEROUTPUT ON
DECLARE
  v_compatible CONSTANT VARCHAR2(3) :=
    CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
           pdb_descr_file => '/u01/app/oracle/oradata/NONCDB/noncdb.xml',
           pdb_name       => 'NEWPDB')
    WHEN TRUE THEN 'YES'
    ELSE 'NO'
    END;
BEGIN
  DBMS_OUTPUT.PUT_LINE('Compatible: ' || v_compatible);
END;
/

-- 비호환 항목 확인 (YES가 아닐 경우)
SELECT name, cause, type, status, message, action
FROM   PDB_PLUG_IN_VIOLATIONS
WHERE  name = 'NEWPDB'
ORDER BY time;

Step 3: non-CDB를 PDB로 플러그인

-- CDB에서 새로운 PDB 생성 (XML 파일 기반)
CREATE PLUGGABLE DATABASE NEWPDB
  USING '/u01/app/oracle/oradata/NONCDB/noncdb.xml'
  COPY
  FILE_NAME_CONVERT = (
    '/u01/app/oracle/oradata/NONCDB/',
    '/u01/app/oracle/oradata/NEWPDB/'
  );

-- PDB 오픈
ALTER PLUGGABLE DATABASE NEWPDB OPEN;

-- non-CDB 메타데이터 동기화 스크립트 실행
ALTER SESSION SET CONTAINER = NEWPDB;

@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql

Step 4: 변환 완료 후 상태 확인

-- CDB 루트에서 PDB 상태 확인
SELECT con_id, name, open_mode, restricted, status
FROM   v$pdbs
WHERE  name = 'NEWPDB';

-- 데이터파일 경로 확인
SELECT con_id, file#, name
FROM   v$datafile
WHERE  con_id = (SELECT con_id FROM v$pdbs WHERE name = 'NEWPDB');

방법 2: ENABLE_PLUGGABLE_DATABASE 파라미터 확인 및 신규 CDB 생성

기존 non-CDB를 직접 CDB로 변경하는 것은 불가능하므로, 새로운 CDB를 생성한 후 데이터를 이전하는 방법을 사용합니다.

-- 현재 데이터베이스가 CDB인지 확인
SELECT name, cdb, con_id FROM v$database;

-- 파라미터 확인
SHOW PARAMETER enable_pluggable_database;

-- 신규 CDB 생성 예시 (DBCA 또는 SQL 방식)
-- spfile에 파라미터 추가 후 새 데이터베이스 생성
CREATE DATABASE NEWCDB
  USER SYS IDENTIFIED BY oracle
  USER SYSTEM IDENTIFIED BY oracle
  ENABLE PLUGGABLE DATABASE
  SEED FILE_NAME_CONVERT = (
    '/u01/app/oracle/oradata/NEWCDB/',
    '/u01/app/oracle/oradata/pdbseed/'
  );

방법 3: Data Pump를 이용한 데이터 이전 (우회 방법)

변환이 어려운 경우 Data Pump를 활용한 논리적 마이그레이션을 고려하세요.

-- non-CDB에서 전체 export
expdp system/oracle@NONCDB \
  FULL=Y \
  DUMPFILE=full_export.dmp \
  LOGFILE=full_export.log \
  DIRECTORY=DATA_PUMP_DIR

-- CDB 내 신규 PDB 생성 후 import
CREATE PLUGGABLE DATABASE NEWPDB
  ADMIN USER pdbadmin IDENTIFIED BY oracle
  FILE_NAME_CONVERT = (
    '/u01/app/oracle/oradata/pdbseed/',
    '/u01/app/oracle/oradata/NEWPDB/'
  );

ALTER PLUGGABLE DATABASE NEWPDB OPEN;

-- PDB로 import
impdp system/oracle@NEWPDB \
  FULL=Y \
  DUMPFILE=full_export.dmp \
  LOGFILE=full_import.log \
  DIRECTORY=DATA_PUMP_DIR

예방 방법

  • 신규 데이터베이스 생성 시 반드시 CDB 구조로 설계

Oracle 19c 이상 환경에서 신규 데이터베이스를 구축할 때는 처음부터 CDB 구조로 생성하는 것을 표준 정책으로 삼아야 합니다. DBCA(Database Configuration Assistant) 사용 시 “Create a Container Database” 옵션을 반드시 선택하고, ENABLE_PLUGGABLE_DATABASE=TRUE를 초기화 파라미터에 설정하는 것을 배포 체크리스트에 포함시키세요. 이를 통해 추후 non-CDB→PDB 마이그레이션에 소요되는 비용과 리스크를 사전에 제거할 수 있습니다.

  • 마이그레이션 전 호환성 점검 및 테스트 환경 검증 의무화

non-CDB를 PDB로 전환하기 전에 반드시 DBMS_PDB.CHECK_PLUG_COMPATIBILITY와 PDB_PLUG_IN_VIOLATIONS 뷰를 통한 사전 점검을 수행해야 합니다. 운영 환경에 적용하기 전 동일한 버전의 테스트 환경에서 전체 전환 절차를 1회 이상 검증하고, 롤백 시나리오를 문서화해 두는 것이 필수적인 Best Practice입니다.


관련 에러

  • ORA-65011: Pluggable database does not exist — PDB 이름을 잘못 지정했을 때 발생
  • ORA-65016: FILE_NAME_CONVERT must be specified — 데이터파일 경로 변환 옵션 누락 시 발생
  • ORA-17628: Oracle error 65219 returned by remote Oracle — 원격 데이터베이스 연결 시 관련 에러 전파
  • ORA-65090: operation not allowed in a non-CDB database — non-CDB에서 CDB 전용 명령 실행 시 발생
  • ORA-65048: error encountered when processing the pluggable database — PDB 플러그인 처리 중 내부 오류 발생 시

DBMS 에러 코드 시리즈

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

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

댓글 남기기