2026년 10월 15일 | DBMS Error 가이드
이 글에서 다루는 내용
ORA-65086 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
ORA-65086 cannot open or close the pluggable database 는?
ORA-65086 에러는 Oracle Multitenant 환경(Oracle 12c 이상)에서 PDB(Pluggable Database)를 열거나 닫으려 할 때 권한이 부족하거나, 상태 충돌, 또는 잘못된 컨테이너 컨텍스트에서 명령을 실행했을 때 발생합니다. 이 에러는 주로 DBA가 CDB(Container Database)가 아닌 잘못된 세션에서 PDB 제어 명령을 실행하거나, 해당 작업에 필요한 권한이 없는 계정으로 접속했을 때 자주 목격됩니다. Multitenant 아키텍처의 계층 구조를 이해하지 못한 상태에서 PDB를 조작하려 하면 이 에러가 반드시 발생하므로, CDB/PDB의 관계와 권한 구조를 명확히 파악하는 것이 중요합니다.
주요 발생 원인
1. 현재 세션이 CDB$ROOT가 아닌 PDB 컨텍스트에서 명령 실행
PDB를 열고 닫는 명령(ALTER PLUGGABLE DATABASE ... OPEN/CLOSE)은 반드시 CDB$ROOT 컨텍스트에서 실행해야 합니다. 현재 접속된 세션이 특정 PDB 내부에 있는 상태에서 다른 PDB를 제어하려 하면 ORA-65086이 발생합니다. 이는 Multitenant 아키텍처에서 PDB 간 직접적인 제어가 허용되지 않기 때문입니다.
2. 불충분한 권한 (Privilege 부족)
PDB를 열거나 닫으려면 해당 사용자가 ALTER PLUGGABLE DATABASE 또는 SYSDBA 권한을 보유해야 합니다. 권한이 없는 일반 사용자 계정이나, Common User이지만 적절한 권한이 부여되지 않은 계정으로 이 명령을 실행할 경우 에러가 발생합니다. 특히 Local User는 자신이 속한 PDB의 범위를 넘어서는 작업을 수행할 수 없습니다.
3. PDB 상태 충돌 (State Conflict)
이미 OPEN 상태인 PDB를 다시 OPEN하거나, RESTRICTED 모드에서 일반 OPEN 명령 사용 시 충돌이 발생할 수 있습니다. 또한 PDB가 특정 트랜잭션 또는 세션에 의해 점유되어 있는 상태에서 강제 CLOSE를 시도하면 내부 상태 불일치로 ORA-65086이 유발될 수 있습니다. PDB의 현재 상태를 반드시 조회한 후 명령을 실행해야 합니다.
해결 방법
원인 1 해결: 올바른 컨테이너 컨텍스트로 전환
먼저 현재 세션이 어느 컨테이너에 있는지 확인하고, CDB$ROOT로 전환한 후 명령을 실행합니다.
-- 현재 컨테이너 확인
SHOW CON_NAME;
-- 또는 V$ 뷰로 확인
SELECT SYS_CONTEXT('USERENV', 'CON_NAME') AS current_container FROM DUAL;
-- CDB$ROOT로 전환 (SYSDBA 권한 필요)
ALTER SESSION SET CONTAINER = CDB$ROOT;
-- 전환 후 PDB 열기
ALTER PLUGGABLE DATABASE pdb1 OPEN;
-- 특정 PDB 닫기
ALTER PLUGGABLE DATABASE pdb1 CLOSE IMMEDIATE;
-- 모든 PDB 열기
ALTER PLUGGABLE DATABASE ALL OPEN;
원인 2 해결: 권한 부여 및 확인
권한이 부족한 경우 SYSDBA로 접속하여 필요한 권한을 부여합니다.
-- SYSDBA로 접속
CONNECT / AS SYSDBA
-- 현재 사용자의 권한 확인
SELECT GRANTEE, PRIVILEGE, ADMIN_OPTION
FROM DBA_SYS_PRIVS
WHERE GRANTEE = 'YOUR_USERNAME';
-- Common User에게 ALTER PLUGGABLE DATABASE 권한 부여
GRANT ALTER PLUGGABLE DATABASE TO C##DBA_USER CONTAINER = ALL;
-- 특정 PDB에 대한 권한만 부여 (Local User의 경우)
-- 해당 PDB 컨텍스트로 전환 후
ALTER SESSION SET CONTAINER = pdb1;
GRANT ALTER PLUGGABLE DATABASE TO local_dba_user;
-- DBA 롤 부여 (Common User)
GRANT DBA TO C##DBA_USER CONTAINER = ALL;
원인 3 해결: PDB 상태 확인 후 적절한 명령 실행
현재 PDB 상태를 반드시 확인하고, 상태에 맞는 명령을 실행합니다.
-- PDB 상태 전체 조회
SELECT NAME, OPEN_MODE, RESTRICTED, OPEN_TIME
FROM V$PDBS
ORDER BY NAME;
-- 특정 PDB 상태 상세 확인
SELECT P.NAME,
P.OPEN_MODE,
P.RESTRICTED,
P.TOTAL_SIZE,
P.RECOVERY_STATUS
FROM V$PDBS P
WHERE P.NAME = 'PDB1';
-- RESTRICTED 모드로 열린 PDB 정상화
ALTER PLUGGABLE DATABASE pdb1 CLOSE;
ALTER PLUGGABLE DATABASE pdb1 OPEN;
-- PDB에 활성 세션이 있을 경우 강제 종료
ALTER PLUGGABLE DATABASE pdb1 CLOSE ABORT;
-- PDB 재시작 (Oracle 18c 이상)
ALTER PLUGGABLE DATABASE pdb1 CLOSE IMMEDIATE;
ALTER PLUGGABLE DATABASE pdb1 OPEN READ WRITE;
-- PDB 상태 저장 (재시작 후 자동 OPEN)
ALTER PLUGGABLE DATABASE pdb1 SAVE STATE;
-- 저장된 PDB 상태 조회
SELECT CON_NAME, INSTANCE_NAME, STATE
FROM DBA_PDB_SAVED_STATES;
추가: 원격 접속 시 올바른 방법
-- SQL*Plus에서 CDB에 SYSDBA로 직접 접속
sqlplus sys@cdb_service AS SYSDBA
-- 접속 후 컨테이너 확인 및 PDB 제어
SELECT SYS_CONTEXT('USERENV', 'CON_NAME') FROM DUAL;
ALTER PLUGGABLE DATABASE pdb_sales OPEN READ WRITE;
ALTER PLUGGABLE DATABASE pdb_hr CLOSE IMMEDIATE;
예방 방법
1. PDB 자동 시작 상태 저장(SAVE STATE) 및 서비스 구성 표준화
DBA 팀 내에서 PDB 관련 작업은 반드시 CDB$ROOT 컨텍스트에서 수행하도록 운영 절차(SOP)를 수립하고, PDB를 열 때마다 ALTER PLUGGABLE DATABASE ... SAVE STATE 명령을 실행하여 인스턴스 재시작 후에도 자동으로 올바른 상태로 복원되도록 설정합니다. 이를 통해 수동 개입을 최소화하고, 컨텍스트 혼동으로 인한 실수를 방지할 수 있습니다.
-- 운영 표준 스크립트 예시
ALTER SESSION SET CONTAINER = CDB$ROOT;
ALTER PLUGGABLE DATABASE ALL OPEN;
ALTER PLUGGABLE DATABASE ALL SAVE STATE;
2. 전용 공통 DBA 계정 및 권한 관리 정책 수립
PDB 제어 작업을 위한 전용 Common User(예: C##PDB_ADMIN)를 생성하고, ALTER PLUGGABLE DATABASE 권한을 CONTAINER=ALL 옵션으로 부여하여 권한 부족으로 인한 에러를 원천 차단합니다. 또한 권한 감사(Audit)를 활성화하여 누가 언제 PDB를 조작했는지 이력을 관리하면 장애 발생 시 빠른 원인 파악이 가능합니다.
-- 전용 PDB 관리 계정 생성 및 권한 부여
CREATE USER C##PDB_ADMIN IDENTIFIED BY "SecurePassword#2024"
CONTAINER = ALL;
GRANT CREATE SESSION TO C##PDB_ADMIN CONTAINER = ALL;
GRANT ALTER PLUGGABLE DATABASE TO C##PDB_ADMIN CONTAINER = ALL;
GRANT SELECT ON CDB_PDBS TO C##PDB_ADMIN CONTAINER = ALL;
GRANT SELECT ON V_$PDBS TO C##PDB_ADMIN CONTAINER = ALL;
-- PDB 작업 감사 설정
AUDIT ALTER PLUGGABLE DATABASE BY ACCESS;
관련 에러
- ORA-65040:
operation not allowed from within a pluggable database— CDB 전용 작업을 PDB 내부에서 시도할 때 발생하며, ORA-65086과 함께 가장 자주 목격되는 Multitenant 관련 에러입니다. - ORA-01109:
database not open— PDB 또는 CDB가 OPEN 상태가 아닐 때 발생하며, PDB OPEN 실패의 후속 에러로 나타날 수 있습니다. - ORA-65011:
pluggable database does not exist— 존재하지 않는 PDB 이름을 지정했을 때 발생하며, PDB 이름 오타로 인해 ORA-65086과 혼동될 수 있습니다. - ORA-01031:
insufficient privileges— 권한 부족 시 발생하는 일반적인 에러로, PDB 제어 권한 문제 시 ORA-65086과 함께 나타나는 경우가 있습니다.
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.