2026년 10월 12일 | DBMS Error 가이드
이 글에서 다루는 내용
ORA-65019 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
ORA-65019 open pluggable database encountered errors 는?
ORA-65019 에러는 Oracle Multitenant 환경에서 PDB(Pluggable Database)를 OPEN 하려는 시도 중 하나 이상의 내부 오류가 발생했을 때 나타나는 에러입니다. 이 에러는 단독으로 발생하기보다는 다른 에러(ORA-01157, ORA-01110, ORA-65011 등)와 함께 스택 형태로 출력되는 경우가 많으며, 근본 원인은 함께 출력된 하위 에러 메시지에서 확인해야 합니다. PDB의 데이터파일 손상, 미디어 장애, 플러그인 과정의 메타데이터 불일치, 또는 잘못된 PDB 상태(RESTRICTED, MOUNT) 등이 복합적으로 얽혀 발생합니다.
주요 발생 원인
1. 데이터파일 누락 또는 접근 불가
PDB를 구성하는 데이터파일이 OS 레벨에서 삭제되었거나, 파일 시스템 마운트 해제, 권한 문제 등으로 Oracle 프로세스가 해당 파일에 접근하지 못할 때 가장 빈번하게 발생합니다. Alert 로그에 ORA-01157(cannot identify/lock data file)과 ORA-01110(data file N: ‘filename’)이 함께 출력되므로, 먼저 alert log를 확인하여 어떤 파일에 문제가 생겼는지 파악하는 것이 우선입니다.
2. PDB 플러그인(Plug-in) 또는 클론(Clone) 이후 메타데이터 불일치
다른 CDB에서 unplug/plug 하거나 PDB를 클론한 이후 XML 메타데이터와 실제 데이터파일 경로가 일치하지 않거나, 소스 CDB와 타깃 CDB 간 버전·문자셋·옵션 차이가 있을 때 ORA-65019가 발생합니다. 이 경우 PDB_PLUG_IN_VIOLATIONS 뷰에서 위반 사항을 먼저 조회해야 하며, datapatch 실행이나 noncdb_to_pdb.sql 스크립트 재실행이 필요한 경우도 있습니다.
3. PDB가 RESTRICTED 모드로 열리거나 MOUNT 상태에서 멈춤
내부 컴포넌트 재컴파일 실패, 딕셔너리 뷰 불일치, 또는 PDB 오픈 중 발생한 내부 에러로 인해 PDB가 완전히 OPEN 되지 못하고 MOUNTED 또는 READ WRITE RESTRICTED 상태에 머무는 경우입니다. 이 상태에서는 DBA_REGISTRY, DBA_OBJECTS에서 INVALID 오브젝트를 확인하고, utlrp.sql을 실행하여 재컴파일을 시도해야 합니다.
해결 방법
원인 1: 데이터파일 누락/접근 불가 해결
먼저 Alert 로그와 V$DATAFILE을 조회하여 문제 파일을 확인합니다.
-- CDB$ROOT에서 실행: PDB 컨테이너 별 데이터파일 상태 확인
SELECT con_id, file#, status, name
FROM v$datafile
WHERE con_id = (SELECT con_id FROM v$pdbs WHERE name = 'MYPDB')
ORDER BY file#;
-- PDB에 접속하여 오프라인 데이터파일 확인
ALTER SESSION SET CONTAINER = MYPDB;
SELECT file#, status, name
FROM v$datafile
WHERE status != 'ONLINE';
파일이 실제로 존재하지만 경로가 변경된 경우, RENAME으로 경로를 수정합니다.
-- CDB$ROOT에서 PDB의 데이터파일 경로 변경 (파일이 이미 새 위치에 존재할 때)
ALTER SESSION SET CONTAINER = MYPDB;
-- PDB를 MOUNT 상태로 전환
ALTER PLUGGABLE DATABASE MYPDB CLOSE IMMEDIATE;
ALTER PLUGGABLE DATABASE MYPDB OPEN RESTRICTED;
-- 데이터파일 경로 재지정
ALTER DATABASE RENAME FILE '/old/path/pdb_data01.dbf'
TO '/new/path/pdb_data01.dbf';
-- 정상 OPEN 시도
ALTER PLUGGABLE DATABASE MYPDB CLOSE;
ALTER PLUGGABLE DATABASE MYPDB OPEN;
파일이 완전히 소실된 경우, RMAN을 통한 복구가 필요합니다.
-- RMAN에서 특정 데이터파일 복구
RMAN> RUN {
RESTORE PLUGGABLE DATABASE MYPDB;
RECOVER PLUGGABLE DATABASE MYPDB;
ALTER PLUGGABLE DATABASE MYPDB OPEN RESETLOGS;
}
원인 2: PDB 플러그인 후 메타데이터 불일치 해결
-- PDB_PLUG_IN_VIOLATIONS 조회로 위반 사항 확인
SELECT name, cause, type, message, status
FROM pdb_plug_in_violations
WHERE name = 'MYPDB'
ORDER BY time DESC;
-- STATUS가 PENDING인 항목이 있으면 datapatch로 해결
-- (OS 명령어, sqlplus 세션 종료 후 실행)
-- $ORACLE_HOME/OPatch/datapatch -verbose
-- 문자셋 불일치 또는 DB 옵션 불일치 확인
SELECT property_name, property_value
FROM database_properties
WHERE property_name IN ('NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET');
플러그인 직후 컴포넌트 재컴파일이 필요한 경우:
-- PDB를 RESTRICTED 모드로 열고 noncdb_to_pdb.sql 재실행 (Non-CDB → PDB 전환 케이스)
ALTER PLUGGABLE DATABASE MYPDB OPEN RESTRICTED;
ALTER SESSION SET CONTAINER = MYPDB;
@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql
-- 완료 후 정상 OPEN
ALTER PLUGGABLE DATABASE MYPDB CLOSE;
ALTER PLUGGABLE DATABASE MYPDB OPEN;
원인 3: RESTRICTED 또는 MOUNT 상태에서 멈춤 해결
-- 현재 PDB 상태 확인
SELECT name, open_mode, restricted
FROM v$pdbs
WHERE name = 'MYPDB';
-- RESTRICTED 모드 접속 후 INVALID 오브젝트 확인
ALTER SESSION SET CONTAINER = MYPDB;
SELECT owner, object_name, object_type, status
FROM dba_objects
WHERE status = 'INVALID'
ORDER BY owner, object_type;
-- INVALID 오브젝트 재컴파일
@$ORACLE_HOME/rdbms/admin/utlrp.sql
-- DBA_REGISTRY에서 컴포넌트 상태 확인
SELECT comp_id, comp_name, version, status
FROM dba_registry
ORDER BY comp_id;
컴포넌트 상태가 INVALID인 경우 catcon.pl을 사용한 재수행도 고려합니다.
-- 재컴파일 후 RESTRICTED 해제 및 정상 OPEN
ALTER PLUGGABLE DATABASE MYPDB CLOSE;
ALTER PLUGGABLE DATABASE MYPDB OPEN;
-- 정상 OPEN 후 최종 상태 확인
SELECT name, open_mode, restricted
FROM v$pdbs;
예방 방법
1. PDB 상태 모니터링 자동화 및 정기적인 데이터파일 무결성 점검
CDB 환경에서는 모든 PDB의 상태를 주기적으로 자동 점검하는 스크립트를 Scheduler Job으로 등록하여, PDB가 비정상 상태(MOUNTED, RESTRICTED)가 되었을 때 즉각 알림을 받아야 합니다. 또한 RMAN의 BACKUP VALIDATE 또는 VALIDATE DATAFILE 명령을 정기적으로 실행해 데이터파일의 물리적 손상 여부를 사전에 탐지해야 합니다.
-- PDB 상태 모니터링 쿼리 (Scheduler Job 또는 모니터링 툴에 등록)
SELECT name,
open_mode,
restricted,
CASE WHEN open_mode != 'READ WRITE' OR restricted = 'YES'
THEN 'ALERT: 비정상 상태'
ELSE 'NORMAL'
END AS check_result
FROM v$pdbs
WHERE name != 'PDB$SEED';
2. PDB Unplug/Plug 절차 표준화 및 사전 호환성 검증
PDB를 다른 CDB로 이동하거나 클론할 때는 반드시 사전에 DBMS_PDB.CHECK_PLUG_COMPATIBILITY 함수로 호환성을 검증한 후 진행해야 합니다. Plug-in 후에는 즉시 PDB_PLUG_IN_VIOLATIONS를 조회하고 PENDING 항목이 없는지 확인하는 것을 표준 절차로 수립하면 ORA-65019 발생을 크게 줄일 수 있습니다.
-- Plug 전 호환성 사전 검증
DECLARE
v_compatible BOOLEAN;
BEGIN
v_compatible := DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
pdb_descr_file => '/backup/mypdb.xml',
pdb_name => 'MYPDB'
);
IF v_compatible THEN
DBMS_OUTPUT.PUT_LINE('호환됨: PDB 플러그인 가능');
ELSE
DBMS_OUTPUT.PUT_LINE('비호환: PDB_PLUG_IN_VIOLATIONS 확인 필요');
END IF;
END;
/
관련 에러
- ORA-01157: 데이터파일을 식별하거나 잠글 수 없을 때 발생하며, ORA-65019와 가장 자주 함께 나타납니다.
- ORA-01110: ORA-01157과 쌍으로 출력되어 문제가 된 데이터파일의 번호와 경로를 알려줍니다.
- ORA-65011: PDB가 존재하지 않거나 찾을 수 없을 때 발생하며, 잘못된 plug-in XML 사용 시 동반됩니다.
- ORA-17627 / ORA-17629: Oracle Net 또는 원격 파일 접근 실패와 관련되며, RAC 또는 Data Guard 환경에서 PDB 오픈 시 함께 나타날 수 있습니다.
- ORA-01152: 데이터파일이 이전 백업에서 복원된 후 OPEN RESETLOGS 없이 사용되려 할 때 발생합니다.
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.