본문 바로가기
🗄️ DB_이야기/# 🛢️ Oracle

[Oracle] Data Guard 상태 및 장애 분석

by gwon_s 2026. 1. 18.

🔍 1단계. Data Guard 전체 상태 한눈에 확인

가장 먼저 동기화 상태와 에러 존재 여부를 봅니다.

 
SELECT
    name,
    database_role,
    open_mode,
    protection_mode,
    protection_level,
    switchover_status
FROM v$database;

✅ 체크 포인트

  • DATABASE_ROLE
    • PRIMARY / PHYSICAL STANDBY 인지
  • OPEN_MODE
    • Standby는 보통 MOUNTED 또는 READ ONLY WITH APPLY
  • SWITCHOVER_STATUS
    • NOT ALLOWED / FAILED 면 문제 가능성 있음

🔍 2단계. Data Guard Broker 사용 시

Broker를 쓰고 있다면 가장 빠른 진단 도구입니다.

 
 DGMGRL> show configuration;
DGMGRL> show database verbose <DB_NAME>;

❗ 여기서 바로 보이는 것

  • ORA-xxxx 에러 코드
  • Transport / Apply Lag
  • Network / Archive 오류

👉 운영 환경에서는 Broker 상태 먼저 보는 게 정석


🔍 3단계. Archive Log 전송 상태 확인 (Primary)

Primary에서 로그가 정상적으로 Standby로 전달되는지 확인합니다.

 
SELECT dest_id, status, error, destination FROM v$archive_dest

🚨 자주 나오는 문제

  • STATUS = ERROR
  • ERROR 컬럼에 ORA-xxxx 메시지
    • ORA-12154 (TNS 문제)
    • ORA-16057 (DG 설정 오류)

🔍 4단계. Standby 로그 수신 / 적용 상태

Standby에서 로그는 오는데 적용이 안 되는 경우가 많습니다.

📌 수신 상태

SELECT sequence#, first_time, next_time, applied FROM v$archived_log ORDER BY sequence# DESC;
 
 

📌 적용 프로세스 확인

SELECT process, status, sequence# FROM v$managed_standby;
 

❗ 핵심 포인트

  • MRP0 프로세스가 RUNNING / APPLYING_LOG 상태인지
  • APPLIED = NO 로그가 계속 쌓이면 Apply 장애

🔍 5단계. Apply / Transport Lag 확인

실시간 지연 여부 확인 (특히 성능 이슈)

SELECT name, value, unit FROM v$dataguard_stats;

주요 항목

  • transport lag
  • apply lag

👉 수 분 이상 누적되면 네트워크 / I/O / Standby 성능 의심


🔍 6단계. GAP 발생 여부 확인

Archive Log 누락 여부 확인 (자주 발생)

SELECT * FROM v$archive_gap;
  • no rows selected → 정상
  • 결과가 나오면 해당 sequence 로그 수동 전송 필요

🔍 7단계. Alert Log 확인 (가장 중요)

SQL로 안 잡히는 오류는 Alert Log에 다 나옵니다.

vi {Alert Log Name}
 

특히 많이 보게 되는 메시지

  • ORA-16055 / ORA-16086
  • ORA-19527 (Archive 실패)
  • ORA-00313 / ORA-00312 (Redo 문제)

🔍 8단계. 네트워크 / TNS 문제 의심 시

lsnrctl status
tnsping <STANDBY_TNS>
  • DG 장애의 절반은 네트워크/TNS 문제입니다.

🏆 실무에서 쓰는 “장애 분석 순서 요약”

1️⃣ v$database 상태
2️⃣ DGMGRL> show configuration
3️⃣ v$archive_dest (Primary)
4️⃣ v$managed_standby / v$archived_log (Standby)
5️⃣ v$dataguard_stats
6️⃣ v$archive_gap
7️⃣ alert.log

🔥 DBA 관점 핵심 정리

  • Primary 문제인지 / Standby 문제인지 먼저 구분
  • Transport vs Apply 중 어디서 막혔는지 확인
  • SQL 결과 + alert.log 둘 다 봐야 원인 확정 가능