OS 환경 : Oracle Linux 9.6 (64bit)
DB 환경 : Oracle Database 19.28.0.0
방법 : 오라클 19c Active Data Guard(ADG)와 Data Guard(DG) 차이점 및 DML Redirection 기능
Oracle Data Guard(DG)는 Primary DB에서 발생하는 Redo 데이터를 Standby DB로 전송 및 적용(Apply)하여 데이터 동기화를 유지하는 재해 복구(DR) 솔루션임
기본적으로 일반 DG 환경에서 Standby DB는 MOUNT 상태로 유지되고 Redo를 지속적으로 적용함(mount 상태이기 때문에 평상시에는 DB에 접근해서 데이터를 조회할 수 없음)
Active Data Guard(ADG)는 Redo Apply(동기화)를 진행하면서 동시에 Standby DB를 READ ONLY 상태로 Open 할 수 있는 기능임
ADG를 사용하면 무거운 통계 쿼리, 일 단위 결산 배치(Read-only), BI 리포팅 툴의 DB 연결을 Standby로 수행해 Primary DB의 CPU 및 I/O 부하를 분산시킬 수 있음
또한 RMAN 백업을 Primary DB가 아닌 Standby DB에서 수행하여 운영 장비의 백업 부하를 제거하는 용도로도 사용 가능함(참고로 Datapump는 내부적으로 임시테이블을 만드는 작업이 있기때문에 Standby에서 수행 불가함)
라이센스는 기본 DG는 Enterprise Edition(EE)에 기본 포함되지만 ADG는 EE에 추가적인 Option 라이센스 구매가 필요함
그리고 오라클 19c부터는 ADG 환경에서 DML Redirection이라는 신기능이 추가됨
원래 ADG의 Standby DB는 Read Only 상태라 DML(INSERT, UPDATE, DELETE)이 불가능함
하지만 이 기능을 사용하면 Standby DB에서 DML을 실행할 경우 이를 Primary로 리다이렉션해서 처리한 뒤 다시 Redo를 통해 Standby DB로 동기화시킴
가끔 데이터 수정이 필요한 Reporting Application도 이제 소스 수정 없이 ADG를 바라보게 할 수 있음
본문에서는 ADG 환경을 확인하고 19c 신기능인 DML Redirection을 활성화하여 Standby DB에서 직접 DML을 수행해보는 테스트를 진행함
ADG 구축은 아래 게시글 참고
참고 : 오라클 19c Restart(ASM) to 싱글(FS) ADG 구성 가이드 ( https://positivemh.tistory.com/1391 )
테스트
Standby DB의 현재 오픈 모드 및 ADG 상태 확인
|
1
2
3
4
5
|
SQL> select name, open_mode, database_role from v$database;
NAME OPEN_MODE DATABASE_ROLE
--------- -------------------- ----------------
ORACLE19 READ ONLY WITH APPLY PHYSICAL STANDBY
|
READ ONLY WITH APPLY 상태로 ADG가 정상적으로 동작 중임
DML Redirection 활성화 전 Primary DB에서 샘플 테이블 생성
|
1
2
3
4
|
$ sqlplus system/oracle
SQL> create table adg_test (col1 number);
Table created.
|
DML Redirection 활성화 전 Standby DB에서 dml 테스트
|
1
2
3
4
5
|
SQL> insert into adg_test values (1);
insert into adg_test values (1)
*
ERROR at line 1:
ORA-16000: database or pluggable database open for read-only access
|
읽기 전용이어서 DML이 실패함
세션 레벨에서 DML Redirection 기능 활성화
|
1
2
3
|
SQL> alter session enable adg_redirect_dml;
Session altered.
|
참고로 시스템 전체 레벨로 적용하려면 adg_redirect_dml 파라미터를 true로 변경하면 됨
DML Redirection 활성화 후 Standby DB에서 dml 테스트
|
1
2
3
4
5
6
7
8
|
$ sqlplus system/oracle
SQL> insert into adg_test values (1);
1 row created.
SQL> commit;
Commit complete.
|
조금 느리지만 insert 됨 ORA-16000 에러 없이 정상적으로 INSERT 및 COMMIT이 수행됨
백그라운드에서 Primary DB로 쿼리가 전달되어 실행된 후 Redo를 통해 다시 Standby로 적용된 것임
참고로 sysdba(OS 인증 등)로 접속하면 redirection 할때 필요한 세션 정보가 없기 때문에 dml이 실패함
|
1
2
3
4
5
6
|
$ sqlplus / as sysdba
SQL> insert into adg_test values (1);
insert into adg_test values (1)
*
ERROR at line 1:
ORA-16397: statement redirection from Oracle Active Data Guard standby database to primary database failed
|
각 DB에서 데이터 반영 확인
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#Primary DB에서 확인
SQL>
conn system/oracle
set lines 200
col name for a20
select * from adg_test;
COL1
----------
1
#Standby DB에서 확인
SQL>
conn system/oracle
set lines 200
col name for a20
select * from adg_test;
COL1
----------
1
|
양쪽 db에서 동기화된 데이터가 정상적으로 조회됨
참고로 Primary와 Standby 간의 복제 지연(Lag) 상태나 전송 에러는 v$dataguard_stats 뷰에 정보가 남음
|
1
2
3
4
5
6
7
8
|
SQL> select name, value from v$dataguard_stats;
NAME VALUE
------------------------------ ----------------------
transport lag +00 00:00:00
apply lag +00 00:00:00
apply finish time +00 00:00:00.000
estimated startup time 16
|
Lag이 00:00:00 이면 실시간으로 지연 없이 잘 동기화되고 있다는 의미임
결론 :
Oracle ADG 기능을 이용하면 DR 구성과 동시에 읽기 부하를 Standby 서버로 분산할 수 있음
19c의 DML Redirection을 이용해 Read-Only DB의 제약을 일부 해소할 수도 있음
하지만 리다이렉션 과정에서 네트워크 오버헤드가 발생할수 있기 떄문에 대량의 DML 트랜잭션보다는 간헐적인 DML이 발생하는 환경에 적합함
그리고 Snapshot Standby Database 기능을 이용하면 DG 환경에서도 임시로 Read Write 가능한 db로 변경이 가능함
참고 : 오라클 19c ADG Snapshot Standby Database ( https://positivemh.tistory.com/1397 )
참조 :
오라클 19c rman incarnation 설명 및 복구 시나리오 ( https://positivemh.tistory.com/697 )
오라클 19c Restart(ASM) to 싱글(FS) ADG 구성 가이드 ( https://positivemh.tistory.com/1391 )
오라클 19c ADG Gap 발생시 rman duplicate 재수행 복구 시나리오 ( https://positivemh.tistory.com/1392 )
오라클 19c ADG Gap 발생시 rman 증분백업이용 복구 시나리오 ( https://positivemh.tistory.com/1394 )
오라클 19c ADG 구성 중 db_file_name_convert, log_file_name_convert 파라미터 테스트 ( https://positivemh.tistory.com/1396 )
오라클 19c ADG Snapshot Standby Database ( https://positivemh.tistory.com/1397 )
https://docs.oracle.com/en/database/oracle/oracle-database/19/dblic/Licensing-Information.html#GUID-AB56CEE3-955E-4E56-8B44-6075E889C283
'ORACLE > Admin' 카테고리의 다른 글
| 오라클 19c Restart 환경 hostname 변경 가이드 (0) | 2026.06.21 |
|---|---|
| 오라클 19c ADG Snapshot Standby Database (0) | 2026.06.14 |
| 오라클 19c ADG 구성 중 db_file_name_convert, log_file_name_convert 파라미터 테스트 (0) | 2026.06.12 |
| 오라클 19c ADG Gap 발생시 rman 증분백업이용 복구 시나리오 (0) | 2026.06.11 |
| 오라클 19c ADG Gap 발생시 rman duplicate 재수행 복구 시나리오 (0) | 2026.06.08 |
