31
2013. 02. Seungtaek Lee(放浪DBA) 사례를 통해 RMAN (RMAN Case Study)

RMAN - · PDF file3 RMAN은 BEGIN/END Command 없이 백업을 수행하기 때문에 Block Image 같은 추가 Redo가 발생하지 않음 RMAN은 Full Backup 뿐만

  • Upload
    hadan

  • View
    268

  • Download
    8

Embed Size (px)

Citation preview

2013. 02.

Seungtaek Lee(放浪DBA)

사례를 통해 본

RMAN

(RMAN Case Study)

2

Target DB : 백업 대상 DB

Catalog DB : 백업 정보가 저장되는 RMAN Repository DB

Auxiliary DB : 백업 또는 Target DB를 Restore하여 여러 가지 용도로 사용하는 DB

Channel : Target DB에 Server Session을 할당하여 실제 백업/복구를 수행하게 하는 역할

대부분의 RMAN Command는 Channel을 통하여 수행함

MML : RMAN Tape 백업 시 필요한 Library

2

RMAN 백업 X. RMAN

Server-Managed Backup(RMAN) Components

Server Session

Server Session

channel channel

Target DB

RMAN

Connect

Catalog DB

Connect

Auxiliary DB

Connect

Server Session

channel

MML

3

RMAN은 BEGIN/END Command 없이 백업을 수행하기 때문에 Block

Image 같은 추가 Redo가 발생하지 않음

RMAN은 Full Backup 뿐만 아니라 Block 레벨의 Incremental Backup,

Compressed Backup 등 다양한 방식의 백업을 지원

RMAN은 백업시에 Data File의 Header Block부터 백업을 수행하기 때문

에 User-Managed Backup 방식과 달리 Header Block의 Checkpoint SCN

을 고정시키지 않음. 복구 시 Redo Log 적용을 Header Block의

Checkpoint SCN 시점부터 복구를 시작

RMAN 백업은 End Backup을 수행하지 않기 때문에 백업시에 Redo Log

최소 적용 시점 정보인 Absolute Fuzzy SCN값을 백업 Data File Header

에 기록

Absolute Fuzzy SCN은 백업 Data File의 Block SC값 중 가장 큰 SCN

3

RMAN 백업 X. RMAN

Header SCN

Block 1 SCN

Block 2 SCN

Block 3 SCN

Block 4 SCN

Block 5 SCN

38 37 39 37 38 36

Header SCN

Block 1 SCN

Block 2 SCN

Block 3 SCN

Block 4 SCN

Block 5 SCN

38 37 34 37 38 36

Header SCN

Block 1 SCN

Block 2 SCN

Block 3 SCN

Block 4 SCN

Block 5 SCN

36 37 34 37 35 35

Header SCN

Block 1 SCN

Block 2 SCN

Block 3 SCN

Block 4 SCN

Block 5 SCN

36 34 34 35 35 35

Header SCN

Block 1 SCN

Block 2 SCN

Block 3 SCN

Block 4 SCN

Block 5 SCN

31 30 34 30 34 34

Block 1 SCN

Block 2 SCN

Block 3 SCN

Block 4 SCN

Block 5 SCN

Header SCN

34 34 37 38 36 36 38

Block 1 SCN

Block 2 SCN

Block 3 SCN

Block 4 SCN

Block 5 SCN

34 34 37 38 36

Block 1 SCN

Block 2 SCN

Block 3 SCN

Block 4 SCN

34 34 37 38

Block 1 SCN

Block 2 SCN

34 34

Block 1 SCN

34

Header SCN

36

Absolute Fuzzy SCN

Checkpoint SCN

Header SCN

Block 1 SCN

Block 2 SCN

Block 3 SCN

Block 4 SCN

Block 5 SCN

36 38 34 34 37 38 36

Header SCN

Block 1 SCN

Block 2 SCN

Block 3 SCN

Block 4 SCN

Block 5 SCN

38 37 34 37 38 36

Online Data File

Backup Set

Restored Data File

③ Recovery

① Online Backup

② Restore

Large Pool

Server-Managed Backup(RMAN)의 내부 작업

4 4

RMAN 백업 X. RMAN

Online Standby DB Backup을 수행하기 위해서는 Backup 정보를 저장하는 Catalog DB가 필요

RMAN은 Catalog DB가 구성 안되어 있을 시에는Catalog DB 대신에 Target DB의 Controlfile을 사용

Controlfile을 사용하면 Primary DB와 Standby DB의 Control file이 다르기 때문에 Backup 정보를 서로 공유할

수 없음

Target DB를 Primary DB로 설정하고 Catalog DB로 접속한 다음 register database로 Catalog DB에 DB 정보를

