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

ORA-65021
2026년 10월 13일 | DBMS Error 가이드

이 글에서 다루는 내용

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

ORA-65021 pluggable database is not open 는?

ORA-65021 에러는 Oracle Multitenant 환경(CDB, Container Database)에서 특정 Pluggable Database(PDB)가 열려 있지 않은 상태에서 해당 PDB에 접근하거나 작업을 시도할 때 발생합니다. PDB는 독립적인 라이프사이클을 가지며, CDB가 열려 있더라도 개별 PDB는 별도로 OPEN 상태여야만 정상적인 데이터베이스 작업이 가능합니다. 이 에러는 주로 데이터베이스 재시작 후 자동 오픈 설정이 되어 있지 않거나, DBA가 의도적·비의도적으로 PDB를 닫아 둔 상황에서 애플리케이션 또는 사용자가 해당 PDB에 접속을 시도할 때 흔히 발생합니다.


주요 발생 원인

1. PDB가 MOUNTED 상태로만 존재하고 OPEN되지 않은 경우

Oracle CDB가 시작(STARTUP)될 때 기본적으로 모든 PDB는 자동으로 OPEN되지 않습니다. CDB 자체는 OPEN 상태이더라도 PDB는 MOUNTED 상태에 머물러 있을 수 있으며, 이 경우 PDB에 대한 모든 DML/DDL 작업 및 접속 시도가 ORA-65021을 유발합니다. 특히 RAC(Real Application Clusters) 환경이나 운영 중 계획된 유지 보수 작업 후 재시작 시 이 문제가 자주 발생합니다.

2. AUTO_OPEN 트리거(Trigger)가 설정되지 않은 경우

Oracle 12c 이후 PDB를 자동으로 열기 위해 ALTER PLUGGABLE DATABASE ... SAVE STATE 또는 CDB 레벨의 트리거를 활용해야 합니다. 이 설정이 누락된 상태에서 서버 재부팅이나 DB 재시작이 이루어지면, PDB는 항상 MOUNTED 상태로 남게 됩니다. 개발·운영 환경 전환, 신규 PDB 생성 후 초기 설정 단계에서 자주 놓치는 항목입니다.

3. PDB가 RESTRICTED 모드 또는 READ ONLY로 OPEN된 경우

PDB가 완전한 READ WRITE 상태로 열려 있지 않고, RESTRICTED 모드 혹은 READ ONLY 모드로 열려 있는 경우 일부 작업에서 ORA-65021과 유사한 접근 불가 에러가 발생할 수 있습니다. 이는 패치 적용, 데이터 보호 정책, 또는 관리자의 의도적인 설정으로 인해 발생하며, 애플리케이션 관점에서는 동일하게 접속 불가 상황으로 인식됩니다.


해결 방법

원인 1: PDB 상태 확인 후 수동 OPEN

먼저 CDB에 SYS 계정으로 접속하여 PDB 상태를 확인합니다.

-- CDB에 접속 후 현재 PDB 상태 조회
SELECT name, open_mode, restricted
FROM v$pdbs
ORDER BY name;

PDB가 MOUNTED 상태임을 확인했다면 아래 명령으로 열어줍니다.

-- 특정 PDB 열기 (READ WRITE 모드)
ALTER PLUGGABLE DATABASE pdb_name OPEN;

-- 모든 PDB 한 번에 열기
ALTER PLUGGABLE DATABASE ALL OPEN;

-- READ ONLY 모드로 열기 (필요 시)
ALTER PLUGGABLE DATABASE pdb_name OPEN READ ONLY;

PDB 내부에서 OPEN 상태를 확인하는 방법입니다.

-- PDB 컨테이너 내부에서 상태 확인
SHOW CON_NAME;
SELECT status FROM v$instance;

원인 2: 자동 OPEN 설정 (SAVE STATE 활용)

PDB를 열고 난 후 현재 상태를 저장하여 CDB 재시작 시 자동으로 열리도록 설정합니다.

-- PDB 열기
ALTER PLUGGABLE DATABASE pdb_name OPEN;

-- 현재 상태 저장 (이후 CDB 재시작 시 자동 OPEN)
ALTER PLUGGABLE DATABASE pdb_name SAVE STATE;

