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

ORA-65048
2026년 10월 14일 | DBMS Error 가이드

이 글에서 다루는 내용

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

ORA-65048 error encountered when processing the pluggable database 는?

ORA-65048 에러는 Oracle Multitenant 환경에서 PDB(Pluggable Database)를 처리하는 과정에서 발생하는 오류입니다. 이 에러는 CDB(Container Database) 내에서 PDB를 열거나, 닫거나, 플러그/언플러그하는 작업 중에 내부적으로 문제가 생겼을 때 발생하며, 단독으로 나타나기보다는 반드시 다른 하위 에러 메시지(ORA-XXXXX)와 함께 스택 형태로 출력됩니다. 즉, ORA-65048은 문제의 근본 원인을 직접 알려주는 에러가 아니라, PDB 처리 중 상위 레벨에서 포착된 래퍼(wrapper) 에러이므로 Alert 로그나 트레이스 파일에서 함께 출력되는 하위 에러를 반드시 확인해야 합니다.


주요 발생 원인

1. PDB 데이터 파일 또는 임시 파일 접근 불가

가장 빈번하게 발생하는 원인으로, PDB에 속한 데이터 파일(.dbf)이나 임시 파일(temp file)이 OS 레벨에서 삭제되었거나 권한 문제, 마운트 해제 등으로 접근할 수 없는 상태일 때 발생합니다. Oracle 인스턴스가 PDB를 OPEN 하려 할 때 해당 파일들을 확인하는 과정에서 I/O 에러가 발생하고, 이것이 ORA-65048과 함께 ORA-01157(cannot identify/lock data file), ORA-01110 등의 하위 에러로 보고됩니다.

2. PDB의 플러그인 호환성 문제 또는 메타데이터 불일치

PDB를 다른 CDB로 이동(plug in)하거나 복제(clone)하는 과정에서 대상 CDB와 소스 PDB 간의 DB 버전, 문자셋(character set), 컴포넌트 구성이 맞지 않으면 ORA-65048이 발생합니다. 또한 PDB$SEED나 CDB$ROOT의 메타데이터와 PDB 내부 메타데이터가 불일치할 경우에도 PDB를 OPEN하는 과정에서 이 에러가 발생하며, 이 경우 PDB_PLUG_IN_VIOLATIONS 뷰를 통해 위반 사항을 확인할 수 있습니다.

3. PDB OPEN 중 내부 딕셔너리 동기화 실패 또는 언두(Undo) 관련 문제

Oracle 12c 이상의 Multitenant 환경에서 PDB를 처음 열거나 패치 적용 후 재오픈할 때, 내부 데이터 딕셔너리 업그레이드 또는 동기화 작업이 실패하면 ORA-65048이 발생할 수 있습니다. 특히 Local Undo Mode와 Shared Undo Mode 간 전환, 또는 Undo 테이블스페이스가 손상되거나 누락된 경우에 이 에러가 나타나며, 보통 ORA-600(내부 에러) 또는 ORA-65011 계열의 에러와 함께 나타납니다.


해결 방법

원인 1: 데이터 파일 접근 불가 문제 해결

먼저 Alert 로그와 함께 어떤 파일에 문제가 있는지 확인합니다.

-- CDB$ROOT에서 해당 PDB의 데이터 파일 상태 확인
SELECT file#, name, status, con_id
FROM v$datafile
WHERE con_id = (SELECT con_id FROM v$pdbs WHERE name = 'YOUR_PDB_NAME');

-- 임시 파일 상태 확인
SELECT file#, name, status, con_id
FROM v$tempfile
WHERE con_id = (SELECT con_id FROM v$pdbs WHERE name = 'YOUR_PDB_NAME');

파일이 실제로 존재하는지 OS에서 확인 후, 파일이 다른 경로로 이동되었다면 아래와 같이 경로를 수정합니다.

-- PDB에 접속하여 데이터 파일 경로 수정
ALTER SESSION SET CONTAINER = YOUR_PDB_NAME;

-- 오프라인 처리 후 경로 변경
ALTER DATABASE DATAFILE '/old/path/datafile01.dbf'
    OFFLINE;

-- 파일을 새 경로로 복사한 뒤 이름 변경
ALTER DATABASE RENAME FILE '/old/path/datafile01.dbf'
    TO '/new/path/datafile01.dbf';

-- 복구 수행
RECOVER DATAFILE '/new/path/datafile01.dbf';

-- 온라인 복구
ALTER DATABASE DATAFILE '/new/path/datafile01.dbf' ONLINE;

원인 2: PDB 플러그인 호환성 문제 해결

PDB를 플러그인한 후 반드시 위반 사항 뷰를 확인합니다.

-- PDB 플러그인 위반 사항 조회
SELECT name, cause, type, status, message, action
FROM pdb_plug_in_violations
WHERE name = 'YOUR_PDB_NAME'
ORDER BY time DESC;

-- 현재 PDB 상태 확인
SELECT name, open_mode, restricted, con_id
FROM v$pdbs
WHERE name = 'YOUR_PDB_NAME';

위반 사항에 따라 RESTRICTED 모드로 PDB를 열고 datapatch 또는 noncdb_to_pdb.sql을 실행합니다.

