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;
|