DB/Oracle

ORACLE Data Guard Architecture

linuxism 2011. 11. 2. 17:41

출처 - http://h391106.tistory.com/231

ORACLE Data Guard Architecture v1.0

 

Date

Ver

Etc.

2011.04.15

1.0

 

 

 

 

 

 

 

  

 

1.    ORACLE Data Guard : Overview

A.     Overview


(*출처 A)

 

Data Guard 는 위와 같은 아키텍처를 가진다.

 

Primary Database  Standby Database 로 구성되며 하나의 Primary Database 에 최대 9개의 Standby Database 가 구성될 수 있다.

 

Primary 측의 변경사항은 Redo Logs 에 기록되는데 이는 백그라운드 프로세스 (LGWR 혹은 ARCn) 에 의해 Standby 측에 Oracle Net 을 통해 전파된다.

 

전파된 변경 내역은 Standby Redo Log 에 쓰였다가 Database 에 적용된다.

 

B.     Standby Database 의 종류

Standby Database 의 종류는 Physical / Logical Standby Database 로 나뉘어진다.

 

Physical Standby Database  Standby Database  Primary Database  block-level 로 동일하다이것이 의미하는 바는 특정 데이터의 rowed 가 동일하다는 것이며 Standby Database 의 백업본이 Primary Database 에 대해서도 사용될 수 있다는 것이다. Standby Database 의 동기화는 Primary Database 로부터 받는 Redo Data 를 이용해 이루어진다. (Redo Apply)

 

Logical Standby Database 는 Primary  Standby Database  Schema-level 로 동일하다. Schema-level 로 동일하다 함은 앞서 Physical Standby Database 와 달리 동일 데이터에 대한 rowid 가 동일하지 않을 수 있다는 걸 의미하며 Standby Database 의 백업본을 Primary 에서 사용할 수 없다는 것이다. Standby Database 의 동기화는 Primary 로부터 받은 redo 를 가공하여 SQL statements 를 추출하고 이를 실행하여 이루어진다. (SQL Apply)

 

C.     Oracle Data Guard Broker Framework


(*출처 B)

 

Data Guard Broker 를 사용함으로써 데이터 가드와 관련해 분산된 관리포인트를 중앙집중화 하여 관리적 편의와 모니터링 기능을 제공한다여기서 관리적 편의라 함은 SQL*PLUS 상에서 Fail Over 를 한다고 했을 때 수행해야 하는 명령어들과 파라미터 변경 (dynamic 하게 수정한다때문에 spfile 을 사용해야 한다.) 과 같은 여러 작업들이 GUI, CLI 상에서는 명령어 하나로 해결이 된다.

 

Data Guard Broker 를 사용하지 않는다는 것은 가드를 컨트롤할 GUI, CLI 도구를 사용하지 않겠다란 의미와 동일하다. GUI 도구에 해당하는 것은 Grid Control 에 해당되며 CLI 라 함은 DGMGRL 를 의미한다.

Data Guard Broker 를 사용하면 DMON Process 가 시작되고 Configuration File 이 생성된다.

 

위 그림에 대해 추가적인 부연설명을 하자면 GUI 를 사용하는 경우 Grid Control 을 이용하고자 할 때 각 서버에는 OMA 가 구성되어 있어야 한다.

 

D.     Role Transitions : Switchover and Failover

Role Transitions  Primary  Standby Database  Role 이 변경되는걸 의미한다.

Switchover  Failover 를 판가름하는 중요한 기준은 계획된 상황’ 인가 여부이다.

 

Switchover 는 계획된 상황’ 으로 role 변경을 위해혹은 OS  H/W 유지보수를 위해 진행된 경우이다.

Failover 는 계획되지 않은 상황’ 으로 다시 말해 장애가 났음을 의미한다이 경우 data protection mode 에 따라 데이터 손실이 없을수도 있을수도 있다.

Fast start failover 에 대한 셋팅이 되어있는 경우 자동화 할 수 있다.

 

E.     Data Protection Modes