등록

Backup 수행 시에는 Standby DB를 Target DB로 설정하고 Catalog DB에 접속한 후 Backup을 수행

Standby DB와 Primary DB의 DBID가 동일하기 때문에 Primary 에서 Standby DB의 백업을 사용할 수 있음

Online Standby DB Backup

Instance

Primary DB Standby DB

Instance

Primary

DB

Standby

DB

Tape Drive

Catalog

DB

5

RMAN 백업 X. RMAN

Catalog DB 생성 및 Database 등록

$ rman catalog rman/rman01@rman

RMAN> create catalog;

rman target / catalog rman/rman01@rman

RMAN> register database;

Catalog DB에 Primary DB만 등록하면 됨

DataGuard환경에서 RMAN Configuration

CONFIGURE DB_UNIQUE_NAME PRI CONNECT IDENTIFIER ‘PRI_SYN';

CONFIGURE DB_UNIQUE_NAME STB CONNECT IDENTIFIER ‘STB_SYN';

DataGuard 환경에서는 RMAN CONFIGURE설정 값은 CATALOG DB에서 Local Control File로 Reverse Resync가 발생 각 DB 고유의 CONFIGURE 설정을 위해 DB_UNIQUE_NAME 생성 후 FOR DB_UNIQUE_NAME구문으로 각각 설정할 수 있음

CONFIGURE CONTROLFILE AUTOBACKUP ON;

백업 수행시 자동으로 Control File과 spfile 백업 수행 (OFF시에는 Datafile 1 백업 시에만 포함됨)

CONFIGURE BACKUP OPTIMIZATION ON;

동일 Checkpoint에 같은 백업 존재 시 백업 Skip함

CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ALL STANDBY;

Standby DB에 Apply된 Archive Log만 삭제

CONFIGURE SNAPSHOT CONTROLFILE NAME TO '+DBFS_DG/PRI/CONTROLFILE/snapcf_PRI.f‘;

RAC일 경우 Snapshot Controfile이 Shared Device에 존재해야함(11.2.0.2 이상) 로컬로 설정할 경우 ORA-00245에러가 발생(Bug 10263733) Standby DB와 Primary DB의 Snapshot Controlfile은 경로와 파일명을 같게 설정해야 함(Bug 13829543)

6

RMAN 백업 X. RMAN

Target DB가 RAC일 경우 Channel을 RAC의 여러 Instance에 할당하여 자원을 분산해서 사용함으로

백업 수행 속도를 빠르게할 수 있음

Channel할당 시 TAF나 Service를 사용하면 가용성이나 자원 사용을 효율적으로 할 수 있음

Server Session

Server Session

channel channel

Target Instance 1

RMAN

Connect

Catalog DB

Connect

Server Session

channel

Server Session

Server Session

channel channel Server

Session channel

Target Instance 2

connect target /;

connect rcvcat rman1/rman1@swbck2;

run{

allocate channel t1 type 'SBT_TAPE' connect 'sys/q1w2e3r4@MOS15K_LB';

allocate channel t2 type 'SBT_TAPE' connect 'sys/q1w2e3r4@MOS15K_LB';

allocate channel t3 type 'SBT_TAPE' connect 'sys/q1w2e3r4@MOS15K_LB';

allocate channel t4 type 'SBT_TAPE' connect 'sys/q1w2e3r4@MOS15K_LB';

send 'NSR_ENV=(NSR_SERVER=kmesbk, NSR_CLIENT=dmos15d1, NSR_DATA_VOLUME_POOL=MOSDB)';

backup as backupset incremental level 0 filesperset 4 tag 'STBY_TAPE_BKST_FULL' format '%d_%U' database;

release channel t1;

release channel t2;

release channel t3;

release channel t4;

}

RAC Multi Instance RMAN Backup

7 7

RMAN 백업 X. RMAN

List of changed blocks

Redo

generation

Redo log

1011001010110

0001110100101

1010101110011

Change

tracking

file

SGA

CTWR

Block Change Tracking File

과거 Backup 이후 변경된 block 정보를 비트맵으로 저장하여 Incremental Backup 수행 시 변경된 Block만

Read하여 빠르게 Backup(Fast Incremental Backup)할 수 있게 지원하는 File

각 Datafile마다 최대 8개 버전(_bct_bitmaps_per_file)의 Backup에 대한 변경된 block 정보를 bitmap extent에

switch하면서 저장(bitmap extent 1개에는 1개의 버전 정보만 저장됨)

변경된 block은 32k(_bct_chunk_size) 크기의 Chunk 단위로 관리

