버전 비교
키
- 이 줄이 추가되었습니다.
 - 이 줄이 삭제되었습니다.
 - 서식이 변경되었습니다.
 
| 목차 영역 | |
|---|---|
 
  | 
사전 준비
서버 정보 hosts 파일 저장
| 코드 블럭 | ||||||
|---|---|---|---|---|---|---|
  | ||||||
10.10.50.11 ora_act 10.10.50.21 ora_stb  | 
hosts 파일에 Primary 서버의 정보와 Standby 서버의 정보를 입력합니다.
db name 파라미터 조회
| 코드 블럭 | |||||
|---|---|---|---|---|---|
  | |||||
show parameter db_name show parameter db_unique_nameSELECT log_mode FROM v$database;  | 
| 펼치기 | 
|---|
db name 파라미터 조회
| 코드 블럭 | ||||
|---|---|---|---|---|
  | ||||
show parameter db_name
show parameter db_unique_name | 
| 펼치기 | |||||||||
|---|---|---|---|---|---|---|---|---|---|
 
  | 
| 코드 블럭 | ||
|---|---|---|
  | ||
ALTER DATABASE FORCE LOGGING; | 
Data Guard를 사용하기 위해서는 반드시 Archive log 모드로 구성이 되어 있어야 합니다.
로그 모드를 조회한 후 noarchive 상태이면 반드시 archive 상태로 변경합니다.
추가적으로 force logging 모드로 전환하여, 모든 작업이 강제적으로 로그로 기록될 수 있도록 합니다.
  | 
db_name 파라미터 값은 모두 동일하지만, db_unique_name은 Primary와 Standby가 달라야 합니다.
| 구분 | db_name | db_unique_name | 
|---|---|---|
| Primary | orcl | ORCL | 
| Standby | orcl | ORCL_STB | 
tnsname.ora 설정
| 코드 블럭 | ||||||
|---|---|---|---|---|---|---|
  | ||||||
ORCL =
  (DESCRIPTION =
unique_name
NAME   (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = ora_act)(PORT = 1521)) ) (CONNECT_DATA =TYPE (SERVICE_NAME = orcl) ) ) ORCL_STB = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOSTVALUE ------------------------------------ --------------------------------- ------------------------------ db_unique_name string ORCL  | 
db_name 파라미터 값은 모두 동일하지만, db_unique_name은 Primary와 Standby가 달라야 합니다.
| 구분 | db_name | db_unique_name | 
|---|---|---|
| Primary | orcl | ORCL | 
| Standby | orcl | ORCL_STB | 
tnsname.ora 설정
| 코드 블럭 | ||||||
|---|---|---|---|---|---|---|
  | ||||||
ORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ora_act)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )
ORCL_STB =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ora_stb)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ORCL_STB)
      (UR = A)
    )
  ) | 
tnsnames.ora 파일의 내용을 설정합니다.
Primary와 Standby DB에 접속 정보가 저장되며, Primary와 Standby 노드 모두 같은 내용을 사용합니다.
저장 위치는 $ORACLE_HOME/network/admin/tnsnames.ora 입니다.
= ora_stb)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ORCL_STB)
      (UR = A)
    )
  ) | 
