Microsoft Word - dataguard_세미나_v1.8.doc

Similar documents
DATA GUARD GUIDE

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r

Tablespace On-Offline 테이블스페이스 온라인/오프라인

<4D F736F F D205BB4EBBBF3C1A4BAB8B1E2BCFA5DB1E2BCFAB9AEBCAD2D524D414EBBE7BFEBBFB9C1A65F39695F313067>

Slide 1

세미나(장애와복구-수강생용).ppt

Microsoft PowerPoint - Tech-iSeminar_Standby_DataGuard.ppt

Data Guard 기본개념.doc

목차 BUG offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate

목 차

ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE (Online Upgrade) ORANGE CONFIGURATION ADMIN O

62

PowerPoint Presentation

Advanced Product Service

슬라이드 1

Document Server Information Items Description Test Date 2011 / 05 / 31 CPU Intel(R) Xeon(R) CPU 2.40GHz X 8 Main Memory 1GB O/S version OEL 5.

슬라이드 1

Simplify your Job Automatic Storage Management DB TSC

Oracle 11gR2 RAC to RAC Active Dataguard

Contents Data Mart 1. 개요 실습방향 테스트위한사전설정 본격실습시작 ) 데이터파일 dd 명령어로 백업수행및유실시키기 ) 장애복구수행 결론...7 페이지 2 / 7

단계

큰 제목은 18 bold

오라클 데이터베이스 10g 핵심 요약 노트

MS-SQL SERVER 대비 기능

10.ppt

untitled

Microsoft Word - 10g RAC on Win2k.doc

Commit_Wait / Commit_Logging 두파라미터를통해 Log File Sync 대기시간을감소시킬수있다는것은놀라움과의아함을동시에느낄수있다. 단지파라미터의수정을통해당연히대기해야하는시간을감축한다는것은분명성능을개선해야하는입장에서는놀라운일이될것이다. 반면, 그에따

Tibero

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

소개 TeraStation 을 구입해 주셔서 감사합니다! 이 사용 설명서는 TeraStation 구성 정보를 제공합니다. 제품은 계속 업데이트되므로, 이 설명서의 이미지 및 텍스트는 사용자가 보유 중인 TeraStation 에 표시 된 이미지 및 텍스트와 약간 다를 수

Microsoft PowerPoint - Linux_10gRAC_3Node

데이터베이스_오라클_부록(최종).indd

Microsoft Word - CNVZNGWAIYSE.docx

Oracle Database 12c High Availability

단계

Oracle Database 10g: Self-Managing Database DB TSC

데이터베이스_오라클_부록(최종).indd

Microsoft Word - RMAN 스터디자료_공개용_ doc

13주-14주proc.PDF

Microsoft PowerPoint - Tech-iSeminar_Managing_Tablespace.ppt

Tina Admin

Contents 1. Oracle Recovery Manager(RMAN) RMAN이란? RMAN의특징 RMAN의 Channel과 Media Management RMAN CONFIGURE COMMAND.

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

最即時的Sybase ASE Server資料庫診斷工具

ALTIBASE HDB Patch Notes

PowerPoint Presentation

CD-RW_Advanced.PDF

The Self-Managing Database : Automatic Health Monitoring and Alerting

90

경우, TARGET 키워드 (AUXILIARY 키워드아님 ) 를사용하여반드시대기데이터베이스에접속해야 한다. 백업을수행하는동안, 대기데이터베이스는주데이터베이스를대체한다. 논리적대기데이터베이스의백업및복구주데이터베이스에서사용하는동일한방법으로논리적대기데이터베이스를백업할수있다.

Data Sync Manager(DSM) Example Guide Data Sync Manager (DSM) Example Guide DSM Copyright 2003 Ari System, Inc. All Rights reserved. Data Sync Manager

MySQL-Ch10

목차 BUG 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG ROLLUP/CUBE 절을포함하는질의는 SUBQUE

Microsoft Word - Oracle10gDB ±âº»¿î¿µÁöħ¼�.doc

제 목

MySQL-.. 1

DBMS & SQL Server Installation Database Laboratory

Oracle Regular Expression

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

구축환경 OS : Windows 7 그외 OS 의경우교재 p26-40 참조 Windows 의다른버전은조금다르게나타날수있음 Browser : Google Chrome 다른브라우저를사용해도별차이없으나추후수업의모든과정은크롬사용 한

Microsoft PowerPoint - 10Àå.ppt

NoSQL

Remote UI Guide

Oracle9i Real Application Clusters

Ark 사용자 가이드

ALTIBASE HDB Patch Notes

백업을수행하여야한다. 대기데이터베이스가활성화될때까지, 주데이터베이스를 FORCE LOGGING 모드로유지하여야만한다. - 만약, Data Guard 구조에서 ASM(Automatic Storage Management) 와 OMF(Oracle Managed Files)

1217 WebTrafMon II

Spring Boot/JDBC JdbcTemplate/CRUD 예제

윈도우시스템프로그래밍

