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

ORA-16057
2026년 09월 28일 | DBMS Error 가이드

이 글에서 다루는 내용

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

ORA-16057 server not in required Data Guard mode 는?

ORA-16057 에러는 Oracle Data Guard 환경에서 서버가 요구되는 Data Guard 운영 모드에 있지 않을 때 발생하는 에러입니다. 주로 Primary 데이터베이스나 Standby 데이터베이스가 Data Guard Broker의 관리 하에 있지 않거나, 특정 Data Guard 작업을 수행하기 위해 필요한 모드 설정이 올바르지 않을 때 나타납니다. 이 에러는 DBA가 Data Guard Broker(DGMGRL)를 통해 스위치오버(Switchover), 페일오버(Failover), 혹은 Redo 전송 설정을 변경하려 할 때 자주 경험하게 됩니다.


주요 발생 원인

  • Data Guard Broker가 활성화되지 않은 상태에서 DGMGRL 명령 실행

Data Guard Broker를 사용하기 위해서는 DG_BROKER_START 초기화 파라미터가 TRUE로 설정되어 있어야 합니다. 이 파라미터가 FALSE이거나 Broker 프로세스(DMON)가 정상적으로 기동되지 않은 상태에서 DGMGRL 명령을 실행하면 ORA-16057이 발생합니다. 특히 운영 중에 파라미터가 변경되거나, 데이터베이스 재시작 후 Broker 프로세스가 자동 기동되지 않을 경우 이 상황이 자주 발생합니다.

  • Primary 또는 Standby 데이터베이스가 Broker 구성에 포함되지 않음

Data Guard Broker는 자신이 관리하는 구성(Configuration) 내의 데이터베이스에 대해서만 명령을 수행할 수 있습니다. 데이터베이스가 Broker 구성에 등록되지 않았거나, 구성 파일이 손상되었거나, 새로운 Standby가 추가되었지만 Broker에 등록되지 않은 경우 이 에러가 발생합니다. 또한 수동으로 Data Guard를 재구성한 후 Broker 구성을 업데이트하지 않아도 동일한 에러가 나타납니다.

  • 데이터베이스의 DB_UNIQUE_NAME 불일치 또는 설정 오류

Data Guard Broker는 DB_UNIQUE_NAME을 기준으로 각 데이터베이스를 식별합니다. DB_UNIQUE_NAME이 Broker 구성에 등록된 이름과 다르거나, LOG_ARCHIVE_DEST_n 파라미터에 지정된 DB_UNIQUE_NAME과 실제 데이터베이스의 이름이 맞지 않으면 Broker가 해당 서버를 올바른 Data Guard 모드로 인식하지 못하고 ORA-16057을 발생시킵니다. 이는 데이터베이스 재명명(Rename) 작업 후 또는 Standby를 새로 복제한 후 흔히 발생하는 문제입니다.


해결 방법

원인 1 해결: DG_BROKER_START 파라미터 확인 및 활성화

먼저 현재 Broker 파라미터 상태를 확인합니다.

-- DG_BROKER_START 파라미터 현재 값 확인
SHOW PARAMETER DG_BROKER_START;

-- 결과 예시
-- NAME                TYPE    VALUE
-- ------------------- ------- -----
-- dg_broker_start     boolean FALSE

값이 FALSE이면 아래와 같이 활성화합니다. Primary와 모든 Standby에서 동일하게 수행해야 합니다.

-- Data Guard Broker 활성화 (Primary 및 Standby 모두 수행)
ALTER SYSTEM SET DG_BROKER_START = TRUE SCOPE=BOTH;

-- DMON 프로세스 기동 확인
SELECT NAME, DESCRIPTION FROM V$BGPROCESS WHERE NAME = 'DMON';

이후 DGMGRL에서 Broker 상태를 확인합니다.

-- DGMGRL 접속 후 구성 상태 확인
-- (SQL*Plus가 아닌 OS 명령줄에서 실행)
-- dgmgrl /
-- DGMGRL> SHOW CONFIGURATION;

원인 2 해결: Broker 구성에 데이터베이스 등록

데이터베이스가 Broker 구성에 포함되어 있는지 확인하고 등록합니다.

-- V$DG_BROKER_CONFIG 뷰로 Broker 상태 확인
SELECT DB_UNIQUE_NAME, ROLE, ENABLED 
FROM V$DG_BROKER_CONFIG;

