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

ORA-65054
2026년 10월 15일 | DBMS Error 가이드

이 글에서 다루는 내용

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

ORA-65054 cannot open pluggable database in the desired mode 는?

ORA-65054 에러는 Oracle Multitenant 환경(12c 이상)에서 PDB(Pluggable Database)를 특정 모드(READ WRITE, READ ONLY, RESTRICTED 등)로 열려고 할 때 현재 상태 또는 제약 조건으로 인해 해당 모드로 전환이 불가능한 경우 발생합니다. 이 에러는 CDB(Container Database) 전체 또는 PDB 수준의 설정 충돌, 잠금 상태, 혹은 권한 부족이 원인이 되어 나타나는 경우가 많습니다. 특히 RAC(Real Application Clusters) 환경이나 Data Guard 구성에서 모드 제약이 더욱 엄격하게 적용되기 때문에 DBA들이 자주 마주치는 에러 중 하나입니다.


주요 발생 원인

1. PDB가 이미 다른 인스턴스에 의해 특정 모드로 열려 있는 경우 (RAC 환경)

Oracle RAC 환경에서는 여러 인스턴스가 동일한 PDB에 접근할 수 있습니다. 한 인스턴스에서 PDB를 READ ONLY 모드로 열어 둔 상태에서 다른 인스턴스가 READ WRITE 모드로 열려고 하면 ORA-65054가 발생합니다. 이 경우 모든 인스턴스에서의 PDB 상태를 확인하고 일관된 모드로 통일해야 합니다.

2. Data Guard Standby 환경에서 Primary와 모드 충돌

Data Guard 구성에서 Standby 데이터베이스의 PDB를 READ WRITE 모드로 열려고 할 때 이 에러가 빈번하게 발생합니다. Standby DB는 기본적으로 READ ONLY 또는 MOUNTED 상태를 유지해야 하며, 이 제약을 무시하고 쓰기 가능한 모드로 전환 시도 시 Oracle이 ORA-65054를 반환합니다. Active Data Guard 라이선스가 있을 때만 READ ONLY WITH APPLY 모드가 허용됩니다.

3. PDB의 저장된 오픈 모드(Saved State)와 요청 모드 간의 불일치

Oracle 12.2 이상에서는 ALTER PLUGGABLE DATABASE SAVE STATE 명령으로 PDB의 오픈 상태를 저장할 수 있습니다. 저장된 상태와 현재 요청하는 오픈 모드가 충돌하거나, PDB가 RESTRICTED 모드로 저장되어 있는데 일반 READ WRITE로 열려 하는 경우 이 에러가 발생할 수 있습니다. 또한 내부적으로 PDB 딕셔너리 불일치가 있을 경우에도 원하는 모드로 열리지 않을 수 있습니다.


해결 방법

원인 1 해결: RAC 환경에서 모든 인스턴스 상태 확인 및 통일

먼저 모든 인스턴스에서 PDB 상태를 조회합니다.

-- CDB 루트에서 모든 PDB의 상태 확인
SELECT inst_id, con_id, name, open_mode, restricted
FROM gv$pdbs
ORDER BY inst_id, name;

RAC에서 특정 인스턴스의 PDB를 닫고 원하는 모드로 다시 여는 방법:

-- 인스턴스 1에서 PDB 닫기
ALTER PLUGGABLE DATABASE pdb_name CLOSE IMMEDIATE INSTANCES=ALL;

-- 모든 인스턴스에서 READ WRITE로 열기
ALTER PLUGGABLE DATABASE pdb_name OPEN READ WRITE INSTANCES=ALL;

-- 상태 재확인
SELECT inst_id, name, open_mode FROM gv$pdbs WHERE name = 'PDB_NAME';

원인 2 해결: Data Guard 환경에서 올바른 모드로 열기

Standby 환경에서는 READ ONLY 또는 READ ONLY WITH APPLY만 허용됩니다.

-- Standby DB에서 PDB 상태 확인
SELECT name, open_mode, db_unique_name FROM v$database;
SELECT name, open_mode FROM v$pdbs;

-- Standby에서 올바른 모드로 PDB 열기 (Active Data Guard 라이선스 보유 시)
ALTER PLUGGABLE DATABASE pdb_name OPEN READ ONLY;