tnsnames.ora 파일의 내용을 설정합니다.
Primary와 Standby DB에 접속 정보가 저장되며, Primary와 Standby 노드 모두 같은 내용을 사용합니다.
저장 위치는 $ORACLE_HOME/network/admin/tnsnames.ora 입니다.
Data Guard 사용을 위한 파라미터 설정
| 코드 블럭 | 
|---|
ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(ORCL,ORCL_STB)';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=ORCL_STB NOAFFIRM ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORCL_STB';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE; | 
| 코드 블럭 | 
|---|
ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.arc' SCOPE=SPFILE;
ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=30;
ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=shared SCOPE=SPFILE; | 
| 코드 블럭 | 
|---|
ALTER SYSTEM SET FAL_CLIENT=ORCL;
ALTER SYSTEM SET FAL_SERVER=ORCL_STB;
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO; | 
아카이브 관련 파라미터와 Data Guard 운영을 위한 파라미터를 설정합니다.
- LOG_ARCHIVE_CONFIG : 리두 로그를 원격 대상으로 보내고 원격 리두 로그를 수신하며, Data Guard 구성에서 각 데이터베이스의 DB_UNIQUE_NAME을 지정합니다.
 - LOG_ARCHIVE_DEST_2 : 아카이브 리두 로그를 보낼 원격 대상의 정보와 전송할 데이터와 방식에 대하여 지정합니다.
 - LOG_ARCHIVE_DEST_STATE_2 : LOG_ARCHIVE_DEST_2에서 지정한 경로의 활성화/비활성화 등의 상태를 지정합니다.
 - LOG_ARCHIVE_FORMAT : 아카이브 로그 파일명의 포맷을 지정합니다.
 - LOG_ARCHIVE_MAX_PROCESSES : 최대 ARCn 프로세스의 수를 지정합니다.
 - REMOTE_LOGIN_PASSWORDFILE : 오라클이 패스워드 파일을 체크할지의 여부를 지정합니다.
 - FAL_CLIENT : FAL(fetch archive log) 클라이언트를 참조하기 위해 FAL_SERVER 초기화 매개 변수를 통해 구성된 FAL 클라이언트 이름을 지정합니다.
 - FAL_SERVER : Standby 데이터베이스에 대한 FAL(fetch archive log) 서버를 지정합니다.
 STANDBY_FILE_MANAGEMENT : Physical Standby에 automatic standby file management를 활성화 또는 비활성화합니다. 자동 대기 파일 관리를 사용하면 primary 데이터베이스의 파일 추가 및 삭제 작업이 standby 데이터베이스에도 적용됩니다.
로그 모드 설정
| 코드 블럭 | ||
|---|---|---|
  | ||
SELECT log_mode FROM v$database; | 
| 펼치기 | |||||||||
|---|---|---|---|---|---|---|---|---|---|
 
  | 
| 코드 블럭 | ||||
|---|---|---|---|---|
  | ||||
ALTER DATABASE FORCE LOGGING;
ALTER SYSTEM SWITCH LOGFILE; | 
Data Guard를 사용하기 위해서는 반드시 Archive log 모드로 구성이 되어 있어야 합니다.
로그 모드를 조회한 후 noarchive 상태이면 반드시 archive 상태로 변경합니다.
추가적으로 force logging 모드로 전환하여, 모든 작업이 강제적으로 로그로 기록될 수 있도록 합니다.
Data Guard 사용을 위한 파라미터 설정
| 코드 블럭 | 
|---|
ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(ORCL,ORCL_STB)';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=ORCL_STB NOAFFIRM ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORCL_STB';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE; | 
| 코드 블럭 | 
|---|
ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.arc' SCOPE=SPFILE;
ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=30;
ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE; | 
| 코드 블럭 | 
|---|
ALTER SYSTEM SET FAL_CLIENT=ORCL;
ALTER SYSTEM SET FAL_SERVER=ORCL_STB;
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO; | 
Standby 서버의 컨트롤, 파라미터 파일 생성
| 코드 블럭 | ||||
|---|---|---|---|---|
  | ||||
ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/home/oracle/orcl_stb.ctl'; CREATE PFILE='/home/oracle/orcl_stb.ora' FROM SPFILE;  | 
| 펼치기 | ||
|---|---|---|
  | 
Standby에서 사용할 데이터베이스 컨트롤 파일과 파라미터 파일을 Primary에서 생성합니다.
Standby 파라미터 파일 수정
| 코드 블럭 | ||||||
|---|---|---|---|---|---|---|
  | ||||||
*.db_unique_name='ORCL_STB' *.fal_client='ORCL_STB' *.fal_server='ORCL' *.log_archive_dest_2='SERVICE=ORCL ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORCL'  | 
생성한 orcl_stb.ora 파일에서 다음의 Standby 환경에 맞게 파라미터 값들을 수정합니다.
db_unique_name은 반드시 primary와 다르게 지정합니다.
Standby로 파일 복제
| 코드 블럭 | ||||||
|---|---|---|---|---|---|---|
  | ||||||
