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

[ORACLE] Data Guard Failover

by gwon_s 2026. 1. 16.

🚨 Failover 실습 (Primary 장애 상황 가정)

장애 발생 시

기존 Primary ❌

Standby를 강제로 Primary로 승격

(상황에 따라) 데이터 손실 가능


🧭 Failover 전체 흐름

1️⃣ Flashback 활성화
2️⃣ 장애 상황 만들기 

3️⃣ Failover 가능 여부 확인
4️⃣ Failover 실행
5️⃣ (중요) 새 Primary 확인 및 이후 상태 이해

6️⃣ Reinstate 수행


1️⃣ Flashback 활성화

Redo + Flashback Log를 이용해서 DB를 과거 시점으로 수월하게 되돌리기 위함

 

Redo Apply 중지(Standby):

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

 

플래쉬백 활성화(Primary, Standby):

ALTER DATABASE FLASHBACK ONL;

 

Redo Apply 실행(Standby):

ALTER DATABASE RECOVERR MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;

 

로그 스위칭(Primary):

ALTER SYSTEM SWITCH LOGFILE;

:

Flashback 조회:

SHOW PARAMETER DB_FLASHBACK_RETENTION_TARGET
SELECT FLASHBACK_SIZE, ESTIMATED_FLASHBACK_SIZE FROM V$FLASHBACK_DATABASE_LOG;

 


 

2️⃣ 장애 상황 만들기 (실습용)

기존 Primary 서버에서 DB 강제 종료

SHUTDOWN ABORT;

👉 이 순간:

  • Primary = DOWN ❌
  • Standby만 살아 있음

2️⃣ Standby 서버에서 상태 확인

dgmgrl sys/[패스워드]@[네트워크명]
SHOW CONFIGURATION;

결과는 보통 에러가 나옴:

Configuration Status: WARNING
ORA-16810: multiple errors or warnings detected

또는

  dgpri  - Primary database
    Error: ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

👉 정상임. Primary가 죽었기 때문에


3️⃣ Failover 실행 (핵심)

⚠️ 되돌릴 수 없는 작업 (reinstate 전까지)

Standby에서:
FAILOVER TO ORCL_STBY;

 

메시지 예:

Performing failover NOW, please wait...
Failover succeeded

4️⃣ 새 Primary 확인

SHOW CONFIGURATION;
결과:
Configuration - dg_orcl

  Protection Mode: MaxPerformance
  Members:
  orcl_stby - Primary database
    orcl      - Physical standby database (disabled)
      ORA-16661: the standby database needs to be reinstated

Fast-Start Failover:  Disabled

Configuration Status:
SUCCESS   (status updated 58 seconds ago)

 

SQL로도 확인 👇

SELECT name, database_role, open_mode FROM v$database;

결과:

DB_UNIQUE_NAME       OPEN_MODE            DATABASE_ROLE        SWITCHOVER_STATUS
-------------------- -------------------- -------------------- --------------------
orcl_stby            READ WRITE           PRIMARY              NOT ALLOWED
✅ 여기까지 오면 Failover 성공

5️⃣ 중요한 개념 정리 ⚠️

❗ Failover 이후 상태

  • 기존 Primary → DISABLED
  • 자동으로 Standby로 돌아오지 않음

🔀 여기서 선택지는 2가지

✅ 1번 (정석, 실무/면접 필수)

👉 Reinstate

  • 기존 Primary를 Standby로 복구
  • Flashback Database 필요

✅ 2번

👉 기존 Primary 폐기 후 새로 구성


6️⃣ Reinstate 수행 

과거 Primary의 장애 처리 후 DB open:

startup

 

현재 Primary에서:

DGMGRL> REINSTATE DATABASE ORCL;

 

결과:

Reinstating database "orcl", please wait...
Reinstatement of database "orcl" succeeded

 

상태 확인(Primary, Standby):

select name, open_mode, database_role, switchover_status from v$database;
-- 과거 Primary
NAME      OPEN_MODE            DATABASE_ROLE    SWITCHOVER_STATUS
--------- -------------------- ---------------- --------------------
ORCL      MOUNTED              PHYSICAL STANDBY NOT ALLOWED

-- 현재 Primary
NAME      OPEN_MODE            DATABASE_ROLE    SWITCHOVER_STATUS
--------- -------------------- ---------------- --------------------
ORCL      READ WRITE           PRIMARY          TO STANDBY

 

7️⃣ Switchover 수행

Switchover로 Primary 복원

 

현재 Standby에서: 

DGMGRL> SWITCHOVER TO ORCL;

 

복원 결과 확인:

SHOW CONFIURATION;
SHOW DATABASE ORCL;
SHOW DATABASE ORCL_STB;
DGMGRL> SHOW CONFIGURATION

Configuration - dg_orcl

  Protection Mode: MaxPerformance
  Members:
  orcl      - Primary database
    orcl_stby - Physical standby database
      Error: ORA-16786: unable to access Oracle Data Guard broker configuration files

Fast-Start Failover:  Disabled

Configuration Status:
ERROR   (status updated 7 seconds ago)

👉 ORA-16786 에러는 조금 지나면 사라짐

DGMGRL> SHOW DATABASE ORCL_STBY

Database - orcl_stby

  Role:               PHYSICAL STANDBY
  Intended State:     APPLY-ON
  Transport Lag:      0 seconds (computed 0 seconds ago)
  Apply Lag:          0 seconds (computed 0 seconds ago)
  Average Apply Rate: 75.00 KByte/s
  Real Time Query:    OFF
  Instance(s):
    orcl

Database Status:
SUCCESS
DGMGRL> SHOW DATABASE ORCL

Database - orcl

  Role:               PRIMARY
  Intended State:     TRANSPORT-ON
  Instance(s):
    orcl

Database Status:
SUCCESS

 


🎯 여기까지 한 줄 요약

  • Switchover = 평상시 역할 교체
  • Failover = 장애 시 강제 승격
  • Failover 다음은 무조건 Reinstate가 핵심