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

ORA-65168
2026년 10월 18일 | DBMS Error 가이드

이 글에서 다루는 내용

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

ORA-65168 pluggable database is not open 는?

ORA-65168 에러는 Oracle Multitenant 환경(CDB/PDB 구조)에서 특정 Pluggable Database(PDB)가 열려 있지 않은 상태에서 해당 PDB에 접근하거나 작업을 시도할 때 발생하는 에러입니다. 이 에러는 PDB가 MOUNT 상태이거나 완전히 닫혀(CLOSE) 있을 때 DML, DDL 또는 접속 시도를 하면 Oracle이 이를 차단하면서 발생합니다. Oracle 12c 이후 멀티테넌트 아키텍처가 도입된 이후 DBA들이 자주 마주치는 에러 중 하나이며, 특히 자동 시작 설정이 되어 있지 않은 PDB 환경에서 데이터베이스 재기동 후 빈번하게 나타납니다.


주요 발생 원인

1. 데이터베이스 재기동 후 PDB 자동 오픈 설정 누락

Oracle CDB를 재시작하면 CDB 자체는 OPEN 상태가 되지만, 기본적으로 PDB들은 MOUNT 상태로만 올라옵니다. PDB에 대해 자동 시작(AUTO OPEN) 트리거가 설정되어 있지 않거나, save state 옵션을 사용하지 않은 경우 재기동 후 PDB가 OPEN 상태가 되지 않아 이 에러가 발생합니다. 특히 유지보수 작업이나 패치 적용 후 CDB를 재시작하는 상황에서 많이 발생합니다.

2. PDB가 명시적으로 CLOSE 또는 RESTRICT 모드로 전환된 경우

운영 중 DBA가 특정 PDB를 유지보수 목적으로 수동으로 닫거나(ALTER PLUGGABLE DATABASE … CLOSE), RESTRICTED 세션 모드로 전환한 경우 일반 사용자나 애플리케이션이 접근할 수 없게 됩니다. 이 상태에서 애플리케이션 서버나 배치 프로그램이 해당 PDB에 접속을 시도하면 ORA-65168이 발생하게 됩니다. 모니터링 체계가 부족한 환경에서는 DBA 본인도 인지하지 못한 상태로 PDB가 닫혀 있는 경우가 종종 있습니다.

3. PDB 생성 직후 또는 플러그인(Plug-in) 작업 후 OPEN 명령 누락

새로운 PDB를 생성하거나, unplugged PDB를 다시 플러그인한 직후에는 PDB가 자동으로 OPEN 상태가 되지 않습니다. 생성 스크립트나 플러그인 절차에서 ALTER PLUGGABLE DATABASE … OPEN 명령을 실행하지 않고 바로 접속을 시도하면 이 에러가 발생합니다. 특히 자동화된 프로비저닝 스크립트에서 OPEN 단계를 빠뜨리는 실수가 많습니다.


해결 방법

원인 1 해결: PDB 상태 확인 및 OPEN

먼저 CDB 루트(CDB$ROOT)에 SYSDBA로 접속하여 현재 PDB 상태를 확인합니다.

-- CDB$ROOT에서 모든 PDB 상태 확인
SELECT CON_ID, NAME, OPEN_MODE, RESTRICTED
FROM   V$PDBS
ORDER BY CON_ID;

상태가 MOUNTED 또는 CLOSED로 표시된 PDB를 OPEN합니다.

-- 특정 PDB를 READ WRITE 모드로 오픈
ALTER PLUGGABLE DATABASE pdb_name OPEN;

-- 또는 모든 PDB를 한 번에 오픈
ALTER PLUGGABLE DATABASE ALL OPEN;

-- RESTRICTED 모드를 해제하면서 오픈
ALTER PLUGGABLE DATABASE pdb_name OPEN READ WRITE;

원인 2 해결: RESTRICTED 모드 해제

PDB가 RESTRICTED 모드인 경우 아래와 같이 해제합니다.

-- RESTRICTED 상태 확인
SELECT NAME, OPEN_MODE, RESTRICTED
FROM   V$PDBS
WHERE  NAME = 'PDB_NAME';

-- RESTRICTED 모드 해제 (PDB 컨테이너 내에서)
ALTER SESSION SET CONTAINER = pdb_name;
ALTER SYSTEM DISABLE RESTRICTED SESSION;

-- 또는 CDB 루트에서
ALTER PLUGGABLE DATABASE pdb_name OPEN FORCE;