-- MRP(Managed Recovery Process) 확인
SELECT process, status, sequence# FROM v$managed_standby
WHERE process = 'MRP0';

Primary에서 변경한 PDB 상태가 Standby에 적용되려면:

-- Primary에서 PDB 상태 설정
ALTER PLUGGABLE DATABASE pdb_name OPEN READ WRITE;
ALTER PLUGGABLE DATABASE pdb_name SAVE STATE;

원인 3 해결: 저장된 상태(Saved State) 초기화 및 재설정

-- 현재 PDB의 저장된 상태 확인
SELECT con_name, instance_name, state
FROM dba_pdb_saved_states;

-- 저장된 상태 초기화 (CDB$ROOT에서 실행)
ALTER PLUGGABLE DATABASE pdb_name DISCARD STATE;

-- PDB를 원하는 모드로 열기
ALTER PLUGGABLE DATABASE pdb_name OPEN READ WRITE;

-- 새로운 상태 저장
ALTER PLUGGABLE DATABASE pdb_name SAVE STATE;

-- 적용 확인
SELECT con_name, instance_name, state
FROM dba_pdb_saved_states;

추가: PDB 상태 강제 초기화 (딕셔너리 불일치 의심 시)

-- PDB를 RESTRICTED 모드로 먼저 열기
ALTER PLUGGABLE DATABASE pdb_name OPEN RESTRICTED;

-- RESTRICTED 상태에서 딕셔너리 동기화
-- datapatch 또는 noncdb_to_pdb.sql 실행이 필요할 수 있음

-- 정상 모드로 전환
ALTER PLUGGABLE DATABASE pdb_name CLOSE;
ALTER PLUGGABLE DATABASE pdb_name OPEN READ WRITE;

-- 에러 로그 확인
SELECT message_text, timestamp
FROM pdb_plug_in_violations
WHERE name = 'PDB_NAME'
ORDER BY timestamp DESC;

예방 방법

1. PDB 오픈 모드 변경 전 현재 상태를 반드시 사전 점검하는 절차 수립

운영 환경에서 PDB 모드를 변경하기 전에 gv$pdbs 뷰를 통해 모든 인스턴스의 현재 오픈 모드를 확인하는 사전 점검 스크립트를 표준화하세요. 특히 RAC나 Data Guard 환경에서는 인스턴스별 상태 차이가 ORA-65054의 주요 원인이 되므로, 변경 전후 상태를 모두 기록하는 변경 관리 절차를 운영 정책으로 수립하는 것이 중요합니다.

-- 사전 점검 스크립트 예시
SELECT inst_id, con_id, name, open_mode, restricted, recovery_status
FROM gv$pdbs
ORDER BY name, inst_id;

2. SAVE STATE 명령을 활용한 PDB 오픈 모드 자동화 및 문서화

DB 재시작 후 PDB가 자동으로 원하는 모드로 열리도록 ALTER PLUGGABLE DATABASE ... SAVE STATE 명령을 적극 활용하고, 저장된 상태를 dba_pdb_saved_states 뷰를 통해 정기적으로 검토하세요. 각 PDB의 의도된 오픈 모드를 내부 문서로 유지하면 신규 DBA가 잘못된 모드로 PDB를 열려는 시도를 사전에 방지할 수 있습니다.


관련 에러

  • ORA-65011: 지정한 PDB가 존재하지 않을 때 발생하며, PDB 이름 오타나 잘못된 CDB에서 작업할 때 나타납니다.
  • ORA-65019: PDB가 이미 열려 있는 상태에서 중복으로 OPEN 명령을 실행할 때 발생합니다.
  • ORA-01109: 데이터베이스가 열려 있지 않아 작업을 수행할 수 없을 때 발생하며, PDB MOUNT 상태에서 DML 시도 시 함께 나타납니다.
  • ORA-65040: Standby PDB에서 허용되지 않는 작업을 시도할 때 발생하는 에러로, ORA-65054와 함께 Data Guard 환경에서 자주 등장합니다.
  • ORA-16000: Data Guard Standby DB에서 READ WRITE 작업 시도 시 발생하며, ORA-65054 발생 시 함께 확인해야 할 에러입니다.

DBMS 에러 코드 시리즈

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

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

댓글 남기기