HLS(HTTP Live Streaming) 이용가이드 1. HLS 소개 Apple iphone, ipad, ipod의운영체제인 ios에서사용하는표준 HTTP 기반스트리밍프로토콜입니다. 2. HLS 지원대상 - 디바이스 : iphone/ipad/ipod - 운영체제 :

PowerPoint 프레젠테이션

Spring Data JPA Many To Many 양방향 관계 예제

歯815설치1.PDF

PowerPoint Presentation

PCServerMgmt7


oracle9i_newfeatures.PDF

PRO1_09E [읽기 전용]

Jerry Held

문서 템플릿

개요오라클과티베로에서 JDBC 를통해접속한세션을구분할수있도록 JDBC 접속시 ConnectionProperties 를통해구분자를넣어줄수있다. 하나의 Node 에다수의 WAS 가있을경우 DB 에서 Session Kill 등의동작수행시원하는 Session 을선택할수있다.

untitled

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

Oracle hacking 작성자 : 임동현 작성일 2008 년 10 월 11 일 ~ 2008 년 10 월 19 일 신규작성 작성내용

목차 1. 제품 소개 특징 개요 Function table 기능 소개 Copy Compare Copy & Compare Erase

개발및운영 Tibero DB Link (Tibero To Oracle) - Local 방식

Analyze Connection Failover Options.ppt


vm-웨어-01장

Tibero

FlashBackt.ppt

문서 제목

6주차.key

PowerChute Personal Edition v3.1.0 에이전트 사용 설명서

강의 개요

Web Application Hosting in the AWS Cloud Contents 개요 가용성과 확장성이 높은 웹 호스팅은 복잡하고 비용이 많이 드는 사업이 될 수 있습니다. 전통적인 웹 확장 아키텍처는 높은 수준의 안정성을 보장하기 위해 복잡한 솔루션으로 구현

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

Transcription:

Oracle9i Dataguard 기술서 작성일 : 2005년 3월 24일업데이트 : 2006년 1월 22일 v1.8 Final 작성자 : LG카드중형서버운영파트 DBA 민연홍 Phone : 016-744-0220 E-Mail : ses0124@hanmail.net 목 차 1. dataguard 개요및아키텍처...2 (1) dataguard 란무엇인가?...2 (2) switchover and failover...2 (3) standby DB의종류...2 (4) dataguard의서비스종류...2 (5) protection mode...3 (6) dataguard의시스템구성 (2가지종류 )...3 2. standby DB 기동방법...5 3. 시스템구축 ( 실습 )...6 (1) 리스너설정및기동...6 (2) tnsnames.ora 설정...7 (3) 오라클초기화파라미터설정...7 (4) primary DB를 online backup으로 standby DB 위치로 restore...9 (5) primary DB에서 standby control file을생성해서 standby DB로전송... 10 (6) standby DB에서사용할 control file을배치... 10 (7) standby DB 기동... 10 (8) standby DB에 standby redo log file 생성... 11 (9) primary DB에 standby redo log file 생성... 11 (10) standby DB를 recovery managed mode로기동... 12 (11) log switch 적용... 12 (12) primary DB 점검... 12 (13) standby DB 점검... 14 (14) primary DB 테이블스페이스생성및데이터입력... 15 (15) standby DB예데이터입력여부확인... 15 (16) takeover 하기... 16 (17) 서비스원복 (takeover)... 18 (18) failover 하기... 19

1. dataguard 개요및아키텍처 (1) dataguard 란무엇인가? - primary DB와 standby DB를동기화시켜, primary DB가하드웨어장애등의문제가생겼을경우 standby DB로 failover 또는 switchover 시킬수있는시스템구성을말한다. - Oracle Net을통해서 primary DB의변경정보를 standby DB로적용시켜운영된다. (2) switchover and failover 1 자동실행이아니라 DBA가 action을취해야한다. 2 switchover - OS 작업또는서버 PM작업시사용 (primary -> standby, standby -> primary) 3 failover - 디스크 fail 등긴급상황에서사용, dataguard 재구성필요 (3) standby DB의종류 1 Physical standby database - block 대 block 기반으로 primary DB의 redo log를적용시켜 standby DB를동기화 2 Logical standby database - 같은 schema 정의로공유 - primary DB의 sql 문장을 standby DB에적용 (4) dataguard의서비스종류 1 Log transport Services - primary DB에서 standby DB로 redo log 정보를자동으로전송 2 Log Apply Services - redo log를 standby DB에적용 3 Role Management Service

