Upload
hadan
View
268
Download
8
Embed Size (px)
Citation preview
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