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

ORA-65007
2026년 10월 12일 | DBMS Error 가이드

이 글에서 다루는 내용

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

ORA-65007 the pluggable database is not found 는?

ORA-65007 에러는 Oracle Multitenant 환경(CDB, Container Database)에서 특정 PDB(Pluggable Database)를 참조하거나 작업하려 할 때, 해당 PDB가 존재하지 않거나 인식되지 않는 경우 발생하는 에러입니다. 주로 PDB 이름을 잘못 입력했거나, PDB가 아직 생성되지 않았거나, 혹은 이미 삭제된 PDB에 접근하려 할 때 Oracle 엔진이 이 에러를 반환합니다. 12c 버전 이후 도입된 멀티테넌트 아키텍처에서 CDB 관리 작업 중 빈번히 마주치는 에러이므로, DBA라면 반드시 숙지해야 할 중요한 에러 코드입니다.


주요 발생 원인

  • PDB 이름 오타 또는 잘못된 PDB 이름 참조

가장 흔한 원인으로, SQL 명령어에서 PDB 이름을 잘못 입력하거나 대소문자 불일치로 인해 Oracle이 해당 PDB를 찾지 못하는 경우입니다. Oracle은 내부적으로 PDB 이름을 대문자로 저장하는 경우가 많으므로, 정확한 이름을 V$PDBS 뷰를 통해 확인한 후 사용해야 합니다. 예를 들어, MYPDB 대신 mypdb 또는 MyPDB로 입력하면 에러가 발생할 수 있습니다.

  • PDB가 CDB에 존재하지 않거나 이미 삭제된 경우

해당 PDB가 실제로 CDB에 생성되어 있지 않거나, 이전에 DROP PLUGGABLE DATABASE 명령으로 삭제되었음에도 불구하고 스크립트나 운영 절차에서 해당 PDB를 참조하는 경우입니다. 특히 여러 환경(개발, 스테이징, 운영)을 관리하는 DBA가 스크립트를 잘못 적용할 때 자주 발생합니다. 존재 여부를 반드시 사전에 CDB_PDBS 또는 V$PDBS 뷰로 확인해야 합니다.

  • PDB가 RESTRICTED 또는 MOUNTED 상태로 인식 불가한 경우

PDB 자체는 CDB에 등록되어 있지만, 특정 작업(예: ALTER PLUGGABLE DATABASE OPEN 실패, 미디어 복구 중, 또는 내부 장애)으로 인해 PDB가 정상적으로 OPEN되지 않은 상태에서 해당 PDB를 대상으로 DDL/DML 작업을 시도할 때 발생할 수 있습니다. 이 경우 PDB 상태(STATUS 컬럼)를 먼저 확인하고, 정상 OPEN 후 작업을 재시도해야 합니다.


해결 방법

원인 1: PDB 이름 오타 또는 잘못된 참조 해결

먼저 CDB에 존재하는 모든 PDB 목록을 확인합니다.

-- CDB$ROOT에서 실행 (SYS 또는 SYSDBA 권한 필요)
SELECT CON_ID, NAME, OPEN_MODE, RESTRICTED, STATUS
FROM   V$PDBS
ORDER  BY CON_ID;

또는 더 상세한 정보를 위해 CDB_PDBS 뷰를 활용합니다.

-- CDB_PDBS를 통해 PDB 목록 확인
SELECT PDB_ID, PDB_NAME, STATUS, CON_UID, CREATION_SCN
FROM   CDB_PDBS
ORDER  BY PDB_ID;

정확한 PDB 이름을 확인한 후, 올바른 이름으로 작업을 재시도합니다.

-- 올바른 PDB 이름으로 OPEN 명령 재실행 예시
ALTER PLUGGABLE DATABASE MYPDB01 OPEN;

-- 특정 PDB로 세션 전환
ALTER SESSION SET CONTAINER = MYPDB01;

원인 2: PDB가 존재하지 않는 경우 (새로 생성)

PDB가 실제로 없다면, 새로운 PDB를 생성하거나 백업으로부터 복구해야 합니다.

-- 기존 PDB를 복제하여 새 PDB 생성 (PDB Cloning)
CREATE PLUGGABLE DATABASE MYPDB01
  FROM PDB$SEED
  ADMIN USER pdbadmin IDENTIFIED BY "Admin1234#"
  STORAGE (MAXSIZE 10G)
  DEFAULT TABLESPACE USERS
    DATAFILE '/u01/oradata/CDB1/MYPDB01/users01.dbf'
    SIZE 500M AUTOEXTEND ON
  PATH_PREFIX = '/u01/oradata/CDB1/MYPDB01/'
  FILE_NAME_CONVERT = ('/u01/oradata/CDB1/pdbseed/',
                       '/u01/oradata/CDB1/MYPDB01/');

-- 생성 후 PDB OPEN
ALTER PLUGGABLE DATABASE MYPDB01 OPEN;

-- 재시작 후에도 자동으로 OPEN되도록 트리거 저장
ALTER PLUGGABLE DATABASE MYPDB01 SAVE STATE;

원인 3: PDB 상태 이상 해결

PDB 상태를 확인하고 강제 OPEN을 시도합니다.

