2026년 10월 16일 | DBMS Error 가이드
이 글에서 다루는 내용
ORA-65114 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
ORA-65114 space management error in pluggable database 는?
ORA-65114 에러는 Oracle Multitenant 환경에서 PDB(Pluggable Database) 내부의 공간 관리(Space Management) 작업 중 문제가 발생했을 때 나타나는 에러입니다. 이 에러는 PDB의 테이블스페이스 용량 초과, 공유 언두(Shared Undo) 설정 문제, 또는 PDB 내 로컬 언두(Local Undo) 세그먼트 관련 이슈로 인해 주로 발생합니다. Oracle 12c 이상의 멀티테넌트 아키텍처에서만 나타나는 에러이며, CDB(Container Database) 환경에서 PDB가 정상적으로 공간을 할당받지 못하거나 관리 권한에 문제가 있을 때 트리거됩니다.
주요 발생 원인
1. PDB 테이블스페이스 용량 초과 또는 MAXSIZE 제한 초과
PDB에 설정된 스토리지 한도(Storage Limit)나 테이블스페이스의 MAXSIZE 제한에 도달했을 때 가장 빈번하게 이 에러가 발생합니다. CDB 관리자가 특정 PDB에 대해 CREATE PLUGGABLE DATABASE 또는 ALTER PLUGGABLE DATABASE 명령으로 스토리지 제한을 설정한 경우, 해당 PDB 내에서 오브젝트 생성이나 DML 작업이 그 한도를 초과하면 공간 관리 에러가 발생합니다. 이는 멀티테넌트 환경에서 PDB별 자원 격리를 위한 설계적 특성이기도 합니다.
2. 로컬 언두(Local Undo) 테이블스페이스 부족 또는 손상
Oracle 12c R2 이상에서는 CDB가 Local Undo 모드로 운영될 수 있으며, 이 경우 각 PDB는 독립적인 UNDO 테이블스페이스를 갖습니다. 로컬 언두 테이블스페이스가 꽉 차거나 데이터 파일이 자동 확장(AUTOEXTEND) 설정이 누락된 경우, 트랜잭션 처리 중 ORA-65114가 발생합니다. 언두 세그먼트 경합이나 장기 실행 트랜잭션(Long Running Transaction)도 이 문제를 유발할 수 있습니다.
3. PDB 플러그인/언플러그 작업 시 메타데이터 불일치
PDB를 다른 CDB로 이동(Plug/Unplug)하거나 복제(Clone)하는 과정에서 공간 관리 메타데이터가 불일치하면 이 에러가 나타납니다. 특히 소스 CDB와 타겟 CDB의 블록 크기(Block Size), 문자셋(Character Set), 또는 언두 모드(Undo Mode) 설정이 다를 경우 PDB를 오픈하는 시점에 ORA-65114가 트리거될 수 있습니다. 이 경우 단순 재시작으로는 해결되지 않으며 반드시 메타데이터 검증 절차가 필요합니다.
해결 방법
원인 1: 테이블스페이스 용량 및 스토리지 제한 해결
먼저 현재 PDB의 스토리지 제한과 사용량을 확인합니다.
-- CDB$ROOT에서 PDB 스토리지 제한 확인
SELECT pdb_name,
con_id,
max_size,
max_shared_temp_size,
max_audit_size
FROM cdb_pdbs
ORDER BY con_id;
-- 특정 PDB로 전환 후 테이블스페이스 사용량 확인
ALTER SESSION SET CONTAINER = PDBNAME;
SELECT tablespace_name,
ROUND(used_space * 8192 / 1024 / 1024, 2) AS used_mb,
ROUND(tablespace_size * 8192 / 1024 / 1024, 2) AS total_mb,
ROUND(used_percent, 2) AS used_pct
FROM dba_tablespace_usage_metrics
ORDER BY used_percent DESC;
스토리지 제한을 늘리거나 데이터 파일을 추가합니다.
-- CDB$ROOT에서 PDB 스토리지 제한 증가
ALTER PLUGGABLE DATABASE pdbname
STORAGE (MAXSIZE 50G MAX_SHARED_TEMP_SIZE 10G);
-- 데이터 파일 자동 확장 활성화
ALTER DATABASE DATAFILE '/oracle/oradata/CDB/PDBNAME/users01.dbf'
AUTOEXTEND ON NEXT 256M MAXSIZE 10G;
-- 새 데이터 파일 추가
ALTER TABLESPACE USERS
ADD DATAFILE '/oracle/oradata/CDB/PDBNAME/users02.dbf'
SIZE 1G AUTOEXTEND ON NEXT 256M MAXSIZE 10G;
원인 2: 로컬 언두 테이블스페이스 문제 해결
현재 CDB가 Local Undo 모드인지 확인하고 UNDO 상태를 점검합니다.
-- Local Undo 모드 확인 (CDB$ROOT에서 실행)
SELECT property_name, property_value
FROM database_properties
WHERE property_name = 'LOCAL_UNDO_ENABLED';
-- PDB 내 UNDO 테이블스페이스 사용량 확인
ALTER SESSION SET CONTAINER = PDBNAME;
SELECT tablespace_name,
status,
ROUND(SUM(bytes) / 1024 / 1024, 2) AS size_mb
FROM dba_data_files
WHERE tablespace_name LIKE 'UNDO%'
GROUP BY tablespace_name, status;
-- 활성 언두 세그먼트 상태 확인
SELECT usn,
xacts,
rssize / 1024 / 1024 AS rssize_mb,
status
FROM v$rollstat
WHERE status != 'ONLINE'
ORDER BY rssize_mb DESC;
UNDO 테이블스페이스를 확장하거나 새로 생성합니다.
-- 언두 테이블스페이스 데이터 파일 확장
ALTER TABLESPACE UNDOTBS1
ADD DATAFILE '/oracle/oradata/CDB/PDBNAME/undotbs02.dbf'
SIZE 2G AUTOEXTEND ON NEXT 512M MAXSIZE 20G;
-- UNDO_RETENTION 파라미터 조정 (장기 트랜잭션 환경)
ALTER SYSTEM SET UNDO_RETENTION = 900 SCOPE = BOTH;
-- 장기 실행 트랜잭션 식별 후 종료 (필요 시)
SELECT s.sid,
s.serial#,
s.username,
t.start_time,
t.used_ublk * 8 / 1024 AS undo_mb
FROM v$session s
JOIN v$transaction t ON s.taddr = t.addr
ORDER BY t.used_ublk DESC;
-- 문제 세션 종료
ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;
원인 3: PDB 플러그인 메타데이터 불일치 해결
-- PDB 호환성 검증 (언플러그 전 실행)
SET SERVEROUTPUT ON
DECLARE
compatible CONSTANT VARCHAR2(3) :=
CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
pdb_descr_file => '/tmp/pdbname.xml',
pdb_name => 'PDBNAME')
WHEN TRUE THEN 'YES'
ELSE 'NO'
END;
BEGIN
DBMS_OUTPUT.PUT_LINE('Is PDB compatible? ' || compatible);
END;
/
-- 비호환성 상세 내역 확인
SELECT name, cause, type, status, description, action
FROM pdb_plug_in_violations
WHERE name = 'PDBNAME'
ORDER BY time DESC;
-- PDB 데이터 딕셔너리 동기화 (플러그 후 실행)
ALTER SESSION SET CONTAINER = PDBNAME;
-- 위반 사항 자동 수정 시도
EXECUTE DBMS_PDB.SYNC_PDB;
-- 필요 시 datapatch 수행 (OS에서 실행)
-- $ORACLE_HOME/OPatch/datapatch -verbose
예방 방법
1. 정기적인 PDB 스토리지 모니터링 자동화
PDB의 테이블스페이스 사용률과 스토리지 제한을 지속적으로 모니터링하는 스크립트를 스케줄러로 등록하여 임계치 초과 전 사전 대응하는 것이 핵심입니다. Oracle Enterprise Manager(OEM) 또는 아래와 같은 커스텀 스크립트를 활용하여 사용률이 80%를 초과하면 자동 알림이 발송되도록 구성하는 것을 권장합니다.
-- DBMS_SCHEDULER를 이용한 정기 모니터링 JOB 등록
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'PDB_SPACE_MONITOR',
job_type => 'PLSQL_BLOCK',
job_action => '
DECLARE
v_threshold NUMBER := 80;
BEGIN
FOR r IN (
SELECT con_id, tablespace_name, used_percent
FROM cdb_tablespace_usage_metrics
WHERE used_percent > v_threshold
) LOOP
-- 알림 로직 (이메일 또는 로그 테이블 INSERT)
INSERT INTO space_alert_log
(con_id, ts_name, used_pct, alert_time)
VALUES
(r.con_id, r.tablespace_name, r.used_percent, SYSDATE);
END LOOP;
COMMIT;
END;',
start_date => SYSTIMESTAMP,
repeat_interval => 'FREQ=HOURLY;INTERVAL=1',
enabled => TRUE,
comments => 'PDB tablespace usage monitoring'
);
END;
/
2. PDB 플러그인/언플러그 시 사전 호환성 검증 절차 수립
PDB 이동이나 복제 작업 전에 반드시 DBMS_PDB.CHECK_PLUG_COMPATIBILITY를 수행하고, PDB_PLUG_IN_VIOLATIONS 뷰를 통해 위반 사항이 없는지 확인하는 절차를 표준화해야 합니다. Local Undo 모드, 문자셋, DB 블록 크기 등의 설정이 소스와 타겟 CDB 간에 일치하는지 체크리스트를 만들어 운영 절차서에 반드시 포함시키는 것이 중요합니다.
관련 에러
- ORA-01652: 임시 세그먼트 확장 실패 (TEMP 테이블스페이스 부족 시 함께 발생)
- ORA-30036: UNDO 테이블스페이스 확장 불가 (언두 공간 부족 시 동반 발생)
- ORA-65011: Pluggable database does not exist (PDB 존재하지 않음, 메타데이터 불일치 시 연관)
- ORA-65048: PDB 플러그인 위반 사항 존재 시 발생하며 ORA-65114와 함께 나타나는 경우가 많음
- ORA-01653: 테이블스페이스의 특정 오브젝트에 익스텐트 추가 불가, 공간 부족 상황에서 ORA-65114와 연쇄 발생
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.