Active Data Guard
12.2 실습 환경의 Standby 읽기 전용 사용, 리두 적용 재개, 상태와 지연 조회 및 적용 조건
#핵심 요약
실습 ADG는 Standby를 READ ONLY로 연 상태에서 Redo Apply를 계속 수행하는 구성임
Broker가 관리하는 실습 순서는 구성 확인, SRL 확인, APPLY-OFF, Standby OPEN, APPLY-ON, 최종 상태 확인임
실습의 최종 OPEN_MODE는 READ ONLY WITH APPLY임
실습 버전은 12.2이며 Standby INSERT 오류와 19c DML Redirection 언급을 구분함
#개념과 동작 원리
| 상태, 조건 | 설명 |
|---|---|
| 일반 실습 상태 | Primary READ WRITE, Standby MOUNTED |
| ADG 전환 중 | APPLY-OFF 후 Standby OPEN 시 READ ONLY, PHYSICAL STANDBY |
| ADG 최종 상태 | APPLY-ON 후 READ ONLY WITH APPLY, PHYSICAL STANDBY |
| Real-Time Apply | SRL이 있는지 먼저 확인하고 MRP, 지연 상태를 조회 |
| 12.2 쓰기 제한 | Standby INSERT 예시에서 ORA-16000 발생 |
| 버전 비교 | ADG_REDIRECT_DML은 19c부터라는 설명이며 해당 기능의 설정, 실행 실습은 없음 |
실습에서는 ADG를 양쪽에서 직접 DML을 수행하는 구성으로 설명하지 않으며 읽기 전용 Standby를 조회에 사용하는 것으로 구분함 실습 개요는 Enterprise Edition의 별도 유상 옵션이라고 적지만 단순 READ ONLY와 리두 적용 병행을 구분하지 않은 과금 설명도 포함함 라이선스 적용 조건은 공식 문서, 계약과 대조하지 않았으므로 실습의 설명을 현재 사용 권한 판단으로 사용하지 않음
Primary, Standby의 기동, 종료와 리두 적용 순서는 Primary와 Standby 기동, 종료에서 다룸
#필수 명령어 또는 SQL
#구성과 SRL 확인
show configuration;
show database '<STANDBY_UNIQUE_NAME>';결과 해석: 실습 시작 조건은 SUCCESS, 초기 역할 배치, Transport Lag, Apply Lag 0 seconds와 Intended State APPLY-ON임
select group#, thread#, bytes/1024/1024 mb, status
from v$standby_log;결과 해석: 실습 SRL 보충 페이지의 생성 확인에는 4개 그룹, 각 200M, UNASSIGNED가 나옴 앞선 구축 본문은 6개 그룹, 각 100M이므로 이 수치를 대상 DB에 고정 적용하지 않음 실습에서는 SRL 추가 전 MRP를 멈추고 양쪽 DB에 SRL을 준비하라고 적음
#적용 중지, 읽기 전용 OPEN, 적용 재개
edit database '<STANDBY_UNIQUE_NAME>' set state='APPLY-OFF';결과 해석: 실습 응답은 Succeeded임
select open_mode, database_role from v$database;결과 해석: 실습 OPEN 전 상태는 MOUNTED, PHYSICAL STANDBY임
alter database open;select open_mode, database_role from v$database;결과 해석: 실습에서는 Database altered와 READ ONLY, PHYSICAL STANDBY를 기록하며 아직 WITH APPLY가 아니라고 설명함
edit database '<STANDBY_UNIQUE_NAME>' set state='APPLY-ON';결과 해석: 실습 응답은 Succeeded임
select name, db_unique_name, database_role, open_mode
from v$database;
select process, status, thread#, sequence#
from v$managed_standby where process like 'MRP%';
select name, value, unit from v$dataguard_stats
where name in ('transport lag','apply lag');결과 해석: 실습 최종 상태는 PHYSICAL STANDBY, READ ONLY WITH APPLY이며 MRP0는 APPLYING_LOG로 기록되어 있음 지연 조회의 원래 값은 transport lag와 apply lag 모두 +00 00:00:00이며 현재 DB의 측정값은 아님
#실습의 반영, 읽기 전용 확인 기록
| 확인 | 실습 기록 |
|---|---|
| 반영 | Primary에서 테스트 테이블 생성, INSERT, COMMIT 후 Standby에서 같은 행 조회 |
| 실시간 반영 설명 | 별도 ARCHIVE LOG CURRENT 없이 커밋 직후 조회했다고 기록 |
| 읽기 전용 | Standby INSERT에서 ORA-16000: database or pluggable database open for read-only access |
#사용 조건과 주의사항
ADG 본문은 WAIT_FOR_LOG를 SRL 부재, 크기 불일치로 단정하지만 앞선 Standby 본문은 같은 상태를 정상 MRP 동작으로 적음
이 충돌을 해결하지 않은 채 WAIT_FOR_LOG만으로 SRL 삭제, 재생성을 안내하지 않음
ADG 본문은 이전 MOUNTED 방식에서는 아카이브가 넘어가야 반영된다고 설명하지만 앞선 MOUNT 운영도 USING CURRENT LOGFILE을 Real-Time Apply로 표시함
따라서 MOUNTED와 READ ONLY WITH APPLY의 차이를 아카이브 적용과 실시간 적용의 차이로 단정하지 않았음
실습 오류 표는 ORA-01154, ORA-01156에 적용 중지, ORA-16766에 원인 조회 후 APPLY-ON을 적지만 조건별 오류 재현 기록은 없음
실습의 선택 보호 모드 변경과 무손실 표현은 전송, 보호 모드 기록 차이가 있어 이 ADG 전환 절차에 포함하지 않았음