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

ORA-65150
2026년 10월 18일 | DBMS Error 가이드

이 글에서 다루는 내용

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

ORA-65150 database is not a valid replica of the CDB 는?

ORA-65150 에러는 Oracle Multitenant 환경에서 특정 데이터베이스가 CDB(Container Database)의 유효한 복제본(Replica)으로 인식되지 않을 때 발생하는 에러입니다. 이 에러는 주로 Data Guard, GoldenGate, 또는 RMAN 기반의 복제 구성에서 CDB와 대상 데이터베이스 간의 동기화 상태나 메타데이터 불일치가 감지될 때 나타납니다. 특히 Oracle 12c 이상의 Multitenant 아키텍처에서 PDB(Pluggable Database)를 포함한 CDB 전체를 복제하거나 Switchover/Failover 작업 중에 자주 목격됩니다.


주요 발생 원인

1. CDB와 Standby DB 간의 DB_UNIQUE_NAME 또는 DB_NAME 불일치

Oracle Data Guard 환경에서 Primary CDB와 Standby DB의 DB_UNIQUE_NAME 또는 DB_NAME 파라미터가 올바르게 설정되지 않으면 ORA-65150이 발생할 수 있습니다. Oracle은 CDB 복제본 여부를 판단할 때 내부 딕셔너리와 파라미터 파일의 값을 교차 검증하며, 이 값들이 불일치하면 해당 데이터베이스를 유효한 복제본으로 인정하지 않습니다. 특히 수동으로 파라미터를 변경했거나, 잘못된 파라미터 파일로 DB를 기동한 경우에 흔히 발생합니다.

2. RMAN 기반 복제 또는 복구 과정에서의 불완전한 복제 작업

RMAN DUPLICATE 명령어나 백업 기반 복구 작업이 정상적으로 완료되지 않았을 경우 내부 컨트롤 파일이나 딕셔너리 정보가 CDB의 원본과 불일치 상태가 됩니다. 이 경우 복제된 DB는 CDB의 올바른 복제본으로 등록되지 않아 ORA-65150이 발생합니다. 특히 PDB가 다수 포함된 CDB를 복제할 때는 모든 PDB의 데이터 파일과 컨트롤 파일이 함께 복제되어야 하며, 일부 PDB 파일이 누락된 경우에도 이 에러가 트리거됩니다.

3. CDB 재구성 후 내부 메타데이터(CON_ID, GUID) 불일치

CDB 내의 각 PDB는 고유한 CON_ID와 GUID를 가지며, 이 정보는 CDB_PDBS, V$PDBS 등 내부 뷰와 컨트롤 파일에 저장됩니다. 운영 중 PDB를 Unplug/Plug 하거나, 잘못된 방식으로 PDB를 복구하면 내부 GUID가 원본 CDB와 달라질 수 있습니다. Standby나 복제 대상 DB에서 이 GUID 불일치가 확인되면 Oracle 내부 검증 로직은 해당 데이터베이스를 CDB의 유효한 복제본으로 허용하지 않습니다.


해결 방법

원인 1 해결: DB_UNIQUE_NAME 및 파라미터 확인 및 수정

먼저 현재 파라미터 상태를 점검합니다.

-- Primary CDB에서 확인
SELECT NAME, DB_UNIQUE_NAME, CDB, CON_ID
FROM V$DATABASE;

-- 파라미터 확인
SHOW PARAMETER DB_NAME;
SHOW PARAMETER DB_UNIQUE_NAME;

값이 잘못되어 있을 경우 SPFILE을 수정합니다.

-- Standby DB에서 올바른 값으로 수정
ALTER SYSTEM SET DB_UNIQUE_NAME = 'STANDBY_CDB' SCOPE=SPFILE;

-- 적용을 위해 DB 재기동
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;

Data Guard Broker를 사용하는 경우 DGMGRL에서 구성을 재검증합니다.

-- DGMGRL에서 구성 확인
-- (SQL*Plus 외부, DGMGRL 환경)
-- DGMGRL> SHOW CONFIGURATION;
-- DGMGRL> VALIDATE DATABASE 'STANDBY_CDB';

원인 2 해결: RMAN DUPLICATE 재수행 또는 불완전한 복제 점검

컨트롤 파일과 데이터 파일 상태를 먼저 점검합니다.

-- 데이터 파일 상태 확인
SELECT FILE#, STATUS, NAME FROM V$DATAFILE;

-- 컨트롤 파일 상태 확인
SELECT STATUS, NAME FROM V$CONTROLFILE;

-- PDB 상태 확인
SELECT CON_ID, NAME, OPEN_MODE, RESTRICTED FROM V$PDBS;

불완전한 복제가 확인된 경우 RMAN을 통해 재복제를 수행합니다.