RAC 환경하에서는 BCT File을 ASM/Raw Device/CFS 같은 공유Device에 생성하여야 함

11g부터 Standby DB에도 적용 가능

8 8

RMAN 백업 X. RMAN

Time A1 Time A3 Time A2

Full Backup

(Image Copy)

Full Backup

(Image Copy)

Incremental Backup

(Backup Set)

Full Backup

(Image Copy)

Incremental Backup

(Backup Set)

Update Update

Incrementally Updated Backup

최초 Backup 시에는 Image Copy Full Backup을 수행하고이후 Backup 수행 시에는 Incremental Backup을

수행하여 이때 만들어지는 Incremental Backup을 Image Copy Full Backup본에 Update하는 Backup

대용량 DB 환경하에서 Incremental Backup 수행만으로 Full Backup 본을 생성할 수 있으므로

Disk Full Backup을 좀 더 빠르게 수행할수있는 Backup 방식

Tag를 설정하여 여러 시점의 백업 본을 구성할 수도 있음

Time B1 Time B3 Time B2

Full Backup

(Image Copy)

Full Backup

(Image Copy)

Incremental Backup

(Backup Set)

Full Backup

(Image Copy)

Incremental Backup

(Backup Set)

Update Update

Database

/recover1

/recover2

9 9

RMAN 백업 X. RMAN

connect target /

connect rcvcat rman/rman01@rman

run {

allocate channel f1d1 device type disk format '/recover1/rman/datafile/%U';

allocate channel f1d2 device type disk format '/recover1/rman/datafile/%U';

allocate channel f1d3 device type disk format '/recover1/rman/datafile/%U';

allocate channel f1d4 device type disk format '/recover1/rman/datafile/%U';

crosscheck backupset tag='STBY_DISK_COPY_FULL1';

crosscheck copy like '/recover1/rman/%' ;

delete noprompt expired backupset tag='STBY_DISK_COPY_FULL1';

delete noprompt expired copy like '/recover1/rman/%' ;

delete noprompt copy like '/recover1/rman/%' completed before 'sysdate-7';

delete noprompt backupset tag 'STBY_DISK_COPY_FULL1' completed before 'sysdate-2';

backup incremental level 1 for recover of copy with tag 'STBY_DISK_COPY_FULL1' database;

recover copy of database with tag 'STBY_DISK_COPY_FULL1';

backup as copy current controlfile tag 'STBY_DISK_COPY_FULL1' format '/recover1/rman/controlfile/stbyctl1.cpy' reuse;

backup as copy current controlfile tag 'STBY_DISK_COPY_FULL1' format '/recover2/arch/controlfile/stbyctl1.cpy' reuse;

backup as backupset current controlfile tag 'STBY_DISK_COPY_FULL1' format '/recover1/rman/controlfile/stbyctl1.bkp.%U';

backup as backupset current controlfile tag 'STBY_DISK_COPY_FULL1' format '/recover2/arch/controlfile/stbyctl1.bkp.%U';

backup as backupset current controlfile tag 'STBY_DISK_COPY_FULL1' format '/recover1/rman/controlfile/stbyctl1.bkp' reuse;

backup as backupset current controlfile tag 'STBY_DISK_COPY_FULL1' format '/recover2/arch/controlfile/stbyctl1.bkp' reuse;

release channel f1d1;

release channel f1d2;

release channel f1d3;

release channel f1d4;

}

Incrementally Updated Backup Script (/recover1)

10 10

RMAN 백업 X. RMAN

connect target /

connect rcvcat rman/rman01@rman

run {

allocate channel f2d1 device type disk format '/recover2/rman/datafile/%U';

allocate channel f2d2 device type disk format '/recover2/rman/datafile/%U';

allocate channel f2d3 device type disk format '/recover2/rman/datafile/%U';

allocate channel f2d4 device type disk format '/recover2/rman/datafile/%U';

crosscheck backupset tag='STBY_DISK_COPY_FULL2';

crosscheck copy like '/recover2/rman/%' ;

delete noprompt expired backupset tag='STBY_DISK_COPY_FULL2';

delete noprompt expired copy like '/recover2/rman/%' ;

delete noprompt copy like '/recover2/rman/%' completed before 'sysdate-7';

delete noprompt backupset tag 'STBY_DISK_COPY_FULL2' completed before 'sysdate-2';

backup incremental level 1 for recover of copy with tag 'STBY_DISK_COPY_FULL2' database;

recover copy of database with tag 'STBY_DISK_COPY_FULL2';

backup as copy current controlfile tag 'STBY_DISK_COPY_FULL2' format '/recover2/rman/controlfile/stbyctl2.cpy' reuse;

backup as copy current controlfile tag 'STBY_DISK_COPY_FULL2' format '/recover2/arch/controlfile/stbyctl2.cpy' reuse;

backup as backupset current controlfile tag 'STBY_DISK_COPY_FULL2' format '/recover2/rman/controlfile/stbyctl2.bkp.%U';

backup as backupset current controlfile tag 'STBY_DISK_COPY_FULL2' format '/recover2/arch/controlfile/stbyctl2.bkp.%U';

backup as backupset current controlfile tag 'STBY_DISK_COPY_FULL2' format '/recover2/rman/controlfile/stbyctl2.bkp' reuse;

backup as backupset current controlfile tag 'STBY_DISK_COPY_FULL2' format '/recover2/arch/controlfile/stbyctl2.bkp' reuse;

release channel f2d1;

release channel f2d2;

release channel f2d3;

release channel f2d4;

}