원인 3 해결: PDB 생성/플러그인 후 OPEN

새 PDB 생성 후 OPEN하는 예제입니다.

-- PDB 생성 후 바로 OPEN
CREATE PLUGGABLE DATABASE new_pdb
  ADMIN USER pdb_admin IDENTIFIED BY "Password123#"
  FILE_NAME_CONVERT = ('/pdbseed/', '/new_pdb/');

-- 생성 직후 상태 확인
SELECT NAME, OPEN_MODE FROM V$PDBS WHERE NAME = 'NEW_PDB';

-- OPEN 명령 실행
ALTER PLUGGABLE DATABASE new_pdb OPEN READ WRITE;

-- 상태가 정상인지 재확인
SELECT NAME, OPEN_MODE FROM V$PDBS WHERE NAME = 'NEW_PDB';

자동 오픈 설정 (SAVE STATE)

CDB 재시작 후에도 PDB가 자동으로 열리도록 설정합니다.

-- 특정 PDB OPEN 후 상태를 저장하여 재시작 시 자동 오픈
ALTER PLUGGABLE DATABASE pdb_name OPEN;
ALTER PLUGGABLE DATABASE pdb_name SAVE STATE;

-- 모든 PDB에 대해 자동 오픈 설정
ALTER PLUGGABLE DATABASE ALL OPEN;
ALTER PLUGGABLE DATABASE ALL SAVE STATE;

-- SAVE STATE 설정 확인
SELECT CON_NAME, STATE
FROM   DBA_PDB_SAVED_STATES;

트리거를 이용한 자동 오픈 방법 (구버전 호환)

Oracle 12.1 등 일부 환경에서는 트리거를 활용하기도 합니다.

-- CDB 시작 시 모든 PDB를 자동으로 여는 트리거 생성
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';

예방 방법

1. SAVE STATE를 활용한 PDB 자동 오픈 정책 수립

운영 환경에서 모든 PDB에 대해 ALTER PLUGGABLE DATABASE ALL SAVE STATE를 적용하는 것을 표준 절차로 수립하세요. 이 설정은 CDB 딕셔너리에 각 PDB의 상태를 저장하여 CDB 재기동 시 해당 PDB가 이전 상태(OPEN/CLOSE)를 자동으로 복원하도록 합니다. 신규 PDB 생성 시 프로비저닝 체크리스트에 SAVE STATE 명령을 필수 항목으로 포함시키는 것이 Best Practice입니다.

-- 주기적으로 SAVE STATE 적용 여부 점검하는 쿼리
SELECT P.CON_ID,
       P.NAME        AS PDB_NAME,
       P.OPEN_MODE,
       S.STATE       AS SAVED_STATE
FROM   V$PDBS P
LEFT JOIN DBA_PDB_SAVED_STATES S ON P.NAME = S.CON_NAME
ORDER BY P.CON_ID;

2. PDB 상태 모니터링 자동화

OEM(Oracle Enterprise Manager) 또는 커스텀 셸 스크립트를 활용하여 PDB 상태를 주기적으로 모니터링하고, OPEN 상태가 아닌 PDB가 감지되면 즉시 알람이 발생하도록 구성하세요. 아래 쿼리를 크론(cron) 잡이나 모니터링 도구에 통합하면 실시간 상태 감시가 가능합니다.

-- OPEN 상태가 아닌 PDB 목록 조회 (모니터링용)
SELECT CON_ID,
       NAME,
       OPEN_MODE,
       RESTRICTED,
       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-65169: PDB를 특정 모드로 전환할 수 없을 때 발생하며, ORA-65168과 함께 나타나는 경우가 많습니다.
  • ORA-01033: Oracle이 초기화 중이거나 종료 중인 상태로, PDB가 아직 완전히 OPEN되지 않았을 때 접속 시도 시 발생할 수 있습니다.
  • ORA-01109: 데이터베이스가 OPEN 상태가 아닐 때 발생하며, CDB/PDB 레벨 모두에서 나타날 수 있습니다.
  • ORA-65040: PDB가 닫혀 있는 상태에서 특정 작업이 허용되지 않을 때 발생하는 에러로, ORA-65168과 밀접하게 연관됩니다.
  • ORA-17627 / ORA-17629: RMAN 백업 또는 복구 작업 중 PDB가 OPEN 상태가 아닐 때 발생할 수 있으며, ORA-65168과 유사한 맥락에서 접합니다.

DBMS 에러 코드 시리즈

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

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

댓글 남기기