scp oracle@ora_act:/home/oracle/orcl_stb.ctl /oradata/orcl/control01.ctl cp /oradata/orcl/control01.ctl /oradata/fast_recovery_area/orcl/control02.ctl scp oracle@ora_act:/home/oracle/orcl_stb.ora /home/oracle/orcl_stb.ora scp oracle@ora_act:$ORACLE_HOME/dbs/orapworcl $ORACLE_HOME/dbs  | 
| 펼치기 | ||
|---|---|---|
  | 
Primary에서 작업한 컨트롤 파일과 파라미터 파일을 Standby로 복제합니다.
컨트롤 파일의 경우 파라미터 파일 내에 경로에 맞는 위치로 복제해야 합니다.
Standby Log 파일 생성
| 코드 블럭 | 
|---|
ALTER DATABASE ADD STANDBY LOGFILE ('/oradata/orcl/standby_redo01.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE ('/oradata/orcl/standby_redo02.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE ('/oradata/orcl/standby_redo03.log') SIZE 50M; | 
Standby Redo Log를 primary에 생성합니다. 가급적 primary와 동일한 갯수와 사이즈로 생성하도록 합니다.
Standby의 listener.ora 파일 생성
| 코드 블럭 | ||||||
|---|---|---|---|---|---|---|
  | ||||||
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = ORCL)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
      (SID_NAME = orcl)
    )
  )
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ora_stb)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
ADR_BASE_LISTENER = /u01/app/oracle | 
Standby 쪽의 listener.ora 파일은 아래와 같습니다.
데이터베이스 복제
Standby Database 인스턴스 기동
| 코드 블럭 | ||||
|---|---|---|---|---|
  | ||||
sqlplus / as sysdba startup nomount pfile='/home/oracle/orcl_stb.ora';  | 
| 펼치기 | ||
|---|---|---|
  | 
데이터베이스 복제를 위해 Standby 인스턴스를 복제한 파라미터 파일로 기동합니다.
RMAN 접속
| 코드 블럭 | ||||
|---|---|---|---|---|
  | ||||
rman TARGET sys/oracle@ORCL AUXILIARY sys/oracle@ORCL_STB  | 
| 펼치기 | ||
|---|---|---|
  | 
Standby로 데이터베이스 복제
| 코드 블럭 | ||||
|---|---|---|---|---|
  | ||||
DUPLICATE TARGET DATABASE
   FOR STANDBY
   FROM ACTIVE DATABASE
   DORECOVER
   SPFILE
     SET db_unique_name='ORCL_STB' COMMENT 'Is standby'
     SET LOG_ARCHIVE_DEST_2='SERVICE=ORCL ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORCL'
     SET FAL_SERVER='ORCL' COMMENT 'Is primary'
   NOFILENAMECHECK; | 
| 펼치기 | ||
|---|---|---|
  | 
아카이브 로그 적용 모드
적용 모드 활성화
| 코드 블럭 | ||||
|---|---|---|---|---|
  | 
스위치오버 : Primary를 Standby로 전환
| 코드 블럭 | ||||
|---|---|---|---|---|
  | ||||
-- Foreground 모드로 수행 (취소하기 전까지 대기 모드로 유지됨) -- ALTER DATABASE COMMITRECOVER TOMANAGED SWITCHOVERSTANDBY TO STANDBYDATABASE; SHUTDOWN IMMEDIATE; STARTUP NOMOUNT; ALTER DATABASE MOUNT STANDBY DATABASE; -- Background 모드로 수행 (프로세스 시작 후 입력 가능한 모드로 전환) ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;  | 
적용 모드 취소하기
| 코드 블럭 | 
|---|
스위치오버 : Standby를 Primary로 전환
| 코드 블럭 | |
|---|---|
| title | Switchover : Standby에서 작업 | linenumbers | true
ALTER DATABASE COMMITRECOVER TOMANAGED SWITCHOVERSTANDBY TO PRIMARY; SHUTDOWN IMMEDIATE; STARTUPDATABASE CANCEL;  |