Incrementally Updated Backup Script (/recover2)

11

RMAN 복구 X. RMAN

Instance

Primary DB Standby DB

Instance

Primary

DB

Data Guard

Online

Compress

Parallel

Image

① RMAN Backup

RMAN

Image

Block

Datafile

Tablespace

Full DB

③ RMAN Recovery

② FS Mount/Cataloging

Standby

DB

Standby DB Image Copy 본을 이용한 DB 복구

Standby DB의 백업본을 Primary DB 서버에 NFS로 Mount함

Primary Control File에는 Standby 에서 수행한 디스크 백업 정보가 없기 때문에 Catalog DB를 연결 필요

Primary DB에서 Standby DB 백업 정보를 접근하기 위해 set backup files for device type disk to

accessible 설정

※ Standby DB에서 수행한 Tape Backup 백업 정보는 Catalog DB만 연결하면 특별한 설정없이 Primary DB에서

Default로 볼 수 있음

Catalog DB에 있는 Standby 백업 정보를 이용하여 Full/Tablespace/Datafile/Block 복구를 할 수 있음

12

RMAN 복구 X. RMAN

$ df

kmmepz01-priv1:/export/data1

40096109568 115846144 39980263424 1% /recover2/rman/datafile/data1

kmmepz02-priv1:/export/data2

40130859008 57710592 40073148416 1% /recover2/rman/datafile/data2

kmmepz01-priv1:/export/data3

40114868224 134604800 39980263424 1% /recover2/rman/datafile/data3

kmmepz02-priv1:/export/data4

40173003776 99855360 40073148416 1% /recover2/rman/datafile/data4

# rman target / catalog rman/rman01@rman

RMAN> set backup files for device type disk to accessible

RMAN> list copy;

STEP 1. Primary DB 서버에 Standby DB Image Copy 본 Mount NFS로 Mount시 OS별 Mount옵션 확인할 것 (Note ID 359515.1 참조)

NFS 문제시 “ORA-17500: ODM err:Permission denied” 에러 발생함

STEP 2. set backup files for device type disk to accessible 설정 10gR2까지는 Standby DB에서 디스크 백업 수행시 반드시 Nocatalog DB로 백업/복구를 수행하여야 했고 Primary DB에서 복구하기 위해서는

Catalog 작업이 별도로 필요

11gR1부터는 Standby DB에서 디스크 백업 수행시 Catalog DB로 백업을 수행하고 Primary DB에서 복구시에는

set backup files for device type disk to accessible 구문으로 별도의 Catalog 작업 없이 복구 가능

13

RMAN 복구 X. RMAN

$ rman target / catalog rman/rman01@rman

run

{

allocate channel disk1 device type disk ;

allocate channel disk2 device type disk ;

restore database from tag 'STBY_DISK_COPY_FULL2' ;

release channel disk1;

release channel disk2;

}

STEP 3. Restore and Recovery Database/Tablespace/Datafile/Block 단위로 Restore 및 Recovery 가능

$ rman target / catalog rman/rman01@rman

RMAN> blockrecover datafile 6 block 9,10 datafile 8 block 11,15 from tag 'STBY_DISK_COPY_FULL2' ;

Block Recover 예

14

RMAN 복구 X. RMAN

Instance

Primary DB 복구/TEST DB

Instance

Primary

DB

Data Guard

Standby

DB

Instance

Standby DB

RMAN

Image1

RMAN

Image2

복구용 Test 용

Standby DB Image Copy 본을 이용한 Test DB 구성

Image Copy본은 Datafile과 구조가 같기때문에 Restore작업 없이 Copy본으로 경로를 수정하여 DB를

Open할 수 있음

DB Open을 위해 Controlfile, Datafile, Tempfile, Redo Log File, Archive Log File, BCT File, Flashback Log에