-- RMAN에서 CDB 전체 DUPLICATE 수행 (예시)
-- Primary DB에 연결된 상태에서
RMAN TARGET sys@PRIMARY_CDB AUXILIARY sys@STANDBY_CDB

-- RMAN 프롬프트에서:
-- DUPLICATE TARGET DATABASE
--   FOR STANDBY
--   FROM ACTIVE DATABASE
--   DORECOVER
--   SPFILE
--     SET DB_UNIQUE_NAME='STANDBY_CDB'
--     SET LOG_ARCHIVE_DEST_2='SERVICE=PRIMARY_CDB ASYNC'
--   NOFILENAMECHECK;

원인 3 해결: PDB GUID 불일치 점검 및 복구

Primary와 Standby 간 PDB GUID를 비교합니다.

-- Primary CDB에서 GUID 확인
SELECT CON_ID, NAME, GUID, STATUS
FROM CDB_PDBS
ORDER BY CON_ID;

-- V$PDBS 뷰로 추가 정보 확인
SELECT CON_ID, NAME, GUID, OPEN_MODE, RESTRICTED
FROM V$PDBS
ORDER BY CON_ID;

불일치가 확인된 경우, PDB를 재동기화합니다.

-- Standby에서 MRP 프로세스 재시작
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

-- Redo 적용 재시작
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
  USING CURRENT LOGFILE DISCONNECT FROM SESSION;

-- PDB 상태 재점검
SELECT CON_ID, NAME, OPEN_MODE FROM V$PDBS;

심각한 GUID 불일치라면 CDB 전체를 재구성하는 것이 안전합니다.

-- Alert log에서 에러 상세 확인
-- (OS 레벨)
-- tail -f $ORACLE_BASE/diag/rdbms/<db_unique_name>/<ORACLE_SID>/trace/alert_<ORACLE_SID>.log

-- 내부 딕셔너리 정합성 점검
SELECT CON_ID, OBJECT_NAME, STATUS
FROM CDB_OBJECTS
WHERE STATUS != 'VALID'
AND CON_ID = 1
ORDER BY CON_ID, OBJECT_NAME;

예방 방법

1. Data Guard 구성 시 공식 절차와 DGMGRL 기반 관리 철저히 준수

CDB 기반의 Data Guard 구성은 반드시 Oracle 공식 문서의 절차를 따르고, RMAN DUPLICATE FOR STANDBY 명령어를 사용하여 초기 복제를 수행해야 합니다. 수동으로 파일을 복사하거나 파라미터를 임의로 변경하는 행위는 내부 메타데이터 불일치를 초래할 수 있으므로, 모든 구성 변경은 DGMGRL(Data Guard Manager)을 통해 수행하고, 변경 후에는 반드시 VALIDATE DATABASE 명령으로 유효성을 검증해야 합니다.

2. 정기적인 Data Guard 및 CDB 상태 모니터링 자동화

아래 쿼리를 활용한 모니터링 스크립트를 Cron 또는 Oracle Scheduler로 주기적으로 실행하여 이상 징후를 사전에 감지해야 합니다.

-- 정기 모니터링 쿼리 (Standby DB에서 실행 권장)
SELECT
    d.NAME           AS db_name,
    d.DB_UNIQUE_NAME AS unique_name,
    d.CDB            AS is_cdb,
    d.OPEN_MODE      AS open_mode,
    d.DATABASE_ROLE  AS db_role,
    ds.STATUS        AS dg_status,
    ds.GAP_STATUS    AS gap_status
FROM V$DATABASE d, V$ARCHIVE_DEST_STATUS ds
WHERE ds.DEST_ID = 1;

-- PDB 상태 일괄 점검
SELECT CON_ID, NAME, OPEN_MODE, RESTRICTED, GUID
FROM V$PDBS
ORDER BY CON_ID;

관련 에러

  • ORA-65011: Pluggable Database does not exist — PDB가 CDB에 등록되지 않았거나 Unplug된 상태에서 접근할 때 발생하며, ORA-65150과 함께 나타나는 경우가 많습니다.
  • ORA-16191: Primary log shipping client not logged on standby — Data Guard 구성에서 Primary와 Standby 간 연결 문제로 발생하며, ORA-65150의 간접 원인이 될 수 있습니다.
  • ORA-01665: control file is not a standby control file — 컨트롤 파일이 Standby용으로 생성되지 않았을 때 발생하며, RMAN 복제 과정에서 ORA-65150과 함께 발생할 수 있습니다.
  • ORA-65048: error encountered when switching to pluggable database — PDB 전환 과정에서 메타데이터 불일치가 있을 때 발생하며, ORA-65150과 연관된 근본 원인을 공유하기도 합니다.

DBMS 에러 코드 시리즈

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

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

댓글 남기기