- 데이터베이스는 primary/standby로두가지의상대적으로배타적인 role을가진다. Role Management Service는 log transport service와 log apply service를 failover 또는 switchover의상황에동적으로변경할수있다. (5) protection mode 1 Maximum Protection - primary DB와 standby DB의 redo log를동기화시킨다. standby DB가네트워크이상등의이유로 standby로의전송이안될경우 primary DB를 halt시킨다. 데이터는서로동기화되어 primary DB에서 commit을하게되면 standby DB에서 commit이완료될때까지 primary DB에서 commit 완료를하지않는다. 성능에는문제를줄소지가있으나 failover 상황이오더라도데이터손실은없다. physical standby DB에만가능하다. 2 Maximum availability - Maximum Protection 과마찬가지로 primary DB와 standby DB를동기화시킨다. 단 standby DB가네트워크문제등의이유로전송이안될지라도 halt되지는않는다. 데이터는 maximum protection 과마찬가지로 primary DB에서 commit을하게되면 standby DB 에서 commit이완료될때까지 primary DB에서 commit 완료를하지않는다. 만약 standby DB가 unavailable상태일경우임시로불일치시킨다. 또다시 standby DB가 available하면자동으로동기화시킨다. 성능에는문제를줄소지가있으나 failover 상황이오더라도데이터손실은거의없다. physical standby, logical standby DB 모두가능하다. 3 Maximum Performance - default protection mode이다. primary data에대한 protection 이가장낮다. primary database에 transaction이수행되면이것을 asynchronous 하게 standby DB에적용한다. 즉, maximum protection, maximum availability의경우에는 standby DB에적용 (commit) 될때까지 primary db의 transaction 이적용 (commit) 되지않았으나, Maximum Performance 모드에서는비동기화시키므로 primary DB에서 standby DB가 transaction 적용이끝날때까지기다리지않는다. 즉 standby db의문제로인해서 primary DB에성능영향이가지않는다. 단, failover시에는약간의데이터손실을가져올수있다. (6) dataguard의시스템구성 (2가지종류 ) 1 physical standby database 구성 (LGWR processes를사용한 Physical standby DB) Archiving to a Physical standby Destination Using the Logwriter Process

- primary db의 LGWR 프로세스가 standby DB로 redo log를보내고, standby db의 RFS 프로세스가이 redo log를 standby redo log에적용시킨다. archiving되면 archived redo logs가되고이것을 MRP process가 standby DB에적용시킨다. 2 logical standby DB 구성 Archiving to a Logical standby Destination Using the Logwriter Process - logical standby DB는 primary DB에서수행된 SQL문장을 LGWR프로세스가 standby DB로보내고 RFS 프로세스가받아서 Archived redo logs에쓴다. LSP (Logical standby process) 가 standby DB에적용시킨다. - primary DB에서 log switch가일어나게되면 standby DB의 RFS 프로세스에이를알려주어 log switch가되도록한다.

2. standby DB 기동방법 - 주의 standby db 의 startup 방식을보면아래와같다. 아래그림을기억해두면편하다. recovery managed mode open read only mount standby db nomount shutdown 1 standby DB를 read only mode에서 managed recovery mode로변경 - 그대로명령또는 shutdown immediate 이후재기동 - 첫번째방법 SQL> alter database open read only; SQL> recover managed standby database disconnect; SQL> - 두번째방법 SQL> shutdown immediate Database dismounted. SQL> startup nomount SQL> alter database mount standby database; SQL> recover managed standby database disconnect; 2 shutdown 에서 managed recovery mode 로변경 SQL> startup nomount SQL> alter database mount standby database; SQL> recover managed standby database disconnect; 3 managed recovery mode 에서 read only mode 로변경 SQL> recover managed standby database cancel; SQL> alter database open read only; 4 read only standby DB 에서 managed recovery mode 로변경

( 먼저 standby DB에연결된모든세션을종료 ) SQL> recover managed standby database disconnect; - 만약유저의세션때문에실패할경우 SQL> shutdown immediate SQL> startup nomount SQL> alter database mount standby database; SQL> recover managed standby database disconnect; 3. 시스템구축 ( 실습 ) - primary db이름은 MIN 이고, standby db이름은 STBY 이다. - 여기서는하나의서버에서 2개 DB를구성하는방법으로수행한다. - 2개서버에서도똑같이수행할수있다. - primary DB는 /data1/oradata/min 에구성되어있다. - standby DB는 /data1/oradata/stby에구성되어있다. (1) 리스너설정및기동아래와같은네트워크설정을해준다. 각서버마다설정해준다. - MIN DB에서설정 (primary DB) vi $ORACLE_HOME/network/admin/listener.ora smsvr1_min = (ADDRESS_LIST = (ADDRESS= (PROTOCOL= TCP)(Host= smsvr1)(port=2001)) ) SID_LIST_smsvr1_MIN = (SID_LIST = (SID_DESC = (ORACLE_HOME= /u/pkg/oracle/ora9i/app/oracle/product/9.2.0) (SID_NAME = MIN) ) ) - STBY DB 에서설정 (physical standby DB) vi $ORACLE_HOME/network/admin/listener.ora smsvr1_stby = (ADDRESS_LIST = (ADDRESS= (PROTOCOL= TCP)(Host= smsvr1)(port=2002)) ) SID_LIST_smsvr1_STBY =