-- PDB 현재 상태 확인
SELECT NAME, OPEN_MODE, RESTRICTED, STATUS
FROM   V$PDBS
WHERE  NAME = 'MYPDB01';

-- PDB가 MOUNTED 상태인 경우 OPEN 시도
ALTER PLUGGABLE DATABASE MYPDB01 OPEN;

-- RESTRICTED 모드인 경우 강제 해제 후 OPEN
ALTER PLUGGABLE DATABASE MYPDB01 OPEN FORCE;

-- PDB 내부 오류 확인 (alert log 경로 조회)
SELECT VALUE FROM V$DIAG_INFO WHERE NAME = 'Default Trace File';

-- PDB 상태를 READ WRITE로 강제 전환
ALTER PLUGGABLE DATABASE MYPDB01 CLOSE IMMEDIATE;
ALTER PLUGGABLE DATABASE MYPDB01 OPEN READ WRITE;

PDB가 복구 모드인 경우 RMAN을 통한 복구가 필요합니다.

-- RMAN을 이용한 PDB 복구 (RMAN 프롬프트에서 실행)
-- RMAN> RECOVER PLUGGABLE DATABASE MYPDB01;
-- RMAN> ALTER PLUGGABLE DATABASE MYPDB01 OPEN RESETLOGS;

에러 재현 예시 및 수정

-- 에러 재현: 존재하지 않는 PDB 이름 사용
ALTER PLUGGABLE DATABASE NON_EXIST_PDB OPEN;
-- ORA-65007: the pluggable database is not found

-- 수정: 정확한 PDB 이름 사용
-- 1단계: 목록 확인
SELECT NAME FROM V$PDBS;
-- 2단계: 올바른 이름으로 실행
ALTER PLUGGABLE DATABASE MYPDB01 OPEN;

예방 방법

  • PDB 작업 전 반드시 사전 검증 스크립트 실행

PDB 이름을 직접 하드코딩하는 대신, 작업 스크립트의 첫 단계에서 항상 V$PDBS 또는 CDB_PDBS 뷰를 통해 대상 PDB의 존재 여부와 상태를 동적으로 검증하는 루틴을 포함시키세요. 아래와 같이 PL/SQL 블록으로 검증 로직을 자동화하면 휴먼 에러를 크게 줄일 수 있습니다.

“`sql

— PDB 존재 여부 사전 검증 PL/SQL 예시

DECLARE

v_count NUMBER;

v_pdb_name VARCHAR2(128) := ‘MYPDB01’;

BEGIN

SELECT COUNT(*)

INTO v_count

FROM V$PDBS

WHERE NAME = UPPER(v_pdb_name)

AND OPEN_MODE = ‘READ WRITE’;

IF v_count = 0 THEN

RAISE_APPLICATION_ERROR(-20001,

‘PDB [‘ || v_pdb_name || ‘] does not exist or is not open. Aborting.’);

ELSE

DBMS_OUTPUT.PUT_LINE(‘PDB [‘ || v_pdb_name || ‘] is ready. Proceeding…’);

END IF;

END;

/

“`

  • PDB SAVE STATE 설정 및 모니터링 자동화

CDB 재시작 시 PDB가 자동으로 OPEN되지 않아 발생하는 문제를 예방하기 위해, 모든 운영 PDB에 SAVE STATE 옵션을 적용하고 주기적인 상태 모니터링 스크립트를 운영해야 합니다. Enterprise Manager(OEM) 또는 사용자 정의 Shell/Python 스크립트를 활용하여 PDB 상태 이상 발생 시 즉각 알림을 받을 수 있도록 체계를 구성하면 장애 대응 시간을 크게 단축할 수 있습니다.

“`sql

— 모든 PDB에 자동 OPEN 상태 저장

ALTER PLUGGABLE DATABASE ALL SAVE STATE;

— 정기 모니터링용 쿼리 (크론잡 또는 OEM 스케줄러 활용)

SELECT NAME,

OPEN_MODE,

RESTRICTED,

STATUS,

TO_CHAR(CREATION_TIME, ‘YYYY-MM-DD HH24:MI:SS’) AS CREATION_TIME

FROM V$PDBS

WHERE OPEN_MODE != ‘READ WRITE’

AND NAME != ‘PDB$SEED’;

“`


관련 에러

  • ORA-65011: Pluggable database (string) does not exist — PDB 자체가 데이터 딕셔너리에 등록되지 않은 경우 발생하며, ORA-65007과 유사한 상황에서 나타납니다.
  • ORA-65020: pluggable database already open — PDB를 OPEN하려 할 때 이미 열려 있는 경우 발생하며, PDB 상태 관리 중 함께 마주칠 수 있습니다.
  • ORA-01033: ORACLE initialization or shutdown in progress — CDB 자체가 정상 기동되지 않은 상태에서 PDB 작업 시 발생할 수 있으며, CDB 상태 확인이 선행되어야 합니다.
  • ORA-65090: operation not allowed in a non-CDB database — 멀티테넌트 관련 명령을 Non-CDB 환경에서 실행할 때 발생하며, 아키텍처 혼동으로 인한 에러입니다.

DBMS 에러 코드 시리즈

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

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

댓글 남기기