본문으로 바로가기
반응형

Active Data Guard

 

 ■ ADG란, 쉽게 말하면, Primary DB 와 DR DB (Standby DB)를 구성하는 방법입니다.

 ■ OGG (Oracle Gloden Gate)의 하위 버전으로 보시면 될 것 같습니다.

 

 ■ ADG는 메인 운영 데이터베이스를 Primary 라 부르고, Standby 데이터베이스는 Primary의 복제 DB로 구성하여 사용합니다.

 ■ ADG는 RAC, Single DB 모두 사용이 가능합니다.

 

 ■ Data Guard를 구성하게 되면, Primary DB는 Read/Write 상태가 되며, Standby DB는 Read only 상태로 변경된다. 

SQL> select name, open_mode from v$database;

NAME               OPEN_MODE
------------------ ----------------------------------------
Primary DB         READ WRITE
SQL> select name, open_mode from v$database;

NAME               OPEN_MODE
------------------ ----------------------------------------
Standby DB         READ ONLY

 

 ■ 동작 원리는, RMAN 의 Duplicate 명령을 통해, 단방향(Primary -> Standby) 로 데이터가 복제되며,

     Standby DB는 redo data를 받아 자신의 DB Storage 에 데이터를 적재한다. 

 

 ■ 보통 2가지 방식으로 사용되며, Redo를 받는 실시간 동기방법 그리고 ReDO를 받아, SQL로 입력하는 방법을

    사용하게 되는데, 대부분 전자의 방법을 사용한다.

 

 

 ■ ADG는 DR 즉 재해 복구용도로 사용되며, OGG에 비해 가격이 저렴한 장점이 있으나,

    Standby로 절체시, 반대로 역복제를 진행해야 하는 번거로움이 있다.

 

 ■ Physical standby database

  - Primary DB와 물리적으로 동일한 복제 DB를 구성하는 구성.

  - Physical standby DB는 Primary DB로 부터 실시간 Redo data를 전송받아 적용하는 방식으로동기화를 유지한다.

 

 ■ Logical standby database

  - Primary DB 의 데이터와 논리적으로 같은 정보를 포함하고 있는 구성

  - Primary DB의 redo 정보를 SQL 을 통해 Standby DB에 반영한다.

 

 

Primary Database 구성 방법 (RMAN 그리고 Set For Data Guard)

 

 ■ force_logging 설정 확인

force_logging

 ■ force_logging 설정 변경

SQL> sqlplus / as sysdba
SQL> ALTER DATABASE FORCE LOGGING;
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

SQL> SELECT FORCE_LOGGING,SUPPLEMENTAL_LOG_DATA_MIN FROM GV$DATABASE; 

FORCE_LOGGING    SUPPLEMENTAL_LOG
---------------  ----------------
YES               YES

 

DB Unique name 변경

 - pfile 변경이 필요하며, pfile이 없다면 spfile 을 통해, pfile 을 생성한다.

SQL> show parameter pfile;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /oracle/dbs/spfileprimary.ora


SQL> create pfile from spfile;
File created.


[oracle@audit-db dbs]]$ ll
합계 20
-rw-rw---- 1 oracle oinstall 1544 11월  3 16:21 hc_primary.dat
-rw-r--r-- 1 oracle oinstall 3079  5월 14  2015 init.ora
-rw-r--r--  1 oracle oinstall  961 11월  4 16:04 initprimary.ora
-rw-r----- 1 oracle oinstall   24 11월  3 16:15 lkprimary
-rw-r----- 1 oracle oinstall 2048 11월  3 16:17 orapwprimary
-rw-r----- 1 oracle oinstall 2560 11월  3 16:52 spfileprimary.ora

 

 ■ vi 로 pfile을 열어, 내용을 추가한다.

  - 내용 추가시 : DB_NAME 파라미터 부분은 두 서버가 동일한 값을 가져야 하며,

  - primary와 standby를 구분하기 위해, 유니크 네임을 별도로 지정한다.

[oracle@audit-db dbs]$ vi initprimary.ora

*.db_unique_name='Primary'
*.log_archive_config='dg_config=(Primary,standby)'
*.log_archive_dest_1='/Archivelog'
*.log_archive_dest_2='service=standby lgwr async valid_for=(online_logfile,primary_role)db_unique_name='standby'
*.log_archive_dest_state_1='enable'
*.log_archive_dest_state_2='enable'
*.standby_file_management='auto'

wq!

DB NAME의 경우 양 서버가 동일하게 구성되도록 한다.
*.DB_name='ADG'

 

■ 이후 pfile을 이용하여  spfile을 새로 만들어 적용해준다.

SQL> create spfile from pfile;
File created.

파라미터 확인 후 PFILE 생성

 

 

■ TNSNAMES.ORA 설정 추가

standby =
 (DESCRIPTION =
 (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.10)(PORT = 1521))
 (FAIL_OVER=ON)
 (CONNECT_DATA =
 (SERVER = DEDICATED)
 (SERVICE_NAME = standby)
 )
 )

 

 

■ Redo log 추가 구성

[oracle@audit-db dbs]$ sqlplus / as sysdba

SQL> ALTER DATABASE ADD STANDBY LOGFILE '/oradata/ADG/primary_redo01.log' size 200M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE '/oradata/ADG/primary_redo02.log' size 200M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE '/oradata/ADG/primary_redo03.log' size 200M;

 