-- RESTRICTED 모드로 PDB 오픈
ALTER PLUGGABLE DATABASE YOUR_PDB_NAME OPEN RESTRICTED;

-- PDB 컨테이너로 전환 후 딕셔너리 동기화
ALTER SESSION SET CONTAINER = YOUR_PDB_NAME;

-- 필요 시 noncdb_to_pdb.sql 실행 (Non-CDB -> PDB 전환 시)
@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql

-- 패치 적용 후에는 datapatch 도구를 OS에서 실행
-- $ cd $ORACLE_HOME/OPatch
-- $ ./datapatch -verbose

원인 3: 딕셔너리 동기화 실패 해결

내부 딕셔너리 동기화 실패 시 UPGRADE 모드로 오픈하여 복구를 시도합니다.

-- UPGRADE 모드로 PDB 오픈 (딕셔너리 재동기화)
ALTER PLUGGABLE DATABASE YOUR_PDB_NAME OPEN UPGRADE;

-- 또는 모든 PDB에 대해 일괄 적용
ALTER PLUGGABLE DATABASE ALL OPEN UPGRADE;

-- 이후 catupgrd.sql 또는 dbupgrade 유틸리티 실행
-- OS에서 실행:
-- $ cd $ORACLE_HOME/bin
-- $ ./dbupgrade -c 'YOUR_PDB_NAME' -l /tmp/upgrade_log

-- 완료 후 정상 모드로 재오픈
ALTER PLUGGABLE DATABASE YOUR_PDB_NAME CLOSE IMMEDIATE;
ALTER PLUGGABLE DATABASE YOUR_PDB_NAME OPEN;

-- 언두 관련 문제 확인
SELECT status, tablespace_name
FROM dba_tablespaces
WHERE contents = 'UNDO';

-- Local Undo 활성화 여부 확인
SELECT property_name, property_value
FROM database_properties
WHERE property_name = 'LOCAL_UNDO_ENABLED';

예방 방법

1. PDB 상태 및 파일 모니터링 자동화

정기적으로 PDB의 상태와 데이터 파일 접근 가능 여부를 모니터링하는 스크립트를 스케줄러(DBMS_SCHEDULER 또는 크론)에 등록해 운영합니다. Alert 로그를 실시간으로 파싱하여 ORA- 에러 발생 시 즉시 알림을 받을 수 있도록 모니터링 체계를 구축하고, Oracle Enterprise Manager(OEM) 또는 서드파티 모니터링 툴을 활용하여 PDB OPEN 실패 이벤트를 사전에 감지하는 것이 중요합니다.

-- PDB 전체 상태 정기 점검 쿼리 (스케줄 등록 추천)
SELECT name, open_mode, restricted, open_time, con_id
FROM v$pdbs
ORDER BY con_id;

-- 데이터 파일 상태 일괄 점검
SELECT d.con_id, p.name AS pdb_name, d.file#, d.name AS file_name, d.status
FROM v$datafile d
JOIN v$pdbs p ON d.con_id = p.con_id
WHERE d.status != 'ONLINE'
ORDER BY d.con_id;

2. PDB Plug/Unplug 전 사전 검증 철저히 수행

PDB를 다른 CDB로 이동하거나 복제하기 전에 반드시 DBMS_PDB.CHECK_PLUG_COMPATIBILITY 함수를 사용하여 호환성을 사전에 검증합니다. 검증 없이 무작정 플러그인을 시도하면 ORA-65048을 포함한 다양한 에러가 발생할 수 있으며, 특히 버전이 다른 CDB 간 PDB 이동 시에는 My Oracle Support(MOS)의 지원 매트릭스를 반드시 확인해야 합니다.

-- PDB 플러그인 전 호환성 사전 검증
BEGIN
    IF DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
        pdb_descr_file => '/backup/pdb_export.xml',
        pdb_name       => 'NEW_PDB_NAME'
    ) THEN
        DBMS_OUTPUT.PUT_LINE('Compatible: PDB can be plugged in.');
    ELSE
        DBMS_OUTPUT.PUT_LINE('Incompatible: Check PDB_PLUG_IN_VIOLATIONS.');
    END IF;
END;
/

관련 에러

  • ORA-65011: PDB가 존재하지 않거나 찾을 수 없을 때 발생하며, ORA-65048과 함께 자주 나타납니다.
  • ORA-01157 / ORA-01110: 데이터 파일을 식별하거나 잠글 수 없을 때 발생하는 에러로, PDB 파일 접근 불가 시 ORA-65048의 하위 에러로 자주 등장합니다.
  • ORA-65166: PDB 정보 동기화 실패와 관련된 에러로, 딕셔너리 불일치 상황에서 ORA-65048과 함께 발생합니다.
  • ORA-17628: Oracle 원격 파일 접근 실패 에러로, ASM이나 NFS 환경에서 PDB 파일에 접근하지 못할 때 ORA-65048과 연계됩니다.
  • ORA-600: 내부 에러로, PDB 딕셔너리 동기화나 언두 처리 중 심각한 버그가 있을 때 ORA-65048과 함께 나타나며, 이 경우 Oracle Support에 SR을 오픈해야 합니다.
DBMS 에러 코드 시리즈

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

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

댓글 남기기