(SID_LIST = (SID_DESC = (ORACLE_HOME= /u/pkg/oracle/ora9i/app/oracle/product/9.2.0) (SID_NAME= STBY) ) ) (2) tnsnames.ora 설정 tnsnames.ora 파일을설정한다. 서로네트워크가가능하도록하는데이름을재대로써야한다. log_archvie_dest_2='service=stby LGWR SYNC AFFIRM' 일경우 STBY 는 tnsnames.ora 에서의접속이름을말한다. - MIN DB 설정 primary DB에서설정 ( standby DB로가는네트워크구성 ) vi $ORACLE_HOME/network/admin/tnsnames.ora STBY = (DESCRIPTION = (ADDRESS = (PROTOCOL= TCP)(Host= smsvr1)(port= 2002)) (CONNECT_DATA = (SID = STBY)) ) - STBY DB 설정, standby DB에서설정 (primary DB로가는네트워크구성 ) vi $ORACLE_HOME/network/admin/tnsnames.ora MIN = (DESCRIPTION = (ADDRESS = (PROTOCOL= TCP)(Host= smsvr1)(port=2001)) (CONNECT_DATA = (SID = MIN)) ) (3) 오라클초기화파라미터설정 - MIN DB (primary DB) vi $ORACLE_HOME/dbs/initMIN.ora db_name=min compatible=9.2.0 control_files=('/data1/oradata/min/control01.ctl','/data1/oradata/min/control02.ctl') shared_pool_size=64m db_cache_size=16m undo_management=auto background_dump_dest=/data1/oradata/min/bdump

user_dump_dest=/data1/oradata/min/udump core_dump_dest=/data1/oradata/min/cdump log_archive_start=true log_archive_dest_1="location=/data1/oradata/min/archive1" log_archive_format=%t_%s.arc #### 데이터가드를위해서변경하지말것 remote_archive_enable=true dg_broker_start=true log_archive_dest_state_1=enable log_archive_max_processes=3 standby_file_management=auto db_file_name_convert='/data1/oradata/stby','/data1/oradata/min' log_file_name_convert='/data1/oradata/stby','/data1/oradata/min' standby_archive_dest='/data1/oradata/min/archive2' ##### standby DB이면열고, primary DB이면닫는다. #fal_server=stby #fal_client=min #lock_name_space=stby ## primary DB이면열고, standby DB이면닫는다. log_archive_dest_2='service=stby LGWR SYNC' - STBY DB (standby DB) - 주의할것은 DB 이름은 MIN 이다. instance 이름만 STBY 이다. vi $ORACLE_HOME/dbs/initSTBY.ora db_name=min compatible=9.2.0 control_files=('/data1/oradata/stby/control01.ctl','/data1/oradata/stby/control02.ctl') shared_pool_size=64m db_cache_size=16m undo_management=auto background_dump_dest=/data1/oradata/stby/bdump user_dump_dest=/data1/oradata/stby/udump core_dump_dest=/data1/oradata/stby/cdump log_archive_start=true log_archive_dest_1="location=/data1/oradata/stby/archive1" log_archive_format=%t_%s.arc

### 데이터가드를위해서변경하지말것 remote_archive_enable=true dg_broker_start=true log_archive_dest_state_1=enable log_archive_max_processes=3 standby_file_management=auto db_file_name_convert='/data1/oradata/min','/data1/oradata/stby' log_file_name_convert='/data1/oradata/min','/data1/oradata/stby' standby_archive_dest='/data1/oradata/stby/archive2' ## standby DB일경우아래를열기, primary DB일경우닫기 fal_server=min fal_client=stby lock_name_space=stby ##primary DB이면열고, standby DB이면닫는다. #log_archive_dest_2='service=min LGWR SYNC' - 파라미터설정에서주의해야할것을먼저보면, standby_file_management=auto 로되어있어야 primary DB에서수행한물리적인테이블스페이스추가및데이터파일추가시 standby DB에자동으로생성이된다. standby_file_management=auto로되어있을경우 db_file_name_convert='/data1/oradata/stby','/data1/oradata/min' log_file_name_convert='/data1/oradata/stby','/data1/oradata/min' 의파라미터에서 ' A 부분 ','B 부분 ' 에서 B부분이자신의 primary DB의경로를말하고 A부분이변환할 standby DB의경로를말한다. 파라미터를확인해보자. fal_server, fal_client 는 standby DB에서만사용한다. fal_server는 primary DB를설정하고 fal_client는 standby DB를설정해둔다. 이것을설정할경우 primary DB와 standby DB에 redo log 의 gap이발생했을경우자동으로맞추어주는역할을한다. fal_server=min fal_client=stby lock_name_space는한대의서버에서 primary, standby DB를운영할경우사용한다. primary, standby DB 모두 db_name은같다. 단 instance_name만다를뿐이며똑같은 DB이름을가진 instance가 startup 하기위해서는 lock_name_space를지정해주어야한다. 이것은 standby DB에서만지정해둔다. lock_name_space=stby (4) primary DB를 online backup으로 standby DB 위치로 restore <MIN DB primary DB> - primary DB를 DB를 online backup으로이동. online backup을하는것이므로 primary DB의 redo log는 standby DB로전송하지않는다. standby DB구성시자동으로 redo log가생성된다.