대한 경로 변경 작업 필요

Image Copy본은 Primary DB서버나 Standby DB서버가 아닌 별도의 복구/테스트 서버에 구성할 것을 권고

Primary DB서버나 Standby DB서버에서 구성할 경우 Service 등록과 데이터베이스 파일에 대한 중복 여부

확인 작업이 필요하기 때문에 신중하게 작업을 하여야 함

15

RMAN 복구 X. RMAN

Standby DB Image Copy 본을 이용한 Test DB 구성

# . oraenv

ORACLE_SID = [TEST] ? TEST

The Oracle base remains unchanged with value /u01/app/oracle

# /oracle/ora11g>env |grep ORA

ORACLE_BASE=/u01/app/oracle

ORACLE_SID=TEST

ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1

# sqlplus / as sysdba

SQL> startup nomount

# export ORACLE_SID=TEST

# rman target /

RMAN> restore controlfile from '/recover2/rman1/controlfile/stbyctl2.bkp';

RMAN> sql 'alter database mount';

sql statement: alter database mount

released channel: ORA_DISK_1

STEP 1. Test DB 정보 확인 Archive log mode 필수

STEP 2. Controlfile Restore Test DB 생성을 위해서는 별도의 Oracle Home을 설치하고 DB를 Nomount함

Nomount에서 Controlfile Restore 수행

Controlfile Restore는 Copy본(stbyctl2.cpy)이 아닌 Standby DB에서 수행한 Backupset Controlfile(stbyctl2.bkp)을 사용할 것

16

RMAN 복구 X. RMAN

# export ORACLE_SID=TEST

# sqlplus / as sysdba

SQL> select CONTROLFILE_TYPE from v$database;

CONTROL

-------

BACKUP

→ STANDBY가 아닌 BACKUP이어야 함

SQL> select name from v$controlfile;

# rman target /

RMAN> list datafilecopy tag='STBY_DISK_COPY_FULL2';

List of Datafile Copies

=======================

Key File S Completion Time Ckp SCN Ckp Time

------- ---- - -------------------- ---------- --------------------

71 1 A 02-DEC-2012 08:54:36 1604486 01-DEC-2012 22:23:27

Name: /recover2/rman/datafile/data_D-KMMES_I-618844117_TS-SYSTEM_FNO-1_9jnrrbhm

Tag: STBY_DISK_COPY_FULL2

73 2 A 02-DEC-2012 08:55:01 1604486 01-DEC-2012 22:23:27

Name: /recover2/rman/datafile/data_D-KMMES_I-618844117_TS-SYSAUX_FNO-2_9inrrbhk

Tag: STBY_DISK_COPY_FULL2

.........

STEP 3. Datafile Copy Backup 확인

17

RMAN 복구 X. RMAN

# export ORACLE_SID=TEST

# rman target /

RMAN> switch database to copy;

datafile 1 switched to datafile copy "/recover2/rman/datafile/data_D-KMMES_I-618844117_TS-SYSTEM_FNO-1_9jnrrbhm"

datafile 2 switched to datafile copy "/recover2/rman/datafile/data_D-KMMES_I-618844117_TS-SYSAUX_FNO-2_9inrrbhk"

datafile 3 switched to datafile copy "/recover2/rman/datafile/data_D-KMMES_I-618844117_TS-UNDOTBS1_FNO-3_98nrrb24"

datafile 4 switched to datafile copy "/recover2/rman/datafile/data_D-KMMES_I-618844117_TS-UNDOTBS2_FNO-4_99nrrb24"

datafile 5 switched to datafile copy "/recover2/rman/datafile/data_D-KMMES_I-618844117_TS-USERS_FNO-5_9knrrbij"

datafile 6 switched to datafile copy "/recover2/rman/datafile/data_D-KMMES_I-618844117_TS-UNDOTBS1_FNO-6_9anrrb24"

datafile 7 switched to datafile copy "/recover2/rman/datafile/data_D-KMMES_I-618844117_TS-UNDOTBS1_FNO-7_9bnrrb24"

datafile 8 switched to datafile copy "/recover2/rman/datafile/data_D-KMMES_I-618844117_TS-UNDOTBS1_FNO-8_9cnrrbad"

datafile 9 switched to datafile copy "/recover2/rman/datafile/data_D-KMMES_I-618844117_TS-UNDOTBS1_FNO-9_9dnrrbag"

datafile 10 switched to datafile copy "/recover2/rman/datafile/data_D-KMMES_I-618844117_TS-UNDOTBS2_FNO-10_9enrrbai"

