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

ORA-65172
2026년 10월 19일 | DBMS Error 가이드

이 글에서 다루는 내용

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

ORA-65172 CDB cannot use Data Guard without UNDO tablespace mode 는?

ORA-65172 에러는 Oracle Multitenant 환경(CDB, Container Database)에서 Data Guard를 구성하려 할 때, CDB가 Local UNDO 모드가 아닌 Shared UNDO 모드로 운영 중일 경우 발생하는 에러입니다. Oracle 12c Release 2(12.2) 이후부터 CDB 환경에서 Data Guard(특히 Active Data Guard 포함)를 사용하려면 반드시 Local UNDO 모드가 활성화되어 있어야 합니다. 이 에러는 주로 Data Guard Broker 설정, Standby Database 생성, 또는 DGMGRL 명령 실행 중에 발생하며, 운영 환경에서 갑작스러운 서비스 중단으로 이어질 수 있습니다.


주요 발생 원인

1. CDB가 Shared UNDO 모드로 운영 중인 경우

Oracle 12c Release 1(12.1)에서 생성된 CDB는 기본적으로 Shared UNDO 모드로 구성됩니다. 이 모드에서는 모든 PDB가 하나의 공통 UNDO 테이블스페이스를 공유하며, Data Guard 환경에서 PDB별 독립적인 복구를 지원하지 않아 ORA-65172가 발생합니다.

2. 버전 업그레이드 후 UNDO 모드 전환 누락

Oracle 데이터베이스를 12.1에서 12.2 이상으로 업그레이드했지만 UNDO 모드를 Local UNDO로 전환하지 않은 경우입니다. 업그레이드 자체가 UNDO 모드를 자동으로 변경하지 않기 때문에 DBA가 수동으로 변환 작업을 수행해야 하며, 이를 놓치는 경우 Data Guard 구성 시 에러가 발생합니다.

3. Data Guard Broker 설정 또는 복제 구성 중 사전 검증 미흡

Data Guard Broker를 통해 Primary-Standby 구성을 자동화할 때, 사전에 CDB의 UNDO 모드를 확인하지 않고 진행하면 Broker 설정 단계에서 ORA-65172가 발생합니다. 특히 DGMGRL의 CREATE CONFIGURATION 또는 ADD DATABASE 명령 실행 시 이 에러가 노출되며, 이미 Standby 인스턴스가 기동된 상태라면 재작업 비용이 매우 큽니다.


해결 방법

1단계: 현재 UNDO 모드 확인

먼저 데이터베이스가 어떤 UNDO 모드로 운영 중인지 반드시 확인합니다.

-- CDB 루트에 접속 후 UNDO 모드 확인
CONNECT / AS SYSDBA

SELECT property_name, property_value
FROM   database_properties
WHERE  property_name = 'LOCAL_UNDO_ENABLED';

결과값이 FALSE이면 Shared UNDO 모드이며, ORA-65172 발생 조건에 해당합니다.

결과값이 TRUE이면 이미 Local UNDO 모드로 정상 설정된 상태입니다.


2단계: Local UNDO 모드로 전환 (핵심 해결책)

Local UNDO 모드 전환은 UPGRADE 모드에서 수행해야 합니다. 운영 중인 데이터베이스를 직접 변환하므로 반드시 사전 백업을 완료하세요.

-- 1. 데이터베이스를 UPGRADE 모드로 재기동
SHUTDOWN IMMEDIATE;
STARTUP UPGRADE;

-- 2. Local UNDO 모드로 전환 실행
ALTER DATABASE LOCAL UNDO ON;

-- 3. 정상 모드로 재기동
SHUTDOWN IMMEDIATE;
STARTUP;

-- 4. 전환 결과 재확인
SELECT property_name, property_value
FROM   database_properties
WHERE  property_name = 'LOCAL_UNDO_ENABLED';
-- 결과: LOCAL_UNDO_ENABLED / TRUE 확인

3단계: 각 PDB에 Local UNDO 테이블스페이스 생성 여부 확인

Local UNDO 모드 전환 후, 각 PDB에 UNDO 테이블스페이스가 자동 생성됩니다. 정상적으로 생성되었는지 확인합니다.