Data Guard 구성에 사용할 수 있는 Protection Mode 는 세가지가 있다.

 

<Maximum Protection>

해당 모드는 Primary Database Fail 과 관련해 no data loss 를 보장한다이를 지원하기 위해 각 트랜잭션에 대해 recover 할 수 있는 redo data 가 트랜잭션 commits 전에 반드시 local online redo 로그와 최소한 하나 이상의 standby redo log 에 쓰여져야 한다. Data loss 가 일어나지 않았음을 확신하기 위해 Primary Database 는 오류로 인해 최소한 하나 이상의 remote standby redo log  redo stream 을 쓰지 못한 경우 shutdown 된다.

 

<Maximum Availability>

Maximum Protection Mode 와 마찬가지로 redo data 는 최소 하나 이상의 remote standby redo log  local online redo 에 쓰여져야 commit 한다.

다른 점으로는 remote standby redo log 에 대한 redo stream 에 쓰기를 실패하더라도 Primary database  shutdown 하지 않는다대신에 Maximum Performance 로 동작을 하는데 문제가 문제가 해소되고 redo log gap 이 해소되면은 자동적으로 Maximum Availability 모드로 복귀한다.

 

<Maximum Performance>

이는 Primary Database  Performance 에 주는 영향을 최소화 한 Protection Mode 이다이 경우 commit 에 대해 online redo log  redo log 를 씀으로써 달성하며 최소한 하나이상의 standby database 에 대해 redo data stream 이 쓰여진다하지만 이 데이터는 redo data 를 만들어낸 트랜잭션의 커밋에 대해 비동기적으로 쓰여진다.

 

해당 모드는 Primary  Standby Database 간에 Network 상황이 좋지 않을 때 Primary Database  Performance 침해를 최소화 할 수 있다.

 

2.    ORACLE Data Guard Architecture

A.   Data Guard Operational Requirements

Primary - Standby 구성 간 하드웨어는 다를 수 있다.

Operating system (release 는 달라도 된다.) Platform Architecture 는 반드시 동일해야 한다.

동일한 Release  Database Enterprise Edition 이 설치되어야 한다.

 Database 는 고유한 control file 을 가져야 한다.

Primary Database 는 반드시 ARCHIVELOG mode 이어야 한다.

Standby Database 구성을 위한 data file backup 이전에 Primary Database  FORCE LOGGING 이 수행되어야 한다.

 

B.   Oracle Data Guard : Architecture

<DATAGUARD USING ARCHIVER PROCESS>

 

Figure 5-3 Archiving to Local Destinations Before Archiving to Remote Destinations


(* 출처 C)

 

위 경우는 Redo Stream  redo log  writing 할 프로세스로 Archiver Process 를 택하였다.

Oracle Net 을 통해 Redo Log 가 전송되는 부분을 보면 LOG_ARCHIVE_DEST_2 라 되어 있는데 이는 REDO STREAM 을 쓸 Archiver  2번을 사용했을 뿐이고 번호는 상황에 따라 달라질 수 있다.

 

위 그림을 보면 ARC1  ARC0 이 만든 Archived Log 를 복사하여 Standby Database 에 전송한다전송된 redo data  Remote File Server Process  Standby Redo Log File 에 기록한다이와 같이 기록된 파일은 Real Time Apply 를 사용하느냐 여부에 따라 적용되는 시점이 달라진다.

 

이 설명에 앞서 Database 에 변경 내역을 적용하는 Process  MRP or LSP 가 있는데 MRP 는 Redo Apply  (Physical Standby Database), LSP  SQL Apply  (Logical Standby Database) 동작한다.

 

Real Time Apply 가 적용되지 않는 경우 Archiver  RFS 가 쌓은 Standby Redo Log Files 를 이용하여 Archived Redo Log File 을 생성한다이후 MRP  Redo Log  apply 한다.

 

