ORACLE/DataGuard2008. 12. 13. 16:24
반응형

Database:Oracle:DG PSB

목차
[숨기기]

    * 1 설정
          o 1.1 환경설정
                + 1.1.1 Production DB에서
                + 1.1.2 Standby DB에서
    * 2 Standby DB Setup
          o 2.1 datafile 및 logfile 생성
          o 2.2 ORACLE NET환경 설정
          o 2.3 STANDBY LOGFILE생성
          o 2.4 standby database 운영
          o 2.5 SWITCHOVER
                + 2.5.1 Pirmary에서 Standby로 역할 변경
                + 2.5.2 Standby에서 Primary로 역할 변경
                + 2.5.3 새로운 STANDBY DB를 STANDBY 기능을 활성화
          o 2.6 protection mode의 변경
                + 2.6.1 상위모드로의 변경(UPGRADE)
                + 2.6.2 하위모드로의 변경(DOWNGRADE)


[
 본 문서는 physical standby database만을 가정한다.
 

 설정

 환경설정

Production DB에서

1. nologging option을 방지하기 위해 DB를 FORCE LOGGING MODE로 설정한다.
 
 SQL> select log_mode, force_logging from v$database;
 
 LOG_MODE FOR
 ------------ ---
 ARCHIVELOG NO
 
 SQL> alter database force logging;
 
 Database altered.
 
 2. sysdba에 login 환경을 설정한다.
 cd $ORACLE_HOME/dbs
 orapwd file=orapw password=<sys계정의 password=""> entries=10
 
 3. initial parameter를 설정한다.
 # for DataGuard Primary DB
 *.REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
 *.LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
 *.LOG_ARCHIVE_MAX_PROCESSES=30
 
 *.db_name=ART
 *.db_unique_name=ART
 *.LOG_ARCHIVE_CONFIG='DG_CONFIG=(ART,ART_SB)'
 
 *.LOG_ARCHIVE_DEST_1=
  'LOCATION=/u00/ART/ARC
  VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
  DB_UNIQUE_NAME=ART'
 *.LOG_ARCHIVE_DEST_2=
  'SERVICE=ART_SB LGWR ASYNC
  VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
  DB_UNIQUE_NAME=ART_SB'
 *.LOG_ARCHIVE_DEST_STATE_1=ENABLE
 *.LOG_ARCHIVE_DEST_STATE_2=ENABLE
 
 # for DataGuard Primary DB when Standby Role
 *.FAL_SERVER=ART_SB
 *.FAL_CLIENT=ART
 #*.db_file_name_convert='/opt/ORA/oradata/ART_SB/','/opt/ORA/oradata/ART/'
 #*.log_file_name_convert='/opt/ORA/oradata/ART_SB/','/opt/ORA/oradata/ART/'
 *.standby_file_management=auto
 
 4. DB를 OPEN하고 online redo log를 dump한다.
 SQL> alter database open;
 
 Database altered.
 
 SQL> alter database begin backup;
 
 Database altered.
 
 SQL> alter database create standby controlfile as '/tmp/ART.ctl'; 
 
 Database altered.</sys계정의>

Standby DB에서

1. Production DB에서 datafile, logfile 등을 copy한다.
  => 물론 production DB가 BEGIN BACKUP 상태에서 진행한다.
 
 2. initial parameter를 수정한다.
 # for DataGuard Standby DB when Primary Role
 *.REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
 *.LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
 *.LOG_ARCHIVE_MAX_PROCESSES=30
 
 *.db_name=ART
 *.db_unique_name=ART_SB
 *.instance_name=ART_SB
 *.LOG_ARCHIVE_CONFIG='DG_CONFIG=(ART,ART_SB)'
 
 *.LOG_ARCHIVE_DEST_1=
         'LOCATION=/u00/ART/ARC
         VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
         DB_UNIQUE_NAME=ART_SB'
 *.LOG_ARCHIVE_DEST_2=
         'SERVICE=ART LGWR ASYNC
         VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
         DB_UNIQUE_NAME=ART'
 *.LOG_ARCHIVE_DEST_STATE_1=ENABLE
 *.LOG_ARCHIVE_DEST_STATE_2=ENABLE
 
 # for DataGuard Standby DB when Standby Role
 *.FAL_SERVER=ART
 *.FAL_CLIENT=ART_SB
 #*.db_file_name_convert='/opt/ORA/oradata/ART_SB/','/opt/ORA/oradata/ART/'
 #*.log_file_name_convert='/opt/ORA/oradata/ART_SB/','/opt/ORA/oradata/ART/'
 *.standby_file_management=auto
 

 Standby DB Setup

datafile 및 logfile 생성

StandBy DB의 datafile 및 logfile은 Primary DB의 hot backup본을 copy해서 구성한다.
PrimaryDB에서
1. current log를 archiving한다.
 alter system archive log current;
 2. DB를 HOT BACKUP MODE로 변경한다.
 alter database begin backup;
 
 3. 모든 datafile를 standby db의 같은 위치로 복사한다.
 4. 모든 online redo log file를 standby db의 같은 위치로 복사한다.
 5. standby db용 control file를 생성한다.
 alter database create standby controlfile as '/tmp/ART4PSB.ctl';
 6. 생성된 standby db용 control file를 standby db의 control file위치로 복사한다.

ORACLE NET환경 설정

primary와 standby 서버 위치에서 모두 db_unique_name과 동일한 이름의 tnsnames.ora의 alias를 설정한다.
 

STANDBY LOGFILE생성

Maximum protection이나 Maximum Avalablility 모드의 경우 standby redo log file을 사용해야 한다.
이경우 primary 및 standby db에서 각각 group no와 size가 primary redo log와 동일하게 생성해야 한다.
alter database add standby logfile group 11 '/u01/oradata/ART/sb_redo01.log' size 100m;
 alter database add standby logfile group 12 '/u02/oradata/ART/sb_redo02.log' size 100m;
 alter database add standby logfile group 13 '/u03/oradata/ART/sb_redo03.log' size 100m;
 alter database add standby logfile group 14 '/u04/oradata/ART/sb_redo04.log' size 100m;
 alter database add standby logfile group 15 '/u01/oradata/ART/sb_redo05.log' size 100m;
 alter database add standby logfile group 16 '/u02/oradata/ART/sb_redo06.log' size 100m;
 alter database add standby logfile group 17 '/u03/oradata/ART/sb_redo07.log' size 100m;
 alter database add standby logfile group 18 '/u04/oradata/ART/sb_redo08.log' size 100m;
 alter database add standby logfile group 19 '/u01/oradata/ART/sb_redo09.log' size 100m;
 alter database add standby logfile group 20 '/u02/oradata/ART/sb_redo10.log' size 100m;
 alter database add standby logfile group 21 '/u03/oradata/ART/sb_redo11.log' size 100m;
 alter database add standby logfile group 22 '/u04/oradata/ART/sb_redo12.log' size 100m;

standby database 운영

alter database recover managed standby database disconnect;
 

SWITCHOVER

switchover는 기존의 Primary와 Standby가 서로 역할을 바꾸는 것을 말한다.

Pirmary에서 Standby로 역할 변경

1. Primary DB가 switch over가 가능한 지 확인한다.
SQL> select switchover_status from v$database;
 
 SWITCHOVER_STATUS
 --------------------
 SESSIONS ACTIVE
위 결과값은 TO STANBY가 아니면 현재 DB를 사용하는 사람이 있다는 의미이므로 이 상태에서는
SWITCHOVER가 불가능하다. 접속한 session이 없다면 job이 실행 중일 수 있으므로, job queue process를 0으로 주어
JOB이 실행되지 않도록 한다. 또한 10g의 경우처럼 em이 DB에 접속해 있을 경우가 있으므로 이도 종료한다.
SQL> alter system set job_queue_processes=0 scope=memory;
 
 System altered.
 
 $ emctl stop agent
 SQL> select switchover_status from v$database;
 
 SWITCHOVER_STATUS
 --------------------
 TO STANDBY
상태가 TO STANDBY이면 primary db를 standby db로 전환하고 mount 상태로 restart한다.
SQL> alter database commit to switchover to physical standby;
 SQL> alter database commit to switchover to physical standby;
 
 Database altered.
 
 SQL> shutdown immediate;
 ORA-01507: database not mounted
 
 
 ORACLE instance shut down.
 SQL> startup mount;
 ORACLE instance started.
DB의 상태를 확인해 보면 TO PRIMARY로 STANDBY 상태인 것을 확인한다.
SQL> select switchover_status from v$database;
 
 SWITCHOVER_STATUS
 --------------------
 TO PRIMARY

Standby에서 Primary로 역할 변경

1. 기존 Standby db에서 역할 변경이 가능한지 확인한다.
SQL> select switchover_status from v$database;
 
 SWITCHOVER_STATUS
 --------------------
 TO PRIMARY
 
2. primary db로 role를 변경한다.
SQL> alter database commit to switchover to primary;
 
 Database altered.
 
 
3. DB를 RESTART한다.
SQL> shutdown immediate;
 ORA-01109: database not open
 Database dismounted.
 ORACLE instance shut down.
 SQL> startup
 ORACLE instance started.
 
4.새로운 primary db의 automatic archiving을 점검한다.
SQL> alter system archive log current;
 
 System altered.
 
 SQL> select status,error from v$archive_dest where dest_id = 2;
 
 STATUS    ERROR
 --------- -----------------------------------------------------------------
 VALID
 
VALID면 성공적으로 ROLE변경이 되었다고 볼 수 있다.

새로운 STANDBY DB를 STANDBY 기능을 활성화

SQL> alter database recover managed standby database disconnect;
 
 Database altered.
 
 

 protection mode의 변경

상위모드로의 변경(UPGRADE)

1. redo apply방식을 변경한다.
alter system set log_archive_dest_2='service=ART_SB
 OPTIONAL LGWR SYNC AFFIRM
 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
 DB_UNIQUE_NAME=ART_SB'
 
2.mount 상태에서 mode를 변경한다.
SQL> shutdown immediate;
 SQL> startup mount;
 SQL> alter database set standby database to maximize protection;
 Database altered.
 SQL> alter database open;
 
3.db를 restart한다.
4. protection mode의 확인
SQL> select protection_mode,protection_level from v$database;
 
 PROTECTION_MODE      PROTECTION_LEVEL
 -------------------- --------------------
 MAXIMUM PROTECTION   MAXIMUM PROTECTION
 

하위모드로의 변경(DOWNGRADE)

1. Primary DB의 log_archive_dest_state_n을 defer로 변경
ALTER SYSTEM SET log_archive_dest_state_2=defer;
주의 protection mode에서는 아래 에러가 발생한다.
 ORA-02097: parameter cannot be modified because specified value is invalid
 ORA-16072: a minimum of one standby database destination is required
 
 protection mode에서는 shutdown/mount상태에서 변경해야 하남.
 
2. Primary DB의 log_archive_dest_n변경
alter system set log_archive_dest_2='service=ART_SB
 OPTIONAL LGWR ASYNC
 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
 DB_UNIQUE_NAME=ART_SB'
3.mode를 하위 모드로 변경한다.
SQL> alter database set standby database to maximize performance;
 Database altered.
4.Primay DB에서 LOG SWITH발생함
ALTER SYSTEM switch logfile;
 
 

 

반응형

'ORACLE > DataGuard' 카테고리의 다른 글

Oracle9i Dataguard 구성 방법  (0) 2009.02.23
Posted by [PineTree]