datafile 11 switched to datafile copy "/recover2/rman/datafile/data_D-KMMES_I-618844117_TS-UNDOTBS2_FNO-11_9fnrrbal"

datafile 12 switched to datafile copy "/recover2/rman/datafile/data_D-KMMES_I-618844117_TS-UNDOTBS2_FNO-12_9gnrrbhc"

datafile 13 switched to datafile copy "/recover2/rman/datafile/data_D-KMMES_I-618844117_TS-UNDOTBS2_FNO-13_9hnrrbhi"

STEP 4. Datafile Rename switch database to copy 명령어로 Datafile Rename 수행

18

RMAN 복구 X. RMAN

# rman target /

run

{

SET NEWNAME FOR TEMPFILE 1 TO '/recover2/rman1/datafile/temp01.dbf';

SET NEWNAME FOR TEMPFILE 2 TO '/recover2/rman1/datafile/temp02.dbf';

SET NEWNAME FOR TEMPFILE 3 TO '/recover2/rman1/datafile/temp03.dbf';

SET NEWNAME FOR TEMPFILE 4 TO '/recover2/rman1/datafile/temp04.dbf';

SET NEWNAME FOR TEMPFILE 5 TO '/recover2/rman1/datafile/temp05.dbf';

switch tempfile all;

}

# export ORACLE_SID=TEST

SQL> alter database rename file '/oracle/KMMES/redolog/1_redo01.log' to '/recover2/rman/datafile/1_redo01.log';

SQL> alter database rename file '/oracle/KMMES/mirrlog/1_redo01_m.log' to '/recover2/rman/datafile/1_redo01_m.lo

g‘;

SQL> alter database rename file '/oracle/KMMES/redolog/stby_1_redo31.log' to '/recover2/rman/datafile/stby_1_red

o31.log';

SQL> alter database rename file '/oracle/KMMES/redolog/stby_1_redo32.log' to '/recover2/rman/datafile/stby_1_red

o32.log';

STEP 5. Tempfile Rename switch tempfile 명령어로 Tempfile Rename 수행

STEP 6. Redo Log File Rename alter database rename file 명령어로 Redo Log File Rename 수행

19

RMAN 복구 X. RMAN

SQL> alter database clear logfile group 32;

alter database clear logfile group 32

*

ERROR at line 1:

ORA-00344: unable to re-create online log

'/oracle/KMMES/redolog/stby_1_redo32.log'

ORA-27040: file create error, unable to create file

IBM AIX RISC System/6000 Error: 2: No such file or directory

Additional information: 1

SQL> alter database drop logfile group 32;

# export ORACLE_SID=TEST

# rman target /

SQL> ALTER DATABASE DISABLE BLOCK CHANGE TRACKING;

SQL> select * from V$BLOCK_CHANGE_TRACKING;

STEP 7. Active Redo Log Drop drop logfile 에러 발생(Active Standby Log) 시 해당 Log Clear 후 drop

STEP 8. BCT File Disable

20

RMAN 복구 X. RMAN

# export ORACLE_SID=TEST

# sqlplus / as sysdba

SQL> select name from v$controlfile;

SQL> select name from v$datafile;

SQL> select file#,name from v$tempfile;

SQL> select * from V$BLOCK_CHANGE_TRACKING;

SQL> select member from v$logfile;

# export ORACLE_SID=TEST

# sqlplus / as sysdba

SQL> recover database until cancel using backup controlfile;

ORA-00279: change 1604486 generated at 12/01/2012 22:23:27 needed for thread 1

ORA-00289: suggestion : /recover3/archive/1_74_800859076.dbf

ORA-00280: change 1604486 for thread 1 is in sequence #74

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

CANCEL

Media recovery cancelled.

SQL> select * from v$recover_file;

SQL> alter database noarchivelog;

SQL> alter database open resetlogs;

STEP 9. Database File Rename 최종 확인

STEP 10. Datafile 복구 및 Open noarchivelog 로 Open

RAC백업을 Single DB로 resetlog로 Open하기 위해서 init파일에 _no_recovery_through_resetlogs=TRUE 설정할 것(Bug 4355382)

21

ZFS Appliance의 Snapshot 기능을 이용하여 RMAN Image Copy본을 여러 시점의 Snapshot 백업을 수행함

필요한 Snapshot을 Read Write가 가능한 Clone으로 복제하여 테스트 서버에 Mount함

테스트 DB의 Controlfile에 변경된 경로 정보를 다시 Catalog

Datafile/Redo Log File/Temp File 등을 rename함

BCT/Flashback Log 등을 Disable함

Reset Log로 DB Open함

RMAN 복구 X. RMAN

Instance

Primary DB 복구/TEST DB

Instance

Primary

