2026년 10월 19일 | DBMS Error 가이드
이 글에서 다루는 내용
ORA-65178 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
ORA-65178 Pluggable database not closed 는?
ORA-65178 에러는 Oracle Multitenant 환경(12c 이상)에서 Pluggable Database(PDB)가 열린(OPEN) 상태일 때 닫혀 있어야만 수행 가능한 작업을 시도할 경우 발생하는 에러입니다. 예를 들어 PDB를 언플러그(Unplug)하거나 특정 유지보수 작업, 혹은 PDB를 다른 CDB로 이동하려고 할 때, 해당 PDB가 CLOSED 상태가 아니면 Oracle은 이 에러를 반환합니다. 주로 CDB 관리자나 DBA가 PDB 관련 구조 변경 작업 전 선행 단계를 누락했을 때 자주 마주치게 됩니다.
주요 발생 원인
- PDB가 OPEN 상태인 채로 UNPLUG 시도
PDB를 언플러그하여 XML manifest 파일을 생성하거나 다른 CDB로 이식하기 위해 ALTER PLUGGABLE DATABASE ... UNPLUG INTO 구문을 실행할 때, 해당 PDB가 여전히 OPEN 상태라면 ORA-65178이 발생합니다. Oracle은 데이터 일관성을 보장하기 위해 반드시 PDB가 CLOSED 상태여야 언플러그 작업을 허용합니다. 이 경우 PDB를 먼저 CLOSE 한 뒤 언플러그 명령을 재실행해야 합니다.
- PDB 삭제(DROP) 전 CLOSE 미수행
DROP PLUGGABLE DATABASE 명령 실행 시에도 대상 PDB가 OPEN 상태이면 ORA-65178이 발생할 수 있습니다. 특히 자동 시작(OPEN) 설정이 되어 있는 PDB의 경우 DBA가 인지하지 못한 채 PDB가 열려 있는 상태일 가능성이 높습니다. PDB 삭제 전 반드시 현재 상태를 확인하고 CLOSE를 선행해야 합니다.
- 클론(CLONE) 또는 재배치(RELOCATE) 작업 전 상태 미확인
PDB를 다른 CDB로 재배치하거나 클론 작업 시, 소스 PDB가 CLOSED 상태여야 하는 경우에 OPEN 상태로 작업을 시도하면 이 에러가 발생합니다. 특히 Cold Clone(오프라인 클론) 방식에서는 소스 PDB가 반드시 닫혀 있어야 합니다. 운영 환경에서는 여러 세션이 PDB에 접속해 있는 경우가 많으므로 작업 전 세션 정리도 함께 수행해야 합니다.
해결 방법
원인 1: PDB OPEN 상태에서 UNPLUG 시도 시
먼저 현재 PDB의 상태를 확인합니다.
-- CDB$ROOT에서 실행
SHOW CON_NAME;
-- 전체 PDB 상태 조회
SELECT NAME, OPEN_MODE, RESTRICTED
FROM V$PDBS
ORDER BY NAME;
PDB가 OPEN 상태임을 확인했다면, 해당 PDB를 먼저 닫아줍니다.
-- PDB를 CLOSE 처리
ALTER PLUGGABLE DATABASE pdb_name CLOSE IMMEDIATE;
-- CLOSE 후 상태 재확인
SELECT NAME, OPEN_MODE FROM V$PDBS WHERE NAME = 'PDB_NAME';
PDB가 CLOSED 상태로 전환된 것을 확인한 후 UNPLUG 작업을 수행합니다.
-- 언플러그 실행 (XML 파일 경로는 환경에 맞게 변경)
ALTER PLUGGABLE DATABASE pdb_name
UNPLUG INTO '/u01/app/oracle/oradata/pdb_name.xml';
원인 2: PDB 삭제(DROP) 전 CLOSE 미수행 시
-- 현재 접속 세션 확인 (해당 PDB에 연결된 세션 강제 종료)
SELECT SID, SERIAL#, USERNAME, STATUS
FROM V$SESSION
WHERE CON_ID = (SELECT CON_ID FROM V$PDBS WHERE NAME = 'PDB_NAME');
-- 세션 강제 종료 (필요 시)
ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;
-- PDB CLOSE
ALTER PLUGGABLE DATABASE pdb_name CLOSE IMMEDIATE;
-- PDB 삭제 (데이터파일 포함 삭제)
DROP PLUGGABLE DATABASE pdb_name INCLUDING DATAFILES;
원인 3: CLONE 또는 RELOCATE 작업 전 상태 미확인 시
-- Cold Clone을 위한 소스 PDB CLOSE
ALTER PLUGGABLE DATABASE source_pdb CLOSE IMMEDIATE;
-- Cold Clone 실행 예시
CREATE PLUGGABLE DATABASE clone_pdb FROM source_pdb
FILE_NAME_CONVERT = ('/u01/oradata/source_pdb/', '/u01/oradata/clone_pdb/');
-- 클론된 PDB OPEN
ALTER PLUGGABLE DATABASE clone_pdb OPEN;
-- 클론 후 소스 PDB 재오픈 (필요시)
ALTER PLUGGABLE DATABASE source_pdb OPEN;
Hot Clone(온라인 클론) 방식으로 소스 PDB를 열어둔 채 클론하려면 아래와 같이 합니다.
-- Hot Clone: 소스 PDB가 OPEN 상태여도 가능 (Oracle 12.2 이상)
CREATE PLUGGABLE DATABASE hot_clone_pdb FROM source_pdb
FILE_NAME_CONVERT = ('/u01/oradata/source_pdb/', '/u01/oradata/hot_clone_pdb/');
종합 점검 스크립트
실제 현장에서 바로 사용할 수 있는 PDB 상태 점검 및 일괄 CLOSE 스크립트입니다.
-- 모든 PDB 상태 점검
SELECT
CON_ID,
NAME,
OPEN_MODE,
RESTRICTED,
OPEN_TIME
FROM V$PDBS
WHERE NAME != 'PDB$SEED'
ORDER BY CON_ID;
-- 특정 PDB만 CLOSE
ALTER PLUGGABLE DATABASE pdb_name CLOSE IMMEDIATE;
-- CDB 내 모든 PDB CLOSE (운영 환경에서는 주의하여 사용)
ALTER PLUGGABLE DATABASE ALL CLOSE IMMEDIATE;
-- 특정 PDB만 OPEN (이후 재오픈 시)
ALTER PLUGGABLE DATABASE pdb_name OPEN READ WRITE;
예방 방법
- PDB 작업 전 표준 점검 절차(SOP) 수립
PDB에 대한 구조 변경, 언플러그, 삭제 등 모든 작업 전에 반드시 V$PDBS 뷰를 조회하여 OPEN_MODE를 확인하는 표준 운영 절차를 수립하고 자동화 스크립트로 점검을 의무화하세요. 아래와 같이 PDB 상태 점검을 작업 스크립트의 첫 단계에 포함시키는 것이 Best Practice입니다.
“`sql
— 작업 스크립트 최상단에 반드시 추가
WHENEVER SQLERROR EXIT FAILURE
SELECT NAME, OPEN_MODE FROM V$PDBS WHERE NAME = ‘&&PDB_NAME’;
“`
- 자동 시작 PDB 목록 정기 관리 및 모니터링
ALTER PLUGGABLE DATABASE pdb_name SAVE STATE 명령으로 OPEN 상태가 저장된 PDB는 CDB 재시작 시 자동으로 열립니다. 이런 PDB는 DBA가 모르는 사이에 OPEN 상태를 유지하므로, 정기적으로 DBA_PDB_SAVED_STATES 뷰를 조회하여 자동 시작 PDB 목록을 관리하고, 불필요한 항목은 DISCARD STATE로 제거하는 습관을 들이세요.
“`sql
— 자동 시작 PDB 목록 조회
SELECT CON_NAME, STATE FROM DBA_PDB_SAVED_STATES;
— 불필요한 자동 시작 설정 제거
ALTER PLUGGABLE DATABASE pdb_name DISCARD STATE;
“`
관련 에러
- ORA-65017:
seed pluggable database may not be dropped— PDB$SEED를 삭제하려 할 때 발생하며, PDB 구조 변경 시 함께 주의해야 합니다. - ORA-65086:
cannot open/close the pluggable database— PDB의 OPEN/CLOSE 권한이 없을 때 발생하며, ORA-65178과 함께 접근 권한 문제로 연계되어 나타날 수 있습니다. - ORA-01109:
database not open— 일반 Non-CDB 환경에서 데이터베이스가 닫혀 있을 때 발생하는 유사 에러로, PDB 환경의 ORA-65178과 개념적으로 대응됩니다. - ORA-65020:
pluggable database already closed— PDB를 이미 닫힌 상태에서 다시 CLOSE하려 할 때 발생하며, 상태 확인 없이 무조건 CLOSE를 시도하는 스크립트에서 종종 마주칩니다.
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.