2026년 10월 19일 | DBMS Error 가이드
이 글에서 다루는 내용
ORA-65207 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
ORA-65207 cannot set ENABLE_PLUGGABLE_DATABASE to FALSE after creation of PDB 는?
ORA-65207 에러는 Oracle Multitenant 아키텍처에서 PDB(Pluggable Database)가 이미 생성된 CDB(Container Database) 환경에서 ENABLE_PLUGGABLE_DATABASE 초기화 파라미터를 FALSE로 변경하려 할 때 발생합니다. Oracle 12c 이후 도입된 Multitenant 옵션은 한 번 활성화되면 PDB가 존재하는 상태에서 비활성화가 불가능하도록 설계되어 있습니다. 이미 PDB가 생성된 CDB에서 해당 파라미터를 비활성화하면 데이터 무결성과 아키텍처 일관성이 깨질 수 있기 때문에 Oracle 엔진 레벨에서 원천 차단하는 에러입니다.
주요 발생 원인
- PDB 생성 이후 Multitenant 기능 비활성화 시도
가장 흔한 원인으로, DBA가 CDB에 PDB를 생성한 이후 라이선스 비용 절감이나 아키텍처 변경을 목적으로 ENABLE_PLUGGABLE_DATABASE=FALSE로 되돌리려 할 때 발생합니다. Oracle은 PDB가 단 하나라도 존재하면 이 파라미터 변경을 허용하지 않으며, 이는 내부적으로 PDB 메타데이터와 데이터 딕셔너리가 이미 CDB 구조에 통합되었기 때문입니다. 실수로 spfile을 직접 수정하거나 ALTER SYSTEM SET 명령을 실행할 때 자주 마주치는 상황입니다.
- 스크립트 또는 자동화 도구의 잘못된 파라미터 설정
DBaaS 환경이나 Ansible, Terraform 등의 자동화 스크립트가 Non-CDB 환경 설정 스크립트를 CDB 환경에 그대로 적용하면서 발생하는 경우가 많습니다. 특히 기존 Non-CDB 환경에서 CDB로 마이그레이션하는 과정 중 오래된 파라미터 파일(pfile/spfile)의 설정값이 그대로 전달될 때 이 에러가 트리거됩니다. 자동화 스크립트에서 환경 분기 처리 없이 동일한 파라미터 세트를 적용할 경우 특히 주의가 필요합니다.
- 테스트 또는 롤백 목적의 CDB 구조 복원 시도
개발 또는 QA 환경에서 CDB 구성을 되돌리거나 Non-CDB 형태로 재구성하려는 시도 과정에서 발생합니다. 테스트 목적으로 PDB를 여러 개 생성하고 나서, 비용 등의 이유로 Non-CDB로 되돌리려 할 때 이 에러가 나타납니다. Oracle의 설계 철학상 Multitenant는 단방향 전환(One-way migration)으로 간주되며, PDB 생성 이후에는 해당 구조를 유지해야 합니다.
해결 방법
해결책 1: 현재 PDB 목록 및 상태 확인
먼저 에러 발생 원인을 파악하기 위해 현재 CDB 내의 PDB 상태를 확인합니다.
-- CDB 여부 확인
SELECT NAME, CDB, CON_ID FROM V$DATABASE;
-- 현재 존재하는 PDB 목록 확인
SELECT CON_ID, NAME, OPEN_MODE, RESTRICTED
FROM V$PDBS
ORDER BY CON_ID;
-- ENABLE_PLUGGABLE_DATABASE 파라미터 현재 값 확인
SHOW PARAMETER ENABLE_PLUGGABLE_DATABASE;
-- spfile 내 설정값 확인
SELECT NAME, VALUE, DESCRIPTION
FROM V$SPPARAMETER
WHERE NAME = 'enable_pluggable_database';
해결책 2: PDB를 모두 제거 후 파라미터 변경 시도 (권장하지 않음)
기술적으로 모든 PDB(PDB$SEED 제외)를 삭제하면 파라미터 변경이 가능할 수 있으나, 이 방법은 데이터 손실을 초래하므로 프로덕션 환경에서는 절대 권장하지 않습니다. 반드시 사전에 전체 백업을 수행하세요.
-- 특정 PDB 종료 후 삭제 (데이터 영구 삭제 주의!)
ALTER PLUGGABLE DATABASE pdb_name CLOSE IMMEDIATE;
DROP PLUGGABLE DATABASE pdb_name INCLUDING DATAFILES;
-- 모든 사용자 PDB 삭제 여부 확인 (PDB$SEED는 시스템 PDB로 삭제 불가)
SELECT NAME FROM V$PDBS WHERE NAME NOT IN ('PDB$SEED');
-- PDB가 없는 상태에서 파라미터 변경 시도 (여전히 실패할 수 있음)
-- Oracle 권고: 이 방법 대신 새 Non-CDB 인스턴스 생성 권장
ALTER SYSTEM SET ENABLE_PLUGGABLE_DATABASE = FALSE SCOPE=SPFILE;
해결책 3: Non-CDB 환경이 필요한 경우 새 인스턴스 생성 (권장 방법)
PDB가 이미 존재하는 CDB를 Non-CDB로 되돌리는 것은 지원되지 않으므로, 새 Non-CDB 인스턴스를 생성하고 데이터를 마이그레이션하는 것이 올바른 접근법입니다.
-- 새 Non-CDB 인스턴스 생성을 위한 init.ora 파라미터 예시
-- enable_pluggable_database=FALSE (기본값, 생략 가능)
-- db_name=NONCDB_NEW
-- 기존 PDB 데이터를 Non-CDB로 언플러그 후 익스포트 방법
-- Step 1: PDB를 XML manifest로 언플러그
ALTER PLUGGABLE DATABASE pdb_name CLOSE;
ALTER PLUGGABLE DATABASE pdb_name
UNPLUG INTO '/backup/pdb_name.xml';
-- Step 2: 언플러그된 PDB 삭제 (데이터파일은 보존)
DROP PLUGGABLE DATABASE pdb_name KEEP DATAFILES;
-- Step 3: 새 CDB 또는 Non-CDB 환경에서 확인
SELECT NAME, CDB FROM V$DATABASE;
해결책 4: 자동화 스크립트 수정
자동화 도구에서 이 에러가 발생한 경우, 스크립트 내 CDB/Non-CDB 분기 처리를 추가합니다.
-- CDB 여부를 먼저 확인하는 조건부 로직 예시 (SQL*Plus 스크립트)
DECLARE
v_cdb VARCHAR2(3);
BEGIN
SELECT CDB INTO v_cdb FROM V$DATABASE;
IF v_cdb = 'YES' THEN
DBMS_OUTPUT.PUT_LINE('CDB 환경입니다. ENABLE_PLUGGABLE_DATABASE 변경 불가.');
DBMS_OUTPUT.PUT_LINE('Non-CDB로 전환하려면 새 인스턴스를 생성하세요.');
ELSE
DBMS_OUTPUT.PUT_LINE('Non-CDB 환경입니다. 파라미터 변경 가능합니다.');
-- EXECUTE IMMEDIATE 'ALTER SYSTEM SET ENABLE_PLUGGABLE_DATABASE=FALSE SCOPE=SPFILE';
END IF;
END;
/
예방 방법
- CDB/Non-CDB 아키텍처 결정은 인스턴스 생성 전에 확정하라
Oracle Multitenant 아키텍처는 생성 시점에 결정해야 하며, 이후 전환은 지원되지 않습니다. 신규 데이터베이스 구축 전 반드시 Multitenant 라이선스 보유 여부, 운영 정책, PDB 활용 계획을 검토하세요. 특히 Oracle 21c부터는 Non-CDB가 공식적으로 deprecated 되었으므로 장기적으로 CDB 아키텍처를 기본으로 채택하는 것을 강력히 권장합니다. IaC(Infrastructure as Code) 도구를 사용하는 경우에도 데이터베이스 타입(CDB/Non-CDB)을 명시적 변수로 관리하고, 환경별 분기 처리를 스크립트에 반드시 포함시켜야 합니다.
- 파라미터 변경 전 항상 현재 환경 상태를 검증하는 사전 점검 루틴을 수립하라
운영 환경에서 ALTER SYSTEM SET 또는 spfile 직접 수정 전에 반드시 현재 CDB 상태, PDB 수, 파라미터 의존성을 확인하는 체크리스트를 운영 표준으로 수립하세요. 아래 쿼리를 DBA 표준 점검 스크립트에 포함시켜 파라미터 변경 전 자동으로 사전 검증이 수행되도록 구성하는 것이 좋습니다.
-- 파라미터 변경 전 사전 점검 스크립트 예시
SELECT
d.NAME AS db_name,
d.CDB AS is_cdb,
COUNT(p.NAME) AS pdb_count
FROM V$DATABASE d
LEFT JOIN V$PDBS p ON p.NAME != 'PDB$SEED'
GROUP BY d.NAME, d.CDB;
관련 에러
- ORA-65011:
Pluggable database— 존재하지 않는 PDB를 참조할 때 발생하며, PDB 이름 오타나 삭제된 PDB 접근 시 확인 필요합니다.does not exist - ORA-65040:
operation not allowed from within a pluggable database— PDB 세션에서 CDB 레벨의 작업을 시도할 때 발생하며, ORA-65207과 함께 Multitenant 관련 권한/구조 에러로 자주 묶여서 나타납니다. - ORA-65048:
error encountered when processing in a pluggable database— CDB 전체에 영향을 주는 명령 수행 중 특정 PDB에서 오류가 발생할 때 나타나는 에러입니다. - ORA-01078:
failure in processing system parameters— spfile/pfile 파라미터 처리 실패 시 발생하며, 잘못된 파라미터 조합이나 CDB 환경 불일치 시 ORA-65207과 연계되어 발생할 수 있습니다.
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.