결과적으로 Standby Database  Apply 되기 위해서는 Master  Redo Log File  Archived 되어야 한다이로 인해 Standby  Primary  Current Redo Log 만큼 (다른 Redo Log File 이 모두 Archived 되었고 이것이 Standby Database 에 모두 적용되었다는 가정하에차이가 날 수 있다.

 

Real Time Apply 를 사용하는 경우 Archiver  Archived Redo Log File 을 생성하기 전에 Standby Redo Log File  MRP  LSP  Standby Database 에 적용한다다시말해 Standby Redo Log 를 가지고 Archived 하는 시간 대기 없이 Database 에 바로 적용한다.

 

/*+ Logical Standby Database 에서의 Real Time Apply? */

 

<DATAGUARD USING ARCHIVER PROCESS : SYNC>

 

Figure 5-4 LGWR SYNC Archival to a Remote Destination with Standby Redo Log Files


(* 출처 C)

 

Sync Archival 과 관련된 파라미터는 LOG_ARCHIVE_DEST_n 이다해당 파라미터에 사용할 수 있는 value  sync 옵션이 있는데 이는 default 로 가지는 값이다. sync 를 사용하는 경우 net_timeout 도 같이 셋팅할 것을 추천한다해당 파라미터는 LGWR  Network Server Process 를 기다리는 시간(으로 해당 초 안에 응답이 없는 경우 LGWR Process  error 를 반환한다.

 

Primary Database 에서는 LGWR  redo data 를 하나 이상의 network server (LNSn) processes 로 보낸다이 프로세스들은 multiple remote destinations 에 대해 network I/O 를 초기화 한다. Transaction (on Primary Database)  LGWR SYNC 로 셋팅된 모든 destinations 에 대해 Transaction recover 에 필요한 redo redo data 가 받아지기전까지 commit 하지 않는다.

 

Standby Database 에서는 Rewmote File Server (RFS) 가 네트워크를 이용해 LGWR 로부터 redo data 를 받는다그리고 그것을 standby redo log files 에 기록한다.

 

<DATAGUARD USING ARCHIVER PROCESS : ASYNC>

 

Figure 5-5 LGWR ASYNC Archival with Network Server (LNSn) Processes


(*출처 C)

 

LGWR ASYNC Archival 의 경우도 LGWR SYNC 모드와 동일하게 LNSn  Standby Database  RFS  Redo data 를 전달한다다만 LGWR 로부터 redo data 를 바로 받는게 아니라 Online Redo Log File 을 읽어들인다이후의 Standby Database 에서 일어나는 일은 LGWR SYNC 와 동일하다.

 

C.     Physical Standby Database / Logical Standby Database

Physical Standby Database 는 앞서 말한 것과 같이 REDO APPLY 를 의미한다. REDO  APPLY 되는 상황은 MRP (Managed Recovery Process)  Start 되었을 때 적용이 되며 이는 mount 상태에서 수행가능하다이를 다시 이야기 하면 mount 단계에서만 physical standby database 로써 동기화 작업을 수행한다는 것을 의미한다. Physical Standby Database  open 이 가능한데 read-only mode 로 가능하다 open 되어 있는 동안에는 redo log  apply 되지 않는다. (11g 는 read-only  open 되어 있는 상황에서도 redo log  apply 한다. : active standby )

 

Logical Standby Database  SQL APPLY 를 의미한다. SQL  APPLY(execute) 하는 상황은 LSP Process 를 시작했을 때이다.

/*+ Logical Standby Database  OPEN Mode 에 따른 SQL APPLY 여부 */

 

D.     Standby Redo Logs

Standby Redo Logs  Database  Standby role 에 있을때만 사용된다이 공간은 Primary Database 로부터 redo data 를 받아 저장하는데 사용된다.

 

Standby Redo Logs 는 다음의 상황에 필요하다.

-      Data Protection Mode : Maximum Protection, Maximum availability

-      Real-time apply

-      Cascaded redo log destinations

 

Standby redo logs 는 Maximum performance data protection mode 에 대해서도 사용이 권장된다.

 

만약 real-time apply 를 사용하지 않는다면, data 가 standby database 에 적용되기 전에 standby redo logs 는 반드시archived 되어야 한다.

 

E.     Physical Standby Database : Redo Apply Architecture

production (primary) database 는 1 ~ 9 개의 standby database 를 가질 수 있다.

이와 연관된 파라미터로 log_archive_dest_n 이 있다. n 에 들어갈 수 있는 범주는 1 ~ 10 (10로 하나는 local archive destination 으로 쓰이기 때문에 최대 9개의 standby database 를 가질 수 있다.

 

F.     Logical Standby Database : SQL Apply Architecture

Figure 9-1 SQL Apply Processing


(* 출처 D)

 

Logical Standby 역시 Physical Standby Database 와 동일하게 Primary 의 변경내역을 Standby 에 적용한다이 일을 하는 프로세스가 MRP -> LSP 로 바뀐 것을 말고는 아키텍처상 큰 차이는 없어보인다.

 

다만 변경사항을 적용하기 위한 방법이 REDO APPLY 가 아니라 SQL APPLY 라는 것이고 이것은 내부적으로 위의 아키텍처와 같이 동작한다.

 

Oracle Net 을 통해 전달된 Redo data 

a.    Reader Process  archived redo log files 로부터 redo records 를 읽어들인다.

b.    Preparer Processes  block changes  table changes ( =logical change records=LCRs) 로 변환한다이 시점에는 트랜잭션에 아무 영향 없다.

c.    Builder Process   개개의 LCRs 로부터 완성된 트랜잭션을 만들어낸다.

d.    Analyzer Process  records 를 검사하고제거할 수 있는 트랜잭션을 제거하고 다른 트랜잭션 간의 dependencies 를 확인한다.

e.    Coordinator Process(=LSP) 는 다음의 행동을 한다.

-      트랜잭션을 할당

-      트랜잭션간의 의존성을 모니터링하며 스케쥴링한다.

-      Logical Standby Database 에 대한 변경에 대해 commit 을 승인한다.

f.      Applier Processes 는 다음의 행동을 한다.

-      LCRs  database 에 적용한다.

-      의존성 해결이 되지 않은 트랜잭션에 대해 coordinator process 에게 승인을 요청한다. (이 요구에 따라 LSP  Scheduling 을 하게 되며 이를 통해 의존성 문제가 해결이 된다.)

-      해당 트랜잭션을 commit 한다.

 

G.    Real-Time Apply

Real-Time Apply  Standby redo log files  archived 하기 전에 MRP 혹은 LSP 를 통해 Standby database 에 적용한다이를 통해 down time 의 최소화를 달성할 수 있다.

 

H.     Standby Redo Log Configuration

Standby Database 의 Standby Redo Logs 수는 최소한 Primary 의 Redo Logs 의 그룹수와 동일해야한다보통 그룹을 하나 더 두는 것을 추천한다추가적으로 파일 사이즈는 반드시 같거나 더 커야한다.

 

RFS process  archived redo log 를 쓰는 경우는 다음과 같다. (Standby redo logs 가 아닌)

-      Standby redo logs 가 없을 때

-      들어오는 online redo log file 에 대해 같은 사이즈의 standby redo log 를 찾지 못했을 때

-      모든 올바른 사이즈의 standby redo logs 가 아직 archived 되지 않았을 때

 

3.    References

A.     1 Introduction to Oracle Data Guard |

http://download.oracle.com/docs/cd/B19306_01/server.102/b14239/concepts.htm

 

B.     3 Managing Broker Configurations |

http://download.oracle.com/docs/cd/B19306_01/server.102/b14230/configure.htm

 

C.     5 Redo Transport Services |

http://download.oracle.com/docs/cd/B19306_01/server.102/b14239/log_transport.htm

 

D.     9 Managing a Logical Standby Database |

http://download.oracle.com/docs/cd/B19306_01/server.102/b14239/manage_ls.htm#g1057004

 

E.     Oracle Database 10g : Data Guard Administration