🧭 전체 로드맵 (끝까지 이 순서대로)
1️⃣ VirtualBox 설치
2️⃣ VirtualBox 네트워크 구성
3️⃣ Oracle Linux VM 2대 생성
4️⃣ OS 기본 설정
5️⃣ Oracle 19c 설치 (Primary)
6️⃣ ARCHIVELOG / FORCE LOGGING
7️⃣ Standby 준비
8️⃣ RMAN DUPLICATE
9️⃣ Data Guard 동작 확인
🔟 Switchover / Failover 테스트
이전 단계는 이전 글에서 이미 진행했으므로, 진행하지 않았다면 먼저 이전 글을 참고해 주세요.
[Oracle] Oracle Data Guard 설치(3)
🧭 전체 로드맵 (끝까지 이 순서대로)1️⃣ VirtualBox 설치2️⃣ VirtualBox 네트워크 구성3️⃣ Oracle Linux VM 2대 생성4️⃣ OS 기본 설정5️⃣ Oracle 19c 설치 (Primary)6️⃣ ARCHIVELOG / FORCE LOGGING7️⃣ Standby
gwon-s.tistory.com
Swithchover / Failover 테스트 전 Data Guard Broker 설정
🧭 Data Guard Broker 구성 로드맵
1️⃣ Primary / Standby에서 Broker 사용 설정
2️⃣ dgmgrl로 구성 생성
3️⃣ Primary/Standby 등록
4️⃣ 상태 검증
5️⃣ Switchover / Failover
1️⃣ Primary / Standby에서 Broker 활성화
양쪽 DB 모두에서 실행
ALTER SYSTEM SET DG_BROKER_START=TRUE SCOPE=BOTH;
확인:
SHOW PARAMETER dg_broker_start;
TRUE면 완료
2️⃣ Primary 서버에서 dgmgrl 접속
Primary에서 oracle 계정
dgmgrl sys/oracle@DGDB_PRI
접속되면 이런 프롬프트가 나옴
DGMGRL>
3️⃣ Broker 구성 생성 (Primary 기준)
CREATE CONFIGURATION dg_config
AS PRIMARY DATABASE IS DGPRI
CONNECT IDENTIFIER IS DGDB_PRI;
- dg_config : Broker 구성 이름(아무 이름이나 OK)
- DGPRI : Primary의 db_unique_name
- DGDB_PRI : tnsnames.ora에 정의한 서비스명
성공 메시지:
Configuration "dg_config" created.
4️⃣ Standby DB를 Broker에 추가(Primary)
ADD DATABASE DGSTBY AS CONNECT IDENTIFIER IS DGDB_STBY MAINTAINED AS PHYSICAL;
성공 메시지:
Database "DGSTBY" added.
Error: ORA-16698: member has a LOG_ARCHIVE_DEST_n parameter with SERVICE attribute set Failed.
Broker는 redo 전송 경로를 자기가 관리하려고 하는데, DB 쪽에 이미 log_archive_dest_n = 'SERVICE=…'가 박혀 있어서 충돌남
장애 해결 후 Broker 활성화부터 재진행
[Oracle] ORA-16698: member has a LOG_ARCHIVE_DEST_n parameter with SERVICE attribute set Failed.
ORA-16698 에러 시 Broker 적용을 위한 정리 Primary에 아래와 같은 파라미터가 있음log_archive_dest_2 = 'SERVICE=DGDB_STBY … DB_UNIQUE_NAME=DGSTBY' Broker는 redo 전송 경로를 자기가 관리하려고 하는데, DB 쪽에 이미 l
gwon-s.tistory.com
Database - dgstby
Role: PHYSICAL STANDBY
Intended State: APPLY-ON
Transport Lag: 12 minutes 8 seconds (computed 16 seconds ago)
Apply Lag: 12 minutes 8 seconds (computed 16 seconds ago)
Average Apply Rate: 863.00 KByte/s
Real Time Query: OFF
Instance(s):
DGDB
Database Warning(s):
ORA-16853: apply lag has exceeded specified threshold
ORA-16855: transport lag has exceeded specified threshold
ORA-16826: apply service state is inconsistent with the DelayMins property
ORA-16789: standby redo logs configured incorrectly
Duplicate 시 경로 및 구성이 꼬여서 지연 및 경고 발생
장애 해결 후 Broker 활성화부터 재진행
[Oracle] Data Gurad Duplicate 재구성
Data Gurad Broker 구성 중 파일 경로 및 로그 파일의 구성들이 꼬여서 경고 발생DGMGRL> show database dgstbyDatabase - dgstby Role: PHYSICAL STANDBY Intended State: APPLY-ON Transport Lag: 12 minutes 8 seconds (computed 16 seconds ago)
gwon-s.tistory.com
5️⃣ Broker 구성 활성화(DGMGRL)
ENABLE CONFIGURATION;
이제 Broker가 Primary/Standby 상태를 관리하기 시작함.
6️⃣ 상태 점검 (중요)
전체 구성 상태(DGMGRL)
SHOW CONFIGURATION;
정상 예:
Configuration - dg_config
Protection Mode: MaxPerformance
Members:
dgpri - Primary database
dgstby - Physical standby database
Fast-Start Failover: Disabled
Configuration Status:
SUCCESS (status updated 9 second ago)
개별 DB 상태
SHOW DATABASE DGPRI;
SHOW DATABASE DGSTBY;
Standby 쪽에:
Transport Lag: 0 seconds Apply Lag: 0 seconds
이면 완벽.
7️⃣ 흔한 에러 & 체크 포인트
❌ ORA-16810 / ORA-16826
→ Redo Apply 미기동
→ Standby에서:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
❌ ORA-12514 / ORA-12154
→ TNS 문제
→ tnsping DGDB_PRI / DGDB_STBY 재확인
✅ Data Guard Broker 구성 완료 후 테스트
1️⃣ Primary에서 로그 강제 증가시키기 (가장 빠른 방법)
🔹 로그 스위치 강제 실행
Primary DB에서 실행
ALTER SYSTEM SWITCH LOGFILE;
👉 실행할 때마다 sequence 번호 +1
여러 번 실행해도 됨:
ALTER SYSTEM SWITCH LOGFILE;
ALTER SYSTEM SWITCH LOGFILE;
ALTER SYSTEM SWITCH LOGFILE;
2️⃣ 실제 트랜잭션으로 로그 발생시키기
① 테스트 테이블 생성 (Primary)
CREATE TABLE dg_test (id NUMBER, msg VARCHAR2(100));
② 데이터 INSERT + COMMIT
INSERT INTO dg_test VALUES (1, 'dataguard test 1');
COMMIT;
INSERT INTO dg_test VALUES (2, 'dataguard test 2');
COMMIT;
👉 COMMIT이 Archive Log를 발생시킴
③ 로그 스위치까지 같이 하면 더 확실
ALTER SYSTEM SWITCH LOGFILE;
3️⃣ Standby에서 증가 여부 확인 (⭐ 핵심)
Standby DB에서 실행
SELECT thread#, sequence#, applied FROM v$archived_log ORDER BY sequence# DESC;
정상 예시:
THREAD# SEQUENCE# APPLIED
---------- ---------- ---------
1 40 YES
1 41 YES
1 42 YES
1 43 YES
1 44 YES
1 49 YES
1 50 YES
1 51 YES
1 52 YES
1 53 YES
👉 SEQUENCE#가 계속 증가
👉 APPLIED = YES → Apply 정상
✅ 4️⃣ Apply가 실시간으로 도는지 확인
SELECT process, status, sequence# FROM v$managed_standby;
정상:
PROCESS THREAD# SEQUENCE#
--------- ---------- ----------
ARCH 0 0
DGRD 0 0
DGRD 0 0
ARCH 0 0
ARCH 0 0
ARCH 0 0
RFS 1 55
RFS 1 0
RFS 0 0
RFS 0 0
MRP0 1 55
- MRP0 → APPLYING_LOG
- sequence 값이 계속 변함
✅ 이제 실무 꽃🌸
👉 다음으로 할 것:
1️⃣ Switchover 실습 (무중단 역할 교체)
2️⃣ Failover 실습 (장애 상황 가정)
3️⃣ 장애 후 재구성(Reinstate)
'🗄️ DB_이야기 > # 🛢️ Oracle' 카테고리의 다른 글
| [ORACLE] ORA-16736: unable to find the destination entry of member "dgpri" in V$ARCHIVE_DEST (0) | 2026.01.01 |
|---|---|
| [Oracle] Data Guard Broker SRL 경고 (1) | 2026.01.01 |
| [Oracle] Data Guard Duplicate 재구성 (0) | 2025.12.30 |
| [Oracle] ORA-16698: member has a LOG_ARCHIVE_DEST_n parameter with SERVICE attribute set Failed. (0) | 2025.12.30 |
| [Oracle] Data Guard 반영 검증(Primary → Standby) (0) | 2025.12.26 |