2026년 10월 17일 | DBMS Error 가이드
이 글에서 다루는 내용
ORA-65124 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
ORA-65124 encryption wallet not open in all pluggable databases 는?
ORA-65124 에러는 Oracle Multitenant 환경(CDB/PDB 구조)에서 TDE(Transparent Data Encryption) 작업을 수행할 때, CDB의 모든 PDB(Pluggable Database)에서 암호화 월렛(Encryption Wallet)이 열려 있지 않은 상태일 경우 발생하는 에러입니다. Oracle 12c 이후 CDB 환경에서는 루트 컨테이너(CDB$ROOT)뿐만 아니라 연결된 모든 PDB에서 월렛이 정상적으로 열려 있어야 TDE 관련 작업이 허용됩니다. 특히 데이터베이스 재기동 후, PDB Unplug/Plug 작업 후, 또는 월렛 비밀번호 변경 후 일부 PDB에서 월렛이 자동으로 열리지 않아 이 에러가 빈번하게 발생합니다.
주요 발생 원인
1. 데이터베이스 재기동 후 PDB 월렛 미오픈
데이터베이스를 재시작하면 CDB$ROOT의 월렛은 auto-login 설정 또는 수동 오픈으로 열 수 있지만, 일부 PDB에서는 월렛이 자동으로 열리지 않는 경우가 많습니다. 특히 WALLET_ROOT 파라미터를 사용하는 환경에서 각 PDB가 별도의 월렛 경로를 가지도록 구성되어 있을 때, PDB별로 월렛을 명시적으로 오픈해야 하는 상황이 발생합니다. Auto-login 월렛을 구성하지 않은 경우라면 매 재기동 시마다 수동으로 월렛을 오픈해야 하므로 운영 실수로 인해 이 에러가 자주 나타납니다.
2. PDB Unplug/Plug 또는 Clone 작업 후 월렛 상태 불일치
PDB를 다른 CDB로 이전하거나 Clone하는 과정에서 원본 CDB의 TDE 마스터 키가 대상 CDB의 월렛에 적절히 임포트되지 않으면 해당 PDB에서 월렛이 정상적으로 열리지 않습니다. 또한 PDB를 Plug-in할 때 대상 CDB의 월렛이 해당 PDB의 암호화 키를 인식하지 못하는 경우도 빈번하게 발생합니다. 이 경우 단순 월렛 오픈 명령만으로는 해결되지 않으며, TDE 마스터 키 재생성 또는 임포트 작업이 추가로 필요합니다.
3. 월렛 비밀번호 변경 또는 월렛 재생성 후 PDB 반영 누락
CDB 레벨에서 월렛 비밀번호를 변경하거나 월렛을 재생성(Rekey)했을 때, 변경 사항이 모든 PDB에 즉시 반영되지 않거나 일부 PDB가 닫힌 상태(MOUNTED 또는 RESTRICTED 모드)였다면 해당 PDB는 새로운 월렛 상태를 인식하지 못합니다. 이후 해당 PDB에서 암호화된 데이터에 접근하거나 TDE 관련 DDL을 실행할 때 ORA-65124가 발생합니다. 월렛 관련 작업은 반드시 모든 PDB가 OPEN 상태인지 확인 후 수행해야 합니다.
해결 방법
해결책 1: 현재 월렛 상태 확인
먼저 CDB 전체 PDB에서 월렛 상태를 확인합니다.
-- CDB$ROOT에서 모든 PDB의 월렛 상태 확인
SELECT CON_ID, STATUS, WALLET_TYPE, WALLET_ORDER, KEYSTORE_MODE
FROM V$ENCRYPTION_WALLET
ORDER BY CON_ID;
-- PDB 목록 및 상태 확인
SELECT CON_ID, NAME, OPEN_MODE
FROM V$PDBS
ORDER BY CON_ID;
위 쿼리에서 STATUS가 NOT_AVAILABLE 또는 CLOSED인 PDB를 식별합니다.
해결책 2: CDB 레벨에서 모든 PDB 월렛 오픈
가장 일반적인 해결 방법으로, CDB$ROOT에서 CONTAINER=ALL 옵션을 사용하여 모든 PDB의 월렛을 한 번에 오픈합니다.
-- CDB$ROOT에 SYS로 접속 후 실행
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN
IDENTIFIED BY "wallet_password"
CONTAINER = ALL;
-- 오픈 후 상태 재확인
SELECT CON_ID, STATUS, WALLET_TYPE
FROM V$ENCRYPTION_WALLET
ORDER BY CON_ID;
해결책 3: 특정 PDB에서만 월렛 오픈
특정 PDB만 월렛이 닫혀 있는 경우, 해당 PDB에 접속하여 월렛을 오픈합니다.
-- 특정 PDB로 세션 전환
ALTER SESSION SET CONTAINER = PDB_NAME;
-- 해당 PDB에서 월렛 오픈
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN
IDENTIFIED BY "wallet_password";
-- 상태 확인
SELECT STATUS, WALLET_TYPE, KEYSTORE_MODE
FROM V$ENCRYPTION_WALLET;
해결책 4: Auto-login 월렛 설정 (재기동 후 자동 오픈)
재기동 후 월렛이 자동으로 열리지 않는 문제를 방지하려면 Auto-login 월렛을 구성합니다.
-- Auto-login 월렛 생성 (LOCAL 타입은 해당 호스트에서만 유효)
ADMINISTER KEY MANAGEMENT CREATE AUTO_LOGIN KEYSTORE
FROM KEYSTORE '/opt/oracle/wallet'
IDENTIFIED BY "wallet_password";
-- 또는 LOCAL AUTO_LOGIN 설정
ADMINISTER KEY MANAGEMENT CREATE LOCAL AUTO_LOGIN KEYSTORE
FROM KEYSTORE '/opt/oracle/wallet'
IDENTIFIED BY "wallet_password";
-- Auto-login 설정 후 월렛 타입 확인
SELECT CON_ID, WALLET_TYPE, STATUS
FROM V$ENCRYPTION_WALLET
ORDER BY CON_ID;
해결책 5: PDB Plug-in 후 마스터 키 재설정
PDB를 새로운 CDB에 Plug-in 한 후 월렛 오류가 발생하는 경우, 해당 PDB에서 새로운 TDE 마스터 키를 생성합니다.
-- 대상 CDB의 월렛을 먼저 오픈
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN
IDENTIFIED BY "wallet_password"
CONTAINER = ALL;
-- 해당 PDB로 이동하여 새로운 마스터 키 설정
ALTER SESSION SET CONTAINER = NEW_PDB_NAME;
ADMINISTER KEY MANAGEMENT SET KEY
IDENTIFIED BY "wallet_password"
WITH BACKUP USING 'before_rekey';
-- 키 설정 확인
SELECT KEY_ID, CREATION_TIME, ACTIVATION_TIME, CON_ID
FROM V$ENCRYPTION_KEYS
ORDER BY CREATION_TIME DESC;
예방 방법
1. Auto-login Wallet 구성 및 startup 트리거 활용
운영 환경에서는 반드시 Auto-login Wallet을 구성하여 데이터베이스 재기동 시 월렛이 자동으로 열리도록 설정해야 합니다. 추가적인 보안이 필요한 경우에도 최소한 LOCAL AUTO_LOGIN 타입을 사용하고, 아래와 같이 DB startup 시 모든 PDB에서 월렛이 오픈되도록 점검하는 스크립트를 자동화하는 것을 권장합니다.
-- DB 기동 후 월렛 상태 점검 스크립트 (cron 또는 scheduler 활용)
SELECT CON_ID, NAME, STATUS, WALLET_TYPE
FROM V$PDBS P
JOIN V$ENCRYPTION_WALLET W USING (CON_ID)
WHERE W.STATUS != 'OPEN'
AND P.OPEN_MODE = 'READ WRITE';
위 쿼리 결과가 행을 반환하면 즉시 월렛 오픈 조치를 수행하도록 모니터링 체계를 구축하는 것이 중요합니다.
2. TDE 관련 작업 전 체크리스트 수립
월렛 비밀번호 변경, Rekey, PDB Plug-in/Unplug 등의 TDE 관련 작업을 수행하기 전에 반드시 모든 PDB의 상태(OPEN_MODE = 'READ WRITE')와 월렛 상태(STATUS = 'OPEN')를 사전 점검하는 체크리스트를 수립해야 합니다. 또한 월렛 작업 후에는 V$ENCRYPTION_WALLET 뷰를 통해 모든 CON_ID에서 STATUS가 OPEN인지 반드시 검증하고, 변경 전 월렛 백업(WITH BACKUP USING 절 활용)을 습관화하는 것이 중요합니다.
관련 에러
- ORA-28365: Wallet is not open — 단일 인스턴스 또는 개별 PDB 레벨에서 월렛이 닫혀 있을 때 발생하는 유사 에러
- ORA-28374: Typed master encryption key not found in wallet — 월렛은 열려 있지만 해당 PDB에 맞는 TDE 마스터 키가 없을 때 발생
- ORA-46658: Keystore not open in the container — PDB에서 키스토어가 열리지 않은 상태로 TDE 작업 시도 시 발생
- ORA-65040: Operation not allowed from within a pluggable database — PDB 내에서 CDB 레벨 작업을 잘못 실행했을 때 발생하며, 월렛 관련 작업 시 컨텍스트를 혼동할 때 함께 나타남
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.