RMAN 으로 rawdevice 백업 복구하기
RMAN 으로 rawdevice 백업 복구하기
테스트 1 : Raw device 상태의 데이터파일을 RMAN 의 backupset 으로 백업 받은 후 정상적으로 복구 되는지 확인
Step 1. 현재상태 확인
[oracle@localhost ~]$ sqlplus / as sysdba SQL*Plus: Release 10.2.0.5.0 - Production on Wed Feb 1 11:05:19 2012 Copyright (c) 1982, 2010, Oracle. All Rights Reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> !vi dd.sql set line 200 col tablespace_name for a10 col file_name for a45 select tablespace_name,bytes/1024/1024 MB,file_name from dba_data_files / :wq! SQL> @dd <- Data file 상태 확인 TABLESPACE MB FILE_NAME ------------------- ---------- --------------------------------------------- USERS 5 /dev/raw/raw4 SYSAUX 250 /dev/raw/raw2 UNDOTBS1 30 /dev/raw/raw3 SYSTEM 440 /dev/raw/raw1 EXAMPLE 100 /dev/raw/raw5
SQL> !vi log.sql <- Redo log file 상태 확인 set line 200 col group# for 999 col member for a20 col mb for 999 col seq# for 999 col archived for a4 col status for a8 select a.group#,a.member,b.bytes/1024/1024 MB,b.sequence# "SEQ#" ,b.archived,b.status from v$logfile a, v$log b where a.group#=b.group# order by 1,2 / :wq! SQL> @log GROUP# MEMBER MB SEQ# ARCH STATUS ---------- -------------------- ------ ------- ---------- ----------- 1 /dev/raw/raw10 50 4 NO CURRENT 1 /dev/raw/raw9 50 4 NO CURRENT 2 /dev/raw/raw11 50 2 YES INACTIVE 2 /dev/raw/raw12 50 2 YES INACTIVE 3 /dev/raw/raw13 50 3 YES INACTIVE 3 /dev/raw/raw14 50 3 YES INACTIVE 6 rows selected.
SQL> select name from v$controlfile; NAME --------------------------------- /dev/raw/raw6 /dev/raw/raw7 /dev/raw/raw8
SQL> archive log list; Database log mode Archive Mode Automatic archival Enabled Archive destination /data/arc2 Oldest online log sequence 2 Next log sequence to archive 4 Current log sequence 4
Step 2. RMAN 을 사용하여 전체 백업 (백업경로는 /data/backup/rman/ )
[oracle@localhost ~]$ rman target / Recovery Manager: Release 10.2.0.5.0 - Production on Wed Feb 1 10:47:50 2012 Copyright (c) 1982, 2007, Oracle. All rights reserved. connected to target database: TESTDB (DBID=2557423915) RMAN> backup as compressed backupset 2> format '/data/backup/rman/%U_%T' 3> database; Starting backup at 01-FEB-12 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: sid=144 devtype=DISK channel ORA_DISK_1: starting compressed full datafile backupset channel ORA_DISK_1: specifying datafile(s) in backupset input datafile fno=00001 name=/dev/raw/raw1 input datafile fno=00003 name=/dev/raw/raw2 input datafile fno=00005 name=/dev/raw/raw5 input datafile fno=00002 name=/dev/raw/raw3 input datafile fno=00004 name=/dev/raw/raw4 channel ORA_DISK_1: starting piece 1 at 01-FEB-12 channel ORA_DISK_1: finished piece 1 at 01-FEB-12 piece handle=/data/backup/rman/01n27hl4_1_1_20120201 tag=TAG20120201T104907 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:36 channel ORA_DISK_1: starting compressed full datafile backupset channel ORA_DISK_1: specifying datafile(s) in backupset including current control file in backupset including current SPFILE in backupset channel ORA_DISK_1: starting piece 1 at 01-FEB-12 channel ORA_DISK_1: finished piece 1 at 01-FEB-12 piece handle=/data/backup/rman/02n27hm8_1_1_20120201 tag=TAG20120201T104907 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03 Finished backup at 01-FEB-12
[oracle@localhost ~]$ ls -lSh /data/backup/rman/ 합계 112M -rw-r----- 1 oracle dba 111M 2월 1 10:49 01n27hl4_1_1_20120201 -rw-r----- 1 oracle dba 1.1M 2월 1 10:49 02n27hm8_1_1_20120201
Step 3. 테스트용 테이블 scott.gogak 테이블 생성 후 장애 발생시킴
[oracle@localhost ~]$ sqlplus scott/tiger SQL*Plus: Release 10.2.0.5.0 - Production on Wed Feb 1 11:14:21 2012 Copyright (c) 1982, 2010, Oracle. All Rights Reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> create table gogak (no number, name varchar2(10)) tablespace users; Table created. SQL> insert into gogak values (1,'AAA'); 1 row created. SQL> insert into gogak values (2,'BBB'); 1 row created. SQL> commit; Commit complete. SQL> select * from gogak; NO NAME ---------- ---------- 1 AAA 2 BBB SQL> conn / as sysdba Connected. SQL> @dd TABLESPACE MB FILE_NAME ---------------- ---------- --------------------------------------------- USERS 5 /dev/raw/raw4 <- 이 파일에 장애 발생시킴 SYSAUX 250 /dev/raw/raw2 UNDOTBS1 30 /dev/raw/raw3 SYSTEM 440 /dev/raw/raw1 EXAMPLE 100 /dev/raw/raw5 SQL> !dd if=/dev/zero of=/dev/raw/raw4 bs=8k dd: writing '/dev/raw/raw4': 장치에 남은 공간이 없음 12801+0개의 레코드를 입력하였습니다 12800+0개의 레코드를 출력하였습니다 SQL> alter tablespace users offline immediate; Tablespace altered. SQL> alter tablespace users online; alter tablespace users online * ERROR at line 1: ORA-01122: database file 4 failed verification check ORA-01110: data file 4: '/dev/raw/raw4' ORA-01210: data file header is media corrupt SQL> select * from scott.gogak; select * from scott.gogak * ERROR at line 1: ORA-00376: file 4 cannot be read at this time ORA-01110: data file 4: '/dev/raw/raw4'
Step 4. RMAN 으로 해당 장애 복구하기
[oracle@localhost ~]$ rman target / Recovery Manager: Release 10.2.0.5.0 - Production on Wed Feb 1 11:19:20 2012 Copyright (c) 1982, 2007, Oracle. All rights reserved. connected to target database: TESTDB (DBID=2557423915) RMAN> run { 2> sql "alter tablespace users offline immediate"; 3> restore tablespace users; 4> recover tablespace users; 5> sql "alter tablespace users online"; 6> } sql statement: alter tablespace users offline immediate Starting restore at 01-FEB-12 using channel ORA_DISK_1 channel ORA_DISK_1: starting datafile backupset restore channel ORA_DISK_1: specifying datafile(s) to restore from backup set restoring datafile 00004 to /dev/raw/raw4 channel ORA_DISK_1: reading from backup piece /data/backup/rman/01n27hl4_1_1_20120201 channel ORA_DISK_1: restored backup piece 1 piece handle=/data/backup/rman/01n27hl4_1_1_20120201 tag=TAG20120201T104907 channel ORA_DISK_1: restore complete, elapsed time: 00:00:02 Finished restore at 01-FEB-12 Starting recover at 01-FEB-12 using channel ORA_DISK_1 starting media recovery media recovery complete, elapsed time: 00:00:01 Finished recover at 01-FEB-12 sql statement: alter tablespace users online RMAN> exit Recovery Manager complete. [oracle@localhost ~]$ sqlplus scott/tiger SQL*Plus: Release 10.2.0.5.0 - Production on Wed Feb 1 11:21:53 2012 Copyright (c) 1982, 2010, Oracle. All Rights Reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> select * from gogak; NO NAME ---------- ---------- 1 AAA 2 BBB
위와 같이 rawdevice 도 RMAN 으로 백업 및 복구가 가능합니다.
테스트 2. Raw device 상태의 데이터 파일을 backupset 으로 증분 백업 가능한지와 복구 가능한지 테스트
Step 1. 현재 상태 확인
[oracle@localhost ~]$ sqlplus / as sysdba SQL*Plus: Release 10.2.0.5.0 - Production on Wed Feb 1 11:24:25 2012 Copyright (c) 1982, 2010, Oracle. All Rights Reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> @dd TABLESPACE MB FILE_NAME ----------------- ---------- --------------------------------------------- USERS 5 /dev/raw/raw4 SYSAUX 250 /dev/raw/raw2 UNDOTBS1 30 /dev/raw/raw3 SYSTEM 440 /dev/raw/raw1 EXAMPLE 100 /dev/raw/raw5
SQL> @log GROUP# MEMBER MB SEQ# ARCH STATUS ---------- -------------------- ------ ------- ---------- ----------- 1 /dev/raw/raw10 50 4 NO CURRENT 1 /dev/raw/raw9 50 4 NO CURRENT 2 /dev/raw/raw11 50 2 YES INACTIVE 2 /dev/raw/raw12 50 2 YES INACTIVE 3 /dev/raw/raw13 50 3 YES INACTIVE 3 /dev/raw/raw14 50 3 YES INACTIVE 6 rows selected.
SQL> select name from v$controlfile; NAME ---------------------------------------- /dev/raw/raw6 /dev/raw/raw7 /dev/raw/raw8
Step 2. RMAN 을 사용하여 증분 백업을 여러 차례 수행합니다.
[oracle@localhost ~]$ rman target / Recovery Manager: Release 10.2.0.5.0 - Production on Wed Feb 1 11:28:05 2012 Copyright (c) 1982, 2007, Oracle. All rights reserved. connected to target database: TESTDB (DBID=2557423915) RMAN> backup as compressed backupset 2> incremental level 0 3> format '/data/backup/rman/%U_%T' 4> database; Starting backup at 01-FEB-12 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: sid=145 devtype=DISK channel ORA_DISK_1: starting compressed full datafile backupset channel ORA_DISK_1: specifying datafile(s) in backupset input datafile fno=00001 name=/dev/raw/raw1 input datafile fno=00003 name=/dev/raw/raw2 input datafile fno=00005 name=/dev/raw/raw5 input datafile fno=00002 name=/dev/raw/raw3 input datafile fno=00004 name=/dev/raw/raw4 channel ORA_DISK_1: starting piece 1 at 01-FEB-12 channel ORA_DISK_1: finished piece 1 at 01-FEB-12 piece handle=/data/backup/rman/03n27jur_1_1_20120201 tag=TAG20120201T112827 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:35 channel ORA_DISK_1: starting compressed full datafile backupset channel ORA_DISK_1: specifying datafile(s) in backupset including current control file in backupset including current SPFILE in backupset channel ORA_DISK_1: starting piece 1 at 01-FEB-12 channel ORA_DISK_1: finished piece 1 at 01-FEB-12 piece handle=/data/backup/rman/04n27jvu_1_1_20120201 tag=TAG20120201T112827 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03 Finished backup at 01-FEB-12
다른 터미널에서 데이터 변경을 위해 테이블 생성하고 데이터 입력합니다.
SQL> create table scott.gogak2 (no number,name varchar2(10)) tablespace users; Table created. SQL> insert into scott.gogak2 values (1,'CCC'); 1 row created. SQL> insert into scott.gogak2 values (2,'DDD'); 1 row created. SQL> commit; Commit complete.
RMAN 터미널에서 증분 백업을 수행합니다.
RMAN> backup as compressed backupset 2> incremental level 2 3> format '/data/backup/rman/%U_%T' 4> tablespace users; Starting backup at 01-FEB-12 using channel ORA_DISK_1 channel ORA_DISK_1: starting compressed incremental level 2 datafile backupset channel ORA_DISK_1: specifying datafile(s) in backupset input datafile fno=00004 name=/dev/raw/raw4 channel ORA_DISK_1: starting piece 1 at 01-FEB-12 channel ORA_DISK_1: finished piece 1 at 01-FEB-12 piece handle=/data/backup/rman/05n27knu_1_1_20120201 tag=TAG20120201T114150 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01 Finished backup at 01-FEB-12
Step 3. 장애를 발생 시킵니다
SQL> @dd TABLESPACE MB FILE_NAME ----------------- ---------- --------------------------------------------- USERS 5 /dev/raw/raw4 SYSAUX 250 /dev/raw/raw2 UNDOTBS1 30 /dev/raw/raw3 SYSTEM 440 /dev/raw/raw1 EXAMPLE 100 /dev/raw/raw5 SQL> !dd if=/dev/zero of=/dev/raw/raw4 bs=8k <- 장애를 발생시킵니다 dd: writing '/dev/raw/raw4': 장치에 남은 공간이 없음 12801+0개의 레코드를 입력하였습니다 12800+0개의 레코드를 출력하였습니다 SQL> alter tablespace users offline immediate; Tablespace altered. SQL> alter tablespace users online; alter tablespace users online * ERROR at line 1: ORA-01122: database file 4 failed verification check ORA-01110: data file 4: '/dev/raw/raw4' ORA-01210: data file header is media corrupt SQL> select * from scott.gogak2; select * from scott.gogak2 * ERROR at line 1: ORA-00376: file 4 cannot be read at this time ORA-01110: data file 4: '/dev/raw/raw4'
Step 4. RMAN 으로 복구 후 확인합니다.
RMAN> run { 2> restore tablespace users; 3> recover tablespace users; 4> sql "alter tablespace users online" ; 5> } Starting restore at 01-FEB-12 using channel ORA_DISK_1 channel ORA_DISK_1: starting datafile backupset restore channel ORA_DISK_1: specifying datafile(s) to restore from backup set restoring datafile 00004 to /dev/raw/raw4 channel ORA_DISK_1: reading from backup piece /data/backup/rman/05n27knu_1_1_20120201 channel ORA_DISK_1: restored backup piece 1 piece handle=/data/backup/rman/05n27knu_1_1_20120201 tag=TAG20120201T114150 channel ORA_DISK_1: restore complete, elapsed time: 00:00:01 Finished restore at 01-FEB-12 Starting recover at 01-FEB-12 using channel ORA_DISK_1 starting media recovery media recovery complete, elapsed time: 00:00:01 Finished recover at 01-FEB-12 sql statement: alter tablespace users online SQL> select * from scott.gogak2; NO NAME ---------- ---------- 1 CCC 2 DDD
테스트 3. RMAN 으로 rawdevice 상태의 데이터 파일을 rawdevice 형태로 백업 받은 후 복구 가능한지 테스트
Step 1. 현재 상태 확인
RMAN> report schema; Report of database schema List of Permanent Datafiles =========================== File Size(MB) Tablespace RB segs Datafile Name ---- -------- -------------------- ------- ------------------------ 1 440 SYSTEM *** /dev/raw/raw1 2 30 UNDOTBS1 *** /dev/raw/raw3 3 250 SYSAUX *** /dev/raw/raw2 4 5 USERS *** /dev/raw/raw4 5 100 EXAMPLE *** /dev/raw/raw5 List of Temporary Files ======================= File Size(MB) Tablespace Maxsize(MB) Tempfile Name ---- -------- -------------------- ----------- -------------------- 1 20 TEMP 100 /dev/raw/raw15
Step 2. RMAN 으로 Raw device 파일 백업 수행
RMAN> copy 2> datafile 1 to '/data/backup/rman/system' , 3> datafile 2 to '/data/backup/rman/undotbs1' , 4> datafile 3 to '/data/backup/rman/sysaux' , 5> datafile 4 to '/data/backup/rman/users' , 6> datafile 5 to '/data/backup/rman/example' ; Starting backup at 01-FEB-12 using channel ORA_DISK_1 channel ORA_DISK_1: starting datafile copy input datafile fno=00001 name=/dev/raw/raw1 output filename=/data/backup/rman/system tag=TAG20120201T115814 recid=9 stamp=774100724 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:35 channel ORA_DISK_1: starting datafile copy input datafile fno=00003 name=/dev/raw/raw2 output filename=/data/backup/rman/sysaux tag=TAG20120201T115814 recid=10 stamp=774100744 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:16 channel ORA_DISK_1: starting datafile copy input datafile fno=00005 name=/dev/raw/raw5 output filename=/data/backup/rman/example tag=TAG20120201T115814 recid=11 stamp=774100749 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:07 channel ORA_DISK_1: starting datafile copy input datafile fno=00002 name=/dev/raw/raw3 output filename=/data/backup/rman/undotbs1 tag=TAG20120201T115814 recid=12 stamp=774100754 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03 channel ORA_DISK_1: starting datafile copy input datafile fno=00004 name=/dev/raw/raw4 output filename=/data/backup/rman/users tag=TAG20120201T115814 recid=13 stamp=774100756 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01 Finished backup at 01-FEB-12
다른 창에서 백업 파일을 확인합니다
[oracle@localhost rman]$ pwd /data/backup/rman [oracle@localhost rman]$ ls –lSh -rw-r----- 1 oracle dba 441M 2?? 1 11:58 system -rw-r----- 1 oracle dba 251M 2?? 1 11:59 sysaux -rw-r----- 1 oracle dba 101M 2?? 1 11:59 example -rw-r----- 1 oracle dba 31M 2?? 1 11:59 undotbs1 -rw-r----- 1 oracle dba 5.1M 2?? 1 11:59 users
Step 3. 테스트용 테이블 scott.gogak3 을 생성 후 장애를 발생시킵니다.
SQL> create table scott.gogak3 (no number, name varchar2(10)) 2 tablespace users; Table created. SQL> insert into scott.gogak3 values (1,'EEE'); 1 row created. SQL> insert into scott.gogak3 values (2,'FFF'); 1 row created. SQL> commit; Commit complete. SQL> select * from scott.gogak3; NO NAME ---------- ---------- 1 EEE 2 FFF SQL> @dd TABLESPACE MB FILE_NAME ----------------- ---------- --------------------------------------------- USERS 5 /dev/raw/raw4 SYSAUX 250 /dev/raw/raw2 UNDOTBS1 30 /dev/raw/raw3 SYSTEM 440 /dev/raw/raw1 EXAMPLE 100 /dev/raw/raw5 SQL> !dd if=/dev/zero of=/dev/raw/raw4 bs=8k dd: writing '/dev/raw/raw4': 장치에 남은 공간이 없음 12801+0개의 레코드를 입력하였습니다 12800+0개의 레코드를 출력하였습니다 SQL> alter tablespace users offline immediate; Tablespace altered. SQL> alter tablespace users online; alter tablespace users online * ERROR at line 1: ORA-01122: database file 4 failed verification check ORA-01110: data file 4: '/dev/raw/raw4' ORA-01210: data file header is media corrupt SQL> select * from scott.gogak3; select * from scott.gogak3 * ERROR at line 1: ORA-00376: file 4 cannot be read at this time ORA-01110: data file 4: '/dev/raw/raw4'
Step 4. RMAN 으로 파일을 복원 한 후 복구합니다.
RMAN> restore tablespace users; Starting restore at 01-FEB-12 using channel ORA_DISK_1 channel ORA_DISK_1: restoring datafile 00004 input datafile copy recid=13 stamp=774100756 filename=/data/backup/rman/users destination for restore of datafile 00004: /dev/raw/raw4 channel ORA_DISK_1: copied datafile copy of datafile 00004 output filename=/dev/raw/raw4 recid=14 stamp=774101682 Finished restore at 01-FEB-12
RMAN 에서 자동으로 copy 된 raw device 를 찾아서 복원하는 것을 알 수 있습니다.
RMAN> recover tablespace users; Starting recover at 01-FEB-12 using channel ORA_DISK_1 starting media recovery media recovery complete, elapsed time: 00:00:00 Finished recover at 01-FEB-12
sqlplus 창에서 데이터가 복구되었는지 확인합니다.
SQL> alter tablespace users online; Tablespace altered. SQL> select * from scott.gogak3; NO NAME ---------- ---------- 1 EEE 2 FFF
정상적으로 복구가 된 것을 알 수 있습니다.
위에서 살펴본 바와 같이 rawdvice 로 구성된 데이터베이스도 RMAN 으로 동일하게 관리할 수 있습니다.
최신 댓글