- primary DB는 24시간서비스이므로 shutdown 이불가능한것을가정하에구성한다. SQL> select tablespace_name, file_name, bytes/1024/1024 mega from dba_data_files; TABLESPACE_NAME FILE_NAME MEGA ---------------- ------------------------------------------------------------ ---------- SYSTEM /data1/oradata/min/system01.dbf 250 UNDOTBS /data1/oradata/min/undotbs.dbf 100 USERS /data1/oradata/min/users01.dbf 100 SQL> select name, bytes/1024/1024 mega from v$tempfile; NAME MEGA ------------------------------ ---------- /data1/oradata/min/temp01.dbf 100 - 여기서는 cp 명령이 standby DB로전송하는것을뜻한다. ftp로 primary db의백업을전송한다. SQL> alter tablespace system begin backup; SQL>!cp /data1/oradata/min/system01.dbf /data1/oradata/stby/system01.dbf SQL> alter tablespace system end backup; SQL> alter tablespace undotbs begin backup; SQL>!cp /data1/oradata/min/undotbs.dbf /data1/oradata/stby/undotbs.dbf SQL> alter tablespace undotbs end backup; SQL> alter tablespace users begin backup; SQL>!cp /data1/oradata/min/users01.dbf /data1/oradata/stby/users01.dbf SQL> alter tablespace users end backup; - tempfile은그대로복사를한다. begin backup, end backup 이필요없다. 단 tempfile 이어야한다. SQL>!cp /data1/oradata/min/temp01.dbf /data1/oradata/stby/temp01.dbf (5) primary DB에서 standby control file을생성해서 standby DB로전송 <MIN DB primary DB> primary DB에서 standby control file을생성해서 standby DB로전송 SQL> alter database create standby controlfile as '/data1/oradata/stby/stbyctl.ctl'; (6) standby DB에서사용할 control file을배치 <STBY DB standby DB의 control file에서 > standby DB에서사용할 control file을 initstby.ora 파일에있는 control file 위치에배치를한다. SQL>!cp /data1/oradata/stby/stbyctl.ctl /data1/oradata/stby/control01.ctl SQL>!cp /data1/oradata/stby/stbyctl.ctl /data1/oradata/stby/control02.ctl (7) standby DB 기동 <STBY DB standby DB 에서수행 > standby DB를기동시킨다. startup mount standby database 라는명령은없다.

nomount까지기동한후 standby DB로 mount를하고 recovery managed mode로 MRP 프로세스를기동시켜야한다. SQL> startup nomount SQL> alter database mount standby database; (8) standby DB에 standby redo log file 생성 <STBY DB standby DB 에서수행 > 우리는처음으로 standby DB를구성하였으므로 standby redo log를확인해서넣어주어야한다. 이후에는새로만들필요가없다. SQL> select * from v$logfile; GROUP# STATUS TYPE MEMBER ---------- ------- ------- ---------------------------------------- 1 ONLINE /data1/oradata/stby/log01a.log 2 ONLINE /data1/oradata/stby/log02a.log 3 ONLINE /data1/oradata/stby/log03a.log SQL> alter database add standby logfile '/data1/oradata/stby/stbylog01a.log' size 10M; SQL> alter database add standby logfile '/data1/oradata/stby/stbylog02a.log' size 10M; SQL> alter database add standby logfile '/data1/oradata/stby/stbylog03a.log' size 10M; SQL> select * from v$logfile; GROUP# STATUS TYPE MEMBER ---------- ------- ------- ---------------------------------------- 1 ONLINE /data1/oradata/stby/log01a.log 2 ONLINE /data1/oradata/stby/log02a.log 3 ONLINE /data1/oradata/stby/log03a.log 4 STANDBY /data1/oradata/stby/stbylog01a.log 5 STANDBY /data1/oradata/stby/stbylog02a.log 6 STANDBY /data1/oradata/stby/stbylog03a.log (9) primary DB에 standby redo log file 생성 <MIN DB primary DB 에서수행 > 서버문제가발생했을경우 takeover를해야하므로 primary db도 standby DB가될수있기때문에미리 standby redo log를만든다. SQL> select * from v$logfile; GROUP# STATUS TYPE MEMBER ---------- ------- ------- ----------------------------------------