-- 모든 PDB에 대해 상태 저장
ALTER PLUGGABLE DATABASE ALL SAVE STATE;

-- 저장된 상태 확인
SELECT con_name, state
FROM dba_pdb_saved_states;

또는 CDB 레벨의 After Startup 트리거를 생성하는 방법도 있습니다.

-- CDB 레벨 자동 OPEN 트리거 생성
CREATE OR REPLACE TRIGGER open_all_pdbs
    AFTER STARTUP ON DATABASE
BEGIN
    EXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE ALL OPEN';
END open_all_pdbs;
/

-- 트리거 확인
SELECT trigger_name, status
FROM dba_triggers
WHERE trigger_name = 'OPEN_ALL_PDBS';

원인 3: RESTRICTED 모드 해제 후 정상 OPEN

-- PDB 현재 상태 및 RESTRICTED 여부 확인
SELECT name, open_mode, restricted
FROM v$pdbs
WHERE name = 'PDB_NAME';

-- RESTRICTED 모드로 열린 PDB를 정상 모드로 재오픈
ALTER PLUGGABLE DATABASE pdb_name CLOSE IMMEDIATE;
ALTER PLUGGABLE DATABASE pdb_name OPEN;

-- READ ONLY에서 READ WRITE로 전환
ALTER PLUGGABLE DATABASE pdb_name OPEN READ WRITE;

-- PDB 내부에서 RESTRICTED 해제 (해당 PDB에 접속 후)
ALTER SYSTEM DISABLE RESTRICTED SESSION;

예방 방법

1. PDB SAVE STATE를 표준 운영 절차(SOP)에 포함

신규 PDB 생성 또는 PDB 구성 변경 시, 반드시 ALTER PLUGGABLE DATABASE ... SAVE STATE 명령을 실행하는 것을 표준 운영 절차에 포함시켜야 합니다. 이를 통해 계획되지 않은 재시작이나 장애 후 자동 복구 시나리오에서도 PDB가 항상 적절한 상태로 열릴 수 있도록 보장할 수 있습니다. 아울러 모니터링 스크립트를 통해 주기적으로 PDB 상태를 점검하는 루틴을 Cron 또는 Oracle Scheduler에 등록해두는 것을 권장합니다.

-- PDB 상태 모니터링 쿼리 (스케줄 등록 권장)
SELECT name,
       open_mode,
       restricted,
       TO_CHAR(open_time, 'YYYY-MM-DD HH24:MI:SS') AS open_time
FROM v$pdbs
WHERE open_mode != 'READ WRITE'
   OR restricted = 'YES';

2. After Startup 트리거와 모니터링 알람 이중 적용

CDB 수준의 After Startup 트리거를 반드시 적용하고, 추가로 Oracle Enterprise Manager(OEM) 또는 외부 모니터링 솔루션(Zabbix, Grafana 등)에서 PDB OPEN 상태를 주기적으로 체크하는 알람을 설정해야 합니다. 트리거 단독 의존은 예외 상황(트리거 오류, 권한 문제 등)에서 실패할 수 있으므로, 이중 안전장치를 마련하는 것이 30년 DBA 실무에서 검증된 베스트 프랙티스입니다.


관련 에러

  • ORA-65020: pluggable database already open — PDB를 이미 열려 있는 상태에서 다시 열려고 할 때 발생합니다.
  • ORA-65019: pluggable database is not found — 존재하지 않는 PDB에 접근 시 발생하며, PDB 이름 오타 또는 DROP된 PDB 접근 시 나타납니다.
  • ORA-01033: ORACLE initialization or shutdown in progress — CDB 자체가 완전히 시작되지 않은 상태에서 접속 시 발생하며, PDB OPEN 오류와 혼동될 수 있습니다.
  • ORA-65040: operation not allowed from within a pluggable database — PDB 내부에서 CDB 전용 명령 실행 시 발생합니다. Multitenant 환경에서 PDB/CDB 컨텍스트 혼동으로 자주 발생합니다.

DBMS 에러 코드 시리즈

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

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

댓글 남기기