■ 오라클 패스워드 파일 이동 (primary -> standby)

 - 양서버의 패드워드 파일이, 다르면, redo 전송의 에러가 발생한다 : ORA-01031

 - SFTP, SCP 등의 다양한 방법으로 이동하자.

 - 대상 파일 : $ORACLE_HOME/dbs/orapw/orapw[SID or service name]

 

 

 

Standby Database 구성 방법 (RMAN 그리고 Set For Data Guard)

 

 ■ DB Unique name 변경 (primary 와 동일)

SQL> show parameter pfile;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /oracle/dbs/spfilestandby.ora


SQL> create pfile from spfile;
File created.


[oracle@DRDB dbs]]$ ll
합계 20
-rw-rw---- 1 oracle oinstall 1544 11월  3 17:25 hc_standby.dat
-rw-r--r-- 1 oracle oinstall 3079  5월 14  2016 init.ora
-rw-r--r--  1 oracle oinstall  961 11월  4 17:41 initstandby.ora
-rw-r----- 1 oracle oinstall   24 11월  3 17:05 lkstandby
-rw-r----- 1 oracle oinstall 2048 11월  3 17:07 orapwstandby
-rw-r----- 1 oracle oinstall 2560 11월  3 17:54 spfilestandby.ora

 

■ vi 로 pfile을 열어, 내용을 추가한다. (main 과 동일)

  - primary와 standby를 구분하기 위해, 유니크 네임을 별도로 지정한다.

[oracle@DRDB dbs]$ vi initprimary.ora

*.db_unique_name='standby'
*.log_archive_config='dg_config=(Primary,standby)'
*.log_archive_dest_1='/Archivelog'
*.log_archive_dest_2='service=primary lgwr async valid_for=(online_logfile,primary_role)db_unique_name='primary'
*.log_archive_dest_state_1='enable'
*.log_archive_dest_state_2='enable'
*.standby_file_management='auto'
*.fal_server=standby
*.fal_client=primary

wq!

DB NAME의 경우 양 서버가 동일하게 구성되도록 한다.
*.DB_name='ADG'

 

 

■ 이후 pfile을 이용하여  spfile을 새로 만들어 적용해준다.

SQL> create spfile from pfile;
File created.

 

■ TNSNAMES.ORA 설정 추가

primary =
 (DESCRIPTION =
 (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.20)(PORT = 1521))
 (FAIL_OVER=ON)
 (CONNECT_DATA =
 (SERVER = DEDICATED)
 (SERVICE_NAME = primary
 )
 )

 

■ Standby Redo log 추가 구성

[oracle@DRDB dbs]$ sqlplus / as sysdba

SQL> ALTER DATABASE ADD STANDBY LOGFILE '/oradata/ADG/standby_redo01.log' size 200M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE '/oradata/ADG/standby_redo02.log' size 200M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE '/oradata/ADG/standby_redo03.log' size 200M;

 

 

DB 기동(재기동) 및 상태 확인

 

 ■ Primary Database

[oracle@audit-db dbs]$ sqlplus / as sysdba

SQL> select DATABASE_ROLE,PROTECTION_MODE from v$database;
DATABASE_ROLE      PROTECTION_MODE
----------------  --------------------
PRIMARY             MAXIMUM PERFORMANCE

PRIMARY

 

 

 ■ Standby Database

[oracle@DRDB dbs]$ sqlplus / as sysdba

SQL> startup nomount;

 

■ Primary Database

[oracle@audit-db dbs]$ rman target sys/oracle@primary auxiliary sys/oracle@standby

run {
allocate channel Primary type disk
allocate auxiliary channel standby type disk
duplicate target database for standby from active database nofilenamecheck
;
}

...
...
..
Finished Duplicate

RMAN

 

RMAN 명령어 옵션

[oracle@audit-db dbs]$ sqlplus / as sysdba

SQL> alter system archive log current;

■ Standby Database

[oracle@DRDB dbs]$ sqlplus / as sysdba

SQL> startup mount
SQL> alter database recover managed standby database disconnect from session; 
SQL> alter database recover managed standby database cancel;
SQL> alter database open;
SQL> alter database recover managed standby database using current logfile disconnect;

SQL> select open_mode from v$database;
OPEN_MODE
----------
READ ONLY

 

SQL> SELECT database_role, open_mode FROM v$database;

DATABASE_ROLE      OPEN_MODE
----------------   --------------------
PHYSICAL STANDBY   READ ONLY WITH APPLY

 

 

간단히 사용하실 수 있도록 코드로 작성하였습니다.

 

다음은 ADG 운영관리에 필요한 명령어를 포스팅 예정입니다.

 

[IT-Infra, Network/IT-Oracle] - Oracle 12C 설치 가이드 Feat.페이지 오류로 재작성

[IT-Infra, Network/IT-Oracle] - Oracle 접속 시도시 ORA-28040 / ORA-01017 오류 해결 방안 (Oracle 12C 이상 18, 19 동일)

[IT-Infra, Network/IT-Oracle] - ORA-28000 The account is locked 오라클 계정 잠금 lock 해결 가이드

[IT-Infra, Network/IT-Oracle] - Oracle ORA-01653 (Unable to extend table) 오류 해결 가이드 Feat. 테이블스페이스 용량부족, 데이터파일 추가하기

[IT-Infra, Network/IT-Oracle] - Tablespace 구성방안(DATA / INDEX TABLESPACE 분리 구성)