1 ONLINE /data1/oradata/min/log01a.log 2 ONLINE /data1/oradata/min/log02a.log 3 ONLINE /data1/oradata/min/log03a.log SQL> alter database add standby logfile '/data1/oradata/min/stbylog01a.log' size 10M; SQL> alter database add standby logfile '/data1/oradata/min/stbylog02a.log' size 10M; SQL> alter database add standby logfile '/data1/oradata/min/stbylog03a.log' size 10M; SQL> select * from v$logfile; GROUP# STATUS TYPE MEMBER ---------- ------- ------- ---------------------------------------- 1 ONLINE /data1/oradata/min/log01a.log 2 ONLINE /data1/oradata/min/log02a.log 3 ONLINE /data1/oradata/min/log03a.log 4 STANDBY /data1/oradata/min/stbylog01a.log 5 STANDBY /data1/oradata/min/stbylog02a.log 6 STANDBY /data1/oradata/min/stbylog03a.log (10) standby DB를 recovery managed mode로기동 <STBY DB standby DB 에서수행 > standby DB를 recovery managed mode로변경한다. MRP 프로세스가생긴다. SQL> recover managed standby database disconnect; (11) log switch 적용 <MIN DB primary DB 에서수행 > standby DB를구성하는동안 primary DB와 gap이생겼을것이다. Current redo log를적용시킨다. SQL> alter system archive log current; (12) primary DB 점검 SQL> select i.instance_name, i.status instance_status, d.name dbname, d.database_role db_role, d.switchover_status switchover_status, d.protection_mode from v$database d, v$instance i; => 중요한점검포인트이다. Switchover_Status가 TO_STANDBY 이어야한다. INSTANCE_NAME INSTANCE_STA DBNAME DB_ROLE SWITCHOVER_STATUS PROTECTION_MODE ---------------- ------------ --------- ---------------- ------------------ -------------------- MIN OPEN MIN PRIMARY TO STANDBY MAXIMUM PERFORMANCE

SQL> select dest_id id,database_mode db_mode,recovery_mode, protection_mode,standby_logfile_count "SRLs", standby_logfile_active ACTIVE, archived_seq# from v$archive_dest_status; ==> 2번째로설정한곳에 mounted_standby 이어야하고 MANAGED MODE 이어야한다. ID DB_MODE RECOVER PROTECTION_MODE SRLs ACTIVE ARCHIVED_SEQ# --- --------------- ------- -------------------- ---- ------ ------------- 1 OPEN IDLE MAXIMUM PERFORMANCE 0 0 99 2 MOUNTED-STANDBY MANAGED RESYNCHRONIZATION 3 0 96 3 OPEN IDLE MAXIMUM PERFORMANCE 0 0 0 SQL> select process, status from v$managed_standby; ==> 우리는파라미터에서 LGWR 프로세스가 standby DB로전송하도록하였다. PROCESS STATUS ------- ------------ ARCH CLOSING ARCH CLOSING LGWR WRITING SQL> select dest_id "ID",destination,status,target, schedule,process,mountid mid from v$archive_dest order by dest_id; => destination 2번에우리는 service=stby로설정하였다. STBY는 tnsnames.ora 에나오는접속이름이었다. STATUS=VALID 상태이고 STANDBY 이어야한다. ID DESTINATION STATUS TARGET SCHEDULE PROCESS MID --- ----------------------------------- --------- ------- -------- ------- --- 1 /data1/oradata/min/archive1 VALID PRIMARY ACTIVE ARCH 0 2 STBY VALID STANDBY ACTIVE LGWR 0 3 INACTIVE PRIMARY INACTIVE ARCH 0 SQL> select dest_id,status,error from v$archive_dest; => archive dest 가유효해야한다. 1번 2번 destination 모두 valid상태이어야한다. DEST_ID STATUS ERROR -------- --------- ------------------------------------------------------- 1 VALID 2 VALID 3 INACTIVE

SQL> select message, timestamp from v$dataguard_status where severity in ('Error','Fatal') order by timestamp; => 아무런에러도나와서는안된다. 여기에서에러가났다면 primary DB를먼저기동하고 standby DB를기동했을경우발생할수도있으나, standby로전송이안된것일수도있으므로다른것도확인을해보아야한다. 만약 standby DB를먼저기동하고 recovery managed mode에서 MRP 프로세스를띄우고그리고나서야 primary DB를기동시켰다면아래에서는아무런메세지도나와서는안된다. 예제에서는 primary DB를먼저기동했으므로메세지가발생했을것이다. MESSAGE TIMESTAMP ------------------- -------------------- SQL> select dest_id id,database_mode db_mode,recovery_mode, protection_mode,standby_logfile_count "SRLs", standby_logfile_active ACTIVE, archived_seq# from v$archive_dest_status; ==> db_mode가 MOUNTED_STANDBY 이어야한다. recovery_mode 가 managed가되어있어야 primary DB에서전송된 redo log정보를 standby DB에적용시킬수있다. ID DB_MODE RECOVER PROTECTION_MODE SRLs ACTIVE ARCHIVED_SEQ# --- --------------- ------- -------------------- ---- ------ ------------- 1 OPEN IDLE MAXIMUM PERFORMANCE 0 0 45 2 MOUNTED-STANDBY MANAGED MAXIMUM AVAILABILITY 2 0 45 3 OPEN IDLE MAXIMUM PERFORMANCE 0 0 0 (13) standby DB 점검 SQL> select i.instance_name, i.status instance_status, d.name dbname, d.database_role db_role, d.switchover_status switchover_status, d.protection_mode from v$database d, v$instance i; => STANDBY 이어야한다. INSTANCE_NAME INSTANCE_STA DBNAME DB_ROLE SWITCHOVER_STATUS PROTECTION_MODE ---------------- ------------ --------- ---------------- ------------------ -------------------- STBY MOUNTED MIN PHYSICAL STANDBY NOT ALLOWED MAXIMUM PERFORMANCE SQL> select process, status from v$managed_standby; => 꼭 MRP 프로세스가띄워져있어야한다. PROCESS STATUS ------- ------------ ARCH CONNECTED