-- PDB별 UNDO 테이블스페이스 존재 여부 확인
SELECT c.name        AS pdb_name,
       t.tablespace_name,
       t.status
FROM   cdb_tablespaces t
JOIN   v$containers    c ON t.con_id = c.con_id
WHERE  t.contents = 'UNDO'
ORDER BY c.name;

4단계: 특정 PDB에 UNDO 테이블스페이스가 없을 경우 수동 생성

-- 해당 PDB로 접속 후 UNDO 테이블스페이스 수동 생성
ALTER SESSION SET CONTAINER = PDB_NAME;

CREATE UNDO TABLESPACE undotbs_local
DATAFILE '/u01/app/oracle/oradata/CDB1/PDB_NAME/undotbs_local01.dbf'
SIZE 500M AUTOEXTEND ON NEXT 100M MAXSIZE 10G;

-- UNDO 테이블스페이스 활성화
ALTER SYSTEM SET UNDO_TABLESPACE = undotbs_local;

5단계: Data Guard Broker 재설정

UNDO 모드 전환 완료 후 Data Guard Broker 설정을 재진행합니다.

-- DGMGRL을 통해 설정 재시도
-- OS 쉘에서 실행
-- dgmgrl sys/password@primary_db

-- DGMGRL 내부 명령
-- DGMGRL> CREATE CONFIGURATION dg_config AS
--           PRIMARY DATABASE IS primary_db
--           CONNECT IDENTIFIER IS primary_db;

-- DGMGRL> ADD DATABASE standby_db AS
--           CONNECT IDENTIFIER IS standby_db
--           MAINTAINED AS PHYSICAL;

-- DGMGRL> ENABLE CONFIGURATION;

-- Broker 상태 최종 확인
SELECT inst_id, instance_name, db_unique_name, database_role
FROM   gv$database;

예방 방법

1. CDB 생성 시 초기부터 Local UNDO 모드 적용

신규 CDB를 생성할 때는 반드시 Local UNDO 모드 옵션을 명시적으로 지정해야 합니다. DBCA(Database Configuration Assistant) 사용 시 “Enable Local Undo” 옵션을 체크하거나, Silent 모드 스크립트에 enable_local_undo_for_pdbs=true 파라미터를 포함하세요. Data Guard 구성 계획이 있는 모든 CDB는 초기 설계 단계에서 Local UNDO를 기본값으로 채택하는 것이 Best Practice입니다.

2. Data Guard 구성 전 사전 체크리스트 운영

Data Guard 구성 작업 전에 반드시 표준 체크리스트를 실행하는 운영 프로세스를 수립하세요. 아래 점검 쿼리를 DBA 표준 작업 지침서에 포함하여 사전 검증을 의무화합니다.

-- Data Guard 구성 전 사전 체크 쿼리 (표준 점검 항목)
SELECT 'UNDO_MODE'      AS check_item,
       property_value   AS check_value,
       CASE property_value
           WHEN 'TRUE' THEN 'OK - Local UNDO 활성화됨'
           ELSE 'FAIL - Local UNDO 전환 필요'
       END AS result
FROM   database_properties
WHERE  property_name = 'LOCAL_UNDO_ENABLED'
UNION ALL
SELECT 'DB_VERSION',
       version,
       CASE WHEN version >= '12.2' THEN 'OK' ELSE 'CHECK REQUIRED' END
FROM   v$instance;

관련 에러

  • ORA-65169: PDB 관련 UNDO 테이블스페이스 작업 중 발생하는 에러로, Local UNDO 전환 실패 시 함께 나타날 수 있습니다.
  • ORA-01552: Shared UNDO 모드에서 특정 PDB 트랜잭션의 UNDO 세그먼트를 찾지 못할 때 발생하며, UNDO 모드 불일치와 연관됩니다.
  • ORA-16957: Data Guard Broker가 데이터베이스 구성 검증에 실패했을 때 발생하며, ORA-65172와 함께 Broker 로그에 기록되는 경우가 많습니다.
  • ORA-65040: CDB 루트에서 허용되지 않은 작업을 PDB 컨텍스트에서 수행할 때 발생하며, UNDO 모드 전환 중 컨테이너 설정 오류와 함께 나타날 수 있습니다.

DBMS 에러 코드 시리즈

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

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

댓글 남기기