DB

Data Guard

Standby

DB

RMAN

Image

Instance

Standby DB

Snap 1

Snap 2

Snap 3

Snap 4

Snap 5

복구용 Test 용

Clone 2

Clone 5-1

Clone 5-2

ZFS Appliance를 이용한 Test DB 구성

22

RMAN 복구 X. RMAN

/clone/recover2/rman/datafile/

# sqlplus / as sysdba

SQL> startup nomount

# rman target /

RMAN> restore controlfile from '/clone/recover2/rman1/controlfile/stbyctl2.bkp';

RMAN> sql 'alter database mount';

# sqlplus / as sysdba

SQL> select CONTROLFILE_TYPE from v$database;

CONTROL

-------

BACKUP

→ STANDBY가 아닌 BACKUP이어야 함

SQL> select name from v$controlfile;

STEP 1. ZFS Clone 백업본 Mount

STEP 2. Controlfile Restore Test DB 생성을 위해서는 별도의 Oracle Home을 설치하고 DB를 Nomount함

Nomount에서 Controlfile Restore 수행

Controlfile Restore는 Copy본(stbyctl2.cpy)이 아닌 Standby DB에서 수행한 Backupset Controlfile(stbyctl2.bkp)을 사용할 것

23

RMAN 복구 X. RMAN

# rman target /

RMAN> list datafilecopy tag='STBY_DISK_COPY_FULL2';

RMAN> change datafilecopy tag='STBY_DISK_COPY_FULL2' uncatalog;

RMAN> list datafilecopy tag='STBY_DISK_COPY_FULL2';

RMAN> catalog start with '/clone/recover2/' noprompt;

※ FILE#로 한개의 ImageCopy만 존재하는지 확인

RMAN> list datafilecopy tag='STBY_DISK_COPY_FULL2';

RMAN> list incarnation;

List of Database Incarnations

DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time

------- ------- -------- ---------------- --- ---------- ----------

1 1 KMQC 604386621 PARENT 1 10-DEC-2012 20:56:29

2 2 KMQC 604386621 PARENT 2032827 14-DEC-2012 19:17:28

3 3 KMQC 604386621 CURRENT 2033016 14-DEC-2012 19:30:57

# 운영DB의 RESETLOGS_CHANGE#과 Current Incarnation의 Reset SCN과 Mismatch시 해당 Incarnation#로 Reset

RMAN> reset database to incarnation 번호;

STEP 3. Image Copy본 Uncatalog/Catalog Backup 당시 경로와 달라졌기 때문에(/recover2 /clone/recover2) 백업 정보 삭제(Uncatalog) 후 등록(Catalog )

24

RMAN 복구 X. RMAN

# rman target /

RMAN> switch database to copy;

datafile 1 switched to datafile copy "/clone/recover2/rman/datafile/data1/data_D-KMQC_I-604386621_TS-SYSTEM_FNO-1

_03nspu7f"

datafile 2 switched to datafile copy "/clone/recover2/rman/datafile/data4/data_D-KMQC_I-604386621_TS-SYSAUX_FNO-2

_12nsq0kc"

.....

# rman target /

run

{

SET NEWNAME FOR TEMPFILE 1 TO '/clone/recover2/rman1/datafile/temp01.dbf';

switch tempfile all;

}

alter database rename file '+DATA_EXA2/kmqcdg/onlinelog/group_1.278.801940267' to '/clone/recover2/rman/datafile

/1redo1.log';

alter database rename file '+DATA_EXA2/kmqcdg/onlinelog/group_1.277.801940271' to '/clone/recover2/rman/datafile

/1redo2.log‘;

STEP 4. Datafile Rename switch database to copy 명령어로 Datafile Rename 수행

STEP 5. Tempfile Rename switch tempfile 명령어로 Tempfile Rename 수행

STEP 6. Redo Log File Rename alter database rename file 명령어로 Redo Log File Rename 수행

25

RMAN 복구 X. RMAN

SQL> ALTER DATABASE DISABLE BLOCK CHANGE TRACKING;

SQL> select * from V$BLOCK_CHANGE_TRACKING;

alter database drop logfile group 31;

alter database drop logfile group 32;

….

※ drop logfile 에러 발생(Active Standby Log) 시 해당 Log Clear 후 drop

TEST: SYS> alter database drop logfile group 32

*

ERROR at line 1:

TEST: SYS> alter database clear logfile group 32;

'+data_exa

*

ORA-29701: unable to connect to Cluster Synchronization Service

SQL> alter database drop logfile group 32;

STEP 7. Standby Log File Drop

STEP 8. Block Change Tracking File Disable

26

RMAN 복구 X. RMAN