ARCH ARCH MRP0 RFS RFS CONNECTED CONNECTED WAIT_FOR_LOG RECEIVING ATTACHED (14) primary DB 테이블스페이스생성및데이터입력 <MIN DB primary DB> test 테이블스페이스를만들고테이블을만들고데이터를넣어본다. 주의할것은 db_file_name_convert 에서나오는것처럼 /data1/oradata/min 안에만생성을해야한다. 그래야 standby DB에데이터파일이자동으로생기게된다. 또한파라미터에서 standby_file_management=auto로되어있어야 standby DB에테이블스페이스의데이터파일이생긴다. SQL> create tablespace test datafile '/data1/oradata/min/test01.dbf' size 10M; SQL> select tablespace_name, file_name, bytes/1024/1024 mega from dba_data_files; TABLESPACE FILE_NAME MEGA ---------- ---------------------------------------- ---------- SYSTEM /data1/oradata/min/system01.dbf 250 UNDOTBS /data1/oradata/min/undotbs.dbf 100 USERS /data1/oradata/min/users01.dbf 100 TEST /data1/oradata/min/test01.dbf 10 SQL> create table test (id number(10),name varchar2(30)) tablespace users; SQL> insert into test values (1,'min1'); SQL> commit; - archive를적용시킨다. SQL> alter system archive log current; SQL> alter system archive log current; (15) standby DB예데이터입력여부확인 <STBY DB standby DB> - primary DB에서만든테이블스페이스가있는지데이터는들어갔는지확인한다. recovery managed mode를해제하고 read only로 open한다. SQL> recover managed standby database cancel; SQL> alter database open read only; ==> 정상적으로 primary DB에서만든테이블스페이스가적용되었으며, test 라는테이블에데이터 insert가정상적으로된것을확인할수있다.

SQL> select tablespace_name, file_name, bytes/1024/1024 mega from dba_data_files; TABLESPACE FILE_NAME MEGA ---------- ---------------------------------------- ---------- SYSTEM /data1/oradata/stby/system01.dbf 250 UNDOTBS /data1/oradata/stby/undotbs.dbf 100 USERS /data1/oradata/stby/users01.dbf 100 TEST /data1/oradata/stby/test01.dbf 10 SQL> select * from test; ID NAME ---------- ------------------------------ 1 min1 - 다시 recovery managed mode로만들어서 primary 에서전송된 redo log 정보가 standby DB에 적용되도록한다. fal_server, fal_client 파라미터가설정되어있으므로자동으로 gap이생긴부분을맞 추어준다. DB를 open 상태에서도 recovery managed mode로변경이가능하다. SQL> recover managed standby database disconnect; (16) takeover 하기시스템문제가발생하였다. takeover를수행한다. 1 <MIN DB primary DB> 가장먼저 primary DB에서 standby로변경을한후 standby DB를 standby DB로변경해야한다. 왜냐하면 standby DB를 primary로변경하면 hang 상태로 primary DB가 standby DB가될때까지기다리게된다. primary DB를 shutdown 한다. SQL> alter database commit to switchover to physical standby with session shutdown wait; SQL> shutdown immediate 2 <STBY DB standby DB> standby DB를 primary DB로바꾸고 shutdown 한다. 유저접속은없으므로 with session shutdown 절은안들어가도된다. SQL> alter database commit to switchover to primary; SQL> shutdown immediate 3 파라미터를변경한다. # 을붙인것을빼거나추가해서설정해준다. 실환경에서는파라미터를따로만들어서스크립트로수행하는것도좋겠다. <MIN DB primary DB> vi $ORACLE_HOME/dbs/initMIN.ora < 변경전 > #####standby DB이면열고, primary DB이면닫는다. #fal_server=stby #fal_client=min #lock_name_space=stby

##primary DB이면열고, standby DB이면닫는다. log_archive_dest_2='service=stby LGWR SYNC' < 변경후 > #####standby DB이면열고, primary DB이면닫는다. fal_server=stby fal_client=min lock_name_space=stby ##primary DB이면열고, standby DB이면닫는다. #log_archive_dest_2='service=stby LGWR SYNC' <STBY DB standby DB> vi $ORACLE_HOME/dbs/initSTBY.ora < 변경전 > ##standby 이면열고, primary DB이면닫는다. fal_server=min fal_client=stby lock_name_space=stby ##primary DB이면열고, standby DB이면닫는다. #log_archive_dest_2='service=min LGWR SYNC' < 변경후 > ##standby 이면열고, primary DB이면닫는다. #fal_server=min #fal_client=stby #lock_name_space=stby ##primary DB이면열고, standby DB이면닫는다. log_archive_dest_2='service=min LGWR SYNC' 4 < MIN DB, new standby DB > - 새롭게 standby DB가된 MIN DB를 recovery managed mode로변경한다. SQL> startup nomount SQL> alter database mount standby database; SQL> recover managed standby database disconnect; SQL> select process, status from v$managed_standby; ==> MRP 프로세스기동확인