-- Broker 구성에서 각 멤버 상태 확인
SELECT NAME, VALUE 
FROM V$PARAMETER 
WHERE NAME IN ('db_unique_name', 'dg_broker_config_file1', 'dg_broker_config_file2');

구성 파일이 손상된 경우 Broker 구성을 재생성해야 합니다. DGMGRL에서 아래와 같이 수행합니다.

-- Broker 구성 생성 (DGMGRL CLI에서 수행)
-- CREATE CONFIGURATION my_dg_config AS
--   PRIMARY DATABASE IS primary_db
--   CONNECT IDENTIFIER IS primary_db;

-- Standby 추가
-- ADD DATABASE standby_db AS
--   CONNECT IDENTIFIER IS standby_db
--   MAINTAINED AS PHYSICAL;

-- 구성 활성화
-- ENABLE CONFIGURATION;

원인 3 해결: DB_UNIQUE_NAME 불일치 수정

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

-- 아카이브 목적지 설정 확인
SELECT DEST_ID, DEST_NAME, STATUS, TARGET, DB_UNIQUE_NAME 
FROM V$ARCHIVE_DEST 
WHERE TARGET = 'STANDBY';

-- DB_UNIQUE_NAME 수정이 필요한 경우 (재시작 필요)
ALTER SYSTEM SET DB_UNIQUE_NAME = 'correct_unique_name' SCOPE=SPFILE;

-- LOG_ARCHIVE_DEST에서 DB_UNIQUE_NAME 명시적 지정
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2 = 
  'SERVICE=standby_db ASYNC DB_UNIQUE_NAME=standby_db 
   VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)' SCOPE=BOTH;

예방 방법

  • Data Guard 환경 정기 상태 점검 자동화

Data Guard Broker와 관련 파라미터 상태를 주기적으로 점검하는 모니터링 스크립트를 운영하여 이상 징후를 조기에 발견해야 합니다. 아래 쿼리를 활용하여 일별 점검을 자동화하면 ORA-16057 발생을 사전에 방지할 수 있습니다.

-- Data Guard 상태 점검 쿼리 (cron 또는 스케줄러 등록 권장)
SELECT 
    d.DB_UNIQUE_NAME,
    d.DATABASE_ROLE,
    d.OPEN_MODE,
    d.PROTECTION_MODE,
    d.PROTECTION_LEVEL,
    (SELECT VALUE FROM V$PARAMETER WHERE NAME = 'dg_broker_start') AS BROKER_START
FROM V$DATABASE d;

-- Standby 지연(lag) 모니터링
SELECT NAME, VALUE, UNIT, TIME_COMPUTED
FROM V$DATAGUARD_STATS
WHERE NAME IN ('transport lag', 'apply lag');
  • 변경 관리(Change Management) 절차 준수

데이터베이스 재시작, 파라미터 변경, Standby 추가/제거 등의 작업을 수행할 때 반드시 Data Guard Broker 구성 상태를 사전 및 사후에 검증하는 체크리스트를 운영해야 합니다. 특히 패치 적용이나 업그레이드 후에는 DG_BROKER_START 파라미터가 SPFILE에 올바르게 저장되어 있는지 확인하고, Broker 구성 파일(dr1.dat, dr2.dat)이 정상적인 위치에 존재하는지 반드시 점검해야 합니다.


관련 에러

  • ORA-16525: Data Guard Broker가 아직 사용 가능하지 않음. DG_BROKER_START가 TRUE여도 DMON 프로세스가 완전히 초기화되지 않았을 때 발생하며, ORA-16057과 함께 나타나는 경우가 많습니다.
  • ORA-16596: 데이터베이스가 Data Guard Broker 구성에 속하지 않음. ORA-16057과 유사하지만, 구체적으로 구성 멤버십 문제를 지칭합니다.
  • ORA-16629: Broker가 데이터베이스 상태를 결정할 수 없음. Primary와 Standby 간 통신 문제나 Broker 구성 불일치 시 발생합니다.
  • ORA-16788: 특정 Data Guard 속성 설정이 요구 사항과 맞지 않을 때 발생하며, ORA-16057과 함께 연쇄적으로 나타날 수 있습니다.

DBMS 에러 코드 시리즈

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

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

댓글 남기기