SQL> recover database until time '2013-01-28:12:30:00' using backup controlfile;

SQL> alter database noarchivelog;

SQL> alter database open resetlogs;

STEP 9. Database File Rename 최종 확인

SQL> select member from v$logfile;

SQL> select file#,name from v$tempfile;

SQL> select * from V$BLOCK_CHANGE_TRACKING;

SQL> select name from v$controlfile;

SQL> select name from v$datafile;

STEP 10. Recover 및 DB Open noarchivelog 로 Open

RAC백업을 Single DB로 resetlog로 Open하기 위해서 init파일에 _no_recovery_through_resetlogs=TRUE 설정할 것(Bug 4355382)

27

RMAN 복구 X. RMAN

Instance

Primary DB Standby DB

Instance

Primary

DB

Data Guard

Standby

DB

Duplicate

DB

Instance

TEST DB

Duplicate Database를 이용한 Test DB 구성

Primary 또는 Standby DB에서 수행한 VTL 백업을 Restore하여 별도의 Test DB를 구성할 수 있음

Duplicate DB는 원본 DB와 다른 DBID로 생성됨

28

RMAN 복구 X. RMAN

Duplicate Database를 이용한 Test DB 구성

kmmepr02[#/oracle/ora11g] sqlplus / as sysdba

TEST2: SYS> startup nomount

-- Catalog DB을 이용한 Rman 접속

kmmepr02[#/oracle/ora11g] rman target / catalog rman/rman01@rman

run {

allocate channel ch00 type 'sbt_tape';

restore controlfile to '/recover3/TEST2/datafile/test2.ctl' from 'c-604386621-20121215-1c';

release channel ch00;

}

--> '/c-604386621-20121215-1c' 해당 정보는 RMAN의 'list backupset;' 명령을 통해 해당 시점 확인 후 "Handle" 번호 입력.

Handle: bk_7372_1_802112842 ==> Datafie

Handle: c-604386621-20121215-1a ==> Control File & spfile

Handle: al_7377_1_802113139 ==> Archivelog

STEP 1. Startup Nomount Duplicate DB 생성을 위해서는 별도의 Oracle Home을 설치하고 DB를 Nomount함

STEP 2. Control File Restore

29

RMAN 복구 X. RMAN

kmmepr02[#/oracle/ora11g] rman target sys/qkrtm123@KMQCDG_IMSI catalog rman/rman01@RMAN auxiliary /

run {

allocate auxiliary channel ch00 type 'SBT_TAPE' parms="ENV=(NB_ORA_POLICY=kmmepe04_ORA_FULL_KMQCDG2,NB_ORA_CLIEN

T=kmmepe04_exa,NB_ORA_SERV=kmmepr01)";

allocate auxiliary channel ch01 type 'SBT_TAPE' parms="ENV=(NB_ORA_POLICY=kmmepe04_ORA_FULL_KMQCDG2,NB_ORA_CLIEN

T=kmmepe04_exa,NB_ORA_SERV=kmmepr01)";

allocate auxiliary channel ch02 type 'SBT_TAPE' parms="ENV=(NB_ORA_POLICY=kmmepe04_ORA_FULL_KMQCDG2,NB_ORA_CLIEN

T=kmmepe04_exa,NB_ORA_SERV=kmmepr01)";

allocate auxiliary channel ch03 type 'SBT_TAPE' parms="ENV=(NB_ORA_POLICY=kmmepe04_ORA_FULL_KMQCDG2,NB_ORA_CLIEN

T=kmmepe04_exa,NB_ORA_SERV=kmmepr01)";

set until time "TO_DATE('2012/12/15 18:00:00','YYYY/MM/DD HH24:MI:SS')";

set newname for database to '/recover3/TEST2/datafile/%b';

duplicate target database to "TEST2" nofilenamecheck

logfile '/recover3/TEST2/onlinelog/redo01.dbf' size 512M,

'/recover3/TEST2/onlinelog/redo02.dbf' size 512M,

'/recover3/TEST2/onlinelog/redo03.dbf' size 512M ;

release channel ch00;

release channel ch01;

release channel ch02;

release channel ch03;

}

STEP 3. Duplicate DB 생성 Duplicate DB 생성을 위해서는 Taget/Catalog/Auxiliary DB에 접속하고 Auxiliary DB에 Duplicate DB가 생성됨

30

RMAN Issues X. RMAN

-- Duplicate DB 생성 후, TEST2 DB 재기동

kmmepr02[#/oracle/ora11g] sqlplus / as sysdba

TEST2: SYS> shutdown immediate;

TEST2: SYS> startup;

STEP 4. DB Open