PROCESS STATUS ------- ------------ ARCH ARCH MRP0 RFS RFS CONNECTED CONNECTED WAIT_FOR_LOG WRITING ATTACHED 5 < STBY DB, new primary DB > - new primary DB를기동한다. SQL> startup - 확인하기 SQL> select i.instance_name, i.status instance_status, d.name dbname, d.database_role db_role, d.switchover_status switchover_status, d.protection_mode from v$database d, v$instance i; => 중요한점검포인트이다. TO_STANDBY 인지확인한다. INSTANCE_NAME INSTANCE_STA DBNAME DB_ROLE SWITCHOVER_STATUS PROTECTION_MODE ---------------- ------------ --------- ---------------- ------------------ ------------------- STBY OPEN MIN PRIMARY TO STANDBY MAXIMUM PERFORMANCE SQL> select dest_id id,database_mode db_mode,recovery_mode, protection_mode,standby_logfile_count "SRLs", standby_logfile_active ACTIVE, archived_seq# from v$archive_dest_status; ID DB_MODE RECOVER PROTECTION_MODE SRLs ACTIVE ARCHIVED_SEQ# --- --------------- ------- -------------------- ---- ------ ------------- 1 OPEN IDLE MAXIMUM PERFORMANCE 0 0 109 2 MOUNTED-STANDBY MANAGED MAXIMUM AVAILABILITY 3 0 109 3 OPEN IDLE MAXIMUM PERFORMANCE 0 0 0 (17) 서비스원복 (takeover) 다시원복을시킨다. STBY DB를 standby DB로변경한후 MIN DB를 primary DB로변경한다. <STBY DB new primary DB> - primary DB를 standby DB로만들고나서 standby DB를 physical standby 만든다. 순서를잊지말자. SQL> alter database commit to switchover to physical standby with session shutdown wait; SQL> shutdown immediate <MIN DB new standby DB> - MIN DB를 primary DB로변경한다.

SQL> alter database commit to switchover to primary ; SQL> shutdown immediate <MIN DB primary DB> - 초기화파라미터를변경한다. vi $ORACLE_HOME/dbs/initMIN.ora < 원복시킨다 > #####standby DB이면열고, primary DB이면닫는다. #fal_server=stby #fal_client=min #lock_name_space=stby ##primary DB이면열고, standby DB이면닫는다. log_archive_dest_2='service=stby LGWR SYNC' <STBY DB standby DB> vi $ORACLE_HOME/dbs/initSTBY.ora < 원복시킨다 > ##standby 이면열고, primary DB이면닫는다. fal_server=min fal_client=stby lock_name_space=stby ##primary DB이면열고, standby DB이면닫는다. #log_archive_dest_2='service=min LGWR SYNC' <STBY DB standby DB> - standby DB를먼저기동시킨다. SQL> startup nomount SQL> alter database mount standby database; SQL> recover managed standby database disconnect; <MIN DB primary DB> - primary DB를기동시킨다. SQL> startup (18) failover 하기 primary DB가디스크이상으로인해서 DB 데이터파일이손상되었다. standby DB를긴급하게기동시켜야한다. MIN DB를 shutdown abort로 Down시키고, standby DB를 primary DB로기동시킨다. Failover을한후에시스템을복구해서 MIN DB를 primary DB, STBY DB를 standby DB로

원래대로구성하려면 Dataguard를재구성해야한다. 즉, failover을했다면 failover이후에 New primary DB인 STBY DB를통해서 MIN DB를 standby DB로구성하고 takeover 시키면되겠다. <MIN DB primary DB> SQL> shutdown abort <STBY DB standby DB> - recovery managed mode를해제가아닌끝내도록한다. primary DB로변경한다. SQL> recover managed standby database finish; SQL> alter database commit to switchover to primary; - 파라미터를변경후 startup 시킨다. < 주의 > 만약 New standby DB인 STBY DB까 failover가정상적으로수행되지않으면서 recovery 하라고나온다면? 이럴경우엔아래와같은명령을쓰도록한다. standby redo log가 gap이많이있는데 standby DB에적용하지못한경우에발생할수있다. 이때에는 skip하는만큼의 gap을 DB에적용하지못할수있다. SQL> alter database recover managed standby database finish skip wait; SQL> alter database commit to switchover to primary; $ORACLE_HOME/dbs/initSTBY.ora 파일에서 primary DB로파라미터를설정하고기동한다. SQL> startup ------------------------- 끝 -----------------------