RMAN으로 복구하기
 
 
※ 전통적인 복구 방법 과정
 

0. 장애발생
$ rm users01.dbf (삭제)

 

1. offline
           - 다른 경로 지정
2. restore
           - Control file 안의 내용 변경
3. recover
4. online




RMAN 복구 또한 전통적인 방법과 동일하게 Restore와 Recovery 라는 개념으로 나뉜다.
백업파일로부터 가지고와서(Restore), redo log / archive log 를 적용시켜 복구(recovery) 하게된다.

이 과정을 관리자가 수동으로 했었다면, RMAN 유틸리티가 대신 수행 해 주는 것만 다르다.
 

 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 복구 예제 시작
○ 공통부분 - 장애발생
: offline 되는 users 테이블스페이스의 Data file 을 삭제 후 복구하기
 

SQL> select tablespace_name, bytes/1024/1024 MB, file_name from dba_data_files;
 
TABLESPACE_NAME    MB FILE_NAME
--------------- ----- --------------------------------------------------
USERS              13 /app/oracle/oradata/testdb/users01.dbf
UNDOTBS1           95 /app/oracle/oradata/testdb/undotbs01.dbf
SYSAUX            520 /app/oracle/oradata/testdb/sysaux01.dbf
SYSTEM            700 /app/oracle/oradata/testdb/system01.dbf
EXAMPLE           346 /app/oracle/oradata/testdb/example01.dbf
 
 
SQL> !rm -fr /app/oracle/oradata/testdb/users01.dbf
 
SQL> !ls /app/oracle/oradata/testdb/users01.dbf
ls: /app/oracle/oradata/testdb/users01.dbf: No such file or directory
 
 
 

① 독립형 명령어
 
- 오프라인 시키고
RMAN> sql 'alter tablespace users offline immediate';
 

sql statement: alter tablespace users offline immediate
 

※ 참고
☆ 테이블스페이스 오프라인
            : 사용자가 더 이상 테이블 스페이스에 접근 못한다는 의미

▷ 3가지 방법
① normal 모드 : 테이블스페이스에 아무런 문제 없을때 정상적으로 수행하는 방법
SYS> alter tablespace haksa offline;

② temporary 모드 : 테이블스페이스의 데이터 파일에 하나라도 이상이 생기게 되면 사용 (offline normal 수행안됨)
SYS> alter database datafile '/DIR/FILENAME' offline;
SYS> alter tablespace haksa offline temporary;


③ immediate 모드 : 데이터 파일에 장애가 나서 데이터를 내려쓰지 못하는 상황에서 사용.
                                  나중에 해당 테이블 스페이스를 online할대 복구를 하라고 메세지 나옴.
SYS> alter tablespace users offline immediate;
 - DB archive log mode 일 경우 :
SYS> alter database datafile '/DIR/haksa01.dbf' offline;
 - DB no archive log mode 일 경우 : 
SYS> alter databse datafile '/DIR/haksa01.dbf' offline drop;



 
- 파일 복원
RMAN> restore tablespace users;
 
Starting restore at 23-FEB-12
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=45 device type=DISK
 
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00004 to /app/oracle/oradata/testdb/users01.dbf
channel ORA_DISK_1: reading from backup piece /data/backup/rman/0cn41tls_1_1_20120223
channel ORA_DISK_1: piece handle=/data/backup/rman/0cn41tls_1_1_20120223 tag=TAG20120223T141001
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:03
Finished restore at 23-FEB-12
 
 
- 테이블스페이스 복구
RMAN> recover tablespace users;
 
Starting recover at 23-FEB-12
using channel ORA_DISK_1
 
starting media recovery
media recovery complete, elapsed time: 00:00:00
 
Finished recover at 23-FEB-12
 
 
- 온라인 시키기
RMAN> sql 'alter tablespace users online';
 
sql statement: alter tablespace users online
 
 
 


② 작업형 명령어
 : 위와 동일 에러 일으키고 작업
 : 명령어 여러 개를 한꺼번에 적어주면 RMAN이 순서대로 알아서 수행해준다.
 
RMAN>
run {
sql 'alter tablespace users offline immediate';
restore tablespace users;
recover tablespace users;
sql 'alter tablespace users online';
}

 
sql statement: alter tablespace users offline immediate
 
Starting restore at 23-FEB-12
using channel ORA_DISK_1
 
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00004 to /app/oracle/oradata/testdb/users01.dbf
channel ORA_DISK_1: reading from backup piece /data/backup/rman/0cn41tls_1_1_20120223
channel ORA_DISK_1: piece handle=/data/backup/rman/0cn41tls_1_1_20120223 tag=TAG20120223T141001
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
Finished restore at 23-FEB-12
 
Starting recover at 23-FEB-12
using channel ORA_DISK_1
 
starting media recovery
media recovery complete, elapsed time: 00:00:00
 
Finished recover at 23-FEB-12
 
sql statement: alter tablespace users online
복구 완료
 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 복구 예제 끝







 
 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습1 시작
실습 1: Offline 안되는 테이블 스페이스 삭제 후 복구하기
 
 
 
1. 파일 삭제
 
$ rm -fr /app/oracle/oradata/testdb/system01.dbf
$ ls /app/oracle/oradata/testdb/system01.dbf
파일없음
 
 

2. 작업형 명령어로 복구
RMAN> shutdown abort;
 
Oracle instance shut down
 
RMAN>
run {
startup mount;
restore database;
recover database;
alter database open;
}

 
connected to target database (not started)
Oracle instance started
database mounted
 
Total System Global Area     422670336 bytes
 
Fixed Size                     1344616 bytes
Variable Size                255855512 bytes
Database Buffers             159383552 bytes
Redo Buffers                   6086656 bytes
 
Starting restore at 23-FEB-12
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=18 device type=DISK
 
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00002 to /app/oracle/oradata/testdb/sysaux01.dbf
channel ORA_DISK_1: restoring datafile 00003 to /app/oracle/oradata/testdb/undotbs01.dbf
channel ORA_DISK_1: restoring datafile 00004 to /app/oracle/oradata/testdb/users01.dbf
channel ORA_DISK_1: reading from backup piece /data/backup/rman/0cn41tls_1_1_20120223
channel ORA_DISK_1: piece handle=/data/backup/rman/0cn41tls_1_1_20120223 tag=TAG20120223T141001
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:01:05
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00001 to /app/oracle/oradata/testdb/system01.dbf
channel ORA_DISK_1: restoring datafile 00005 to /app/oracle/oradata/testdb/example01.dbf
channel ORA_DISK_1: reading from backup piece /data/backup/rman/0bn41tls_1_1_20120223
channel ORA_DISK_1: piece handle=/data/backup/rman/0bn41tls_1_1_20120223 tag=TAG20120223T141001
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:01:17
Finished restore at 23-FEB-12
 
Starting recover at 23-FEB-12
using channel ORA_DISK_1
 
starting media recovery
media recovery complete, elapsed time: 00:00:10
 
Finished recover at 23-FEB-12
 
database opened
 
 
 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습1 끝
 
 

 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습2 시작
실습 2: 임시 경로에서 복구하기
 : users 테이블 스페이스를 삭제 한 후 기존파일 경로 말고 다른 위치에 restore하고 recover 하기
 

복구과정 - 임시경로 /data/temp/
 
① 테이블스페이스 오프라인
② 복원경로 지정 (새로운 경로)
set new name for datafile <변호 또는 경로> to <새 위치 경로 및 파일명>
③ users 파일 복원
④ 컨트롤파일 내용 변경 (새로운 경로로 바뀌었음 지정해주기)
switch datafile <파일번호>
⑤ users tablepspace 복구
⑥ 테이블스페이스 온라인


 
 
 
1. 파일 삭제
SQL> !rm -fr /app/oracle/oradata/testdb/users01.dbf
 
SQL> !ls /app/oracle/oradata/testdb/users01.dbf
ls: /app/oracle/oradata/testdb/users01.dbf: No such file or directory
 
 
2. 복구
 
 1) 파일 번호 확인
RMAN> report schema;
 
Report of database schema for database with db_unique_name TESTDB
 
List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    700      SYSTEM               YES     /app/oracle/oradata/testdb/system01.dbf
2    520      SYSAUX               NO      /app/oracle/oradata/testdb/sysaux01.dbf
3    95       UNDOTBS1             YES     /app/oracle/oradata/testdb/undotbs01.dbf
4    12       USERS                NO      /app/oracle/oradata/testdb/users01.dbf
5    345      EXAMPLE              NO      /app/oracle/oradata/testdb/example01.dbf
 
List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1    29       TEMP                 32767       /app/oracle/oradata/testdb/temp01.dbf
 
 
 
 2) 복구시작
 
$ mkdir /data/temp → 경로 생성해주기
 
 
RMAN>
run {
sql 'alter tablespace users offline immediate';
set newname for datafile 4
to '/data/temp/users01.dbf';
restore tablespace users;
switch datafile 4;
recover tablespace users;
sql 'alter tablespace users online';
}

 
sql statement: alter tablespace users offline immediate
 
executing command: SET NEWNAME
 
Starting restore at 23-FEB-12
using channel ORA_DISK_1
 
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00004 to /data/temp/users01.dbf
channel ORA_DISK_1: reading from backup piece /data/backup/rman/0cn41tls_1_1_20120223
channel ORA_DISK_1: piece handle=/data/backup/rman/0cn41tls_1_1_20120223 tag=TAG20120223T141001
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
Finished restore at 23-FEB-12
 
datafile 4 switched to datafile copy
input datafile copy RECID=5 STAMP=776013527 file name=/data/temp/users01.dbf
starting full resync of recovery catalog
full resync complete
 
Starting recover at 23-FEB-12
using channel ORA_DISK_1
 
starting media recovery
media recovery complete, elapsed time: 00:00:00
 
Finished recover at 23-FEB-12
 
sql statement: alter tablespace users online
 
 

※ 참고
RMAN>
run {
sql 'alter tablespace users offline immediate';
set newname for datafile '/app/oracle/oradata/testdb/users01.dbf'
to '/data/temp/users01.dbf';
restore tablespace users;
switch datafile 4;
recover tablespace users;
sql 'alter tablespace users online';
}

이것도 가능함.


 
 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습2 끝
 
 
 
 
 
 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습3 시작
실습 3: Datafile 복구하기
 : 복구에 필요한 데이터 파일만 복원하여 복구하기
   복구해야 하는 데이터파일중 일부가 rm으로 삭제되어 데이터 파일 백업 없는 테이블스페이스를 RMAN으로 임시경로(/data/temp) 사용하여 복구
 
 
1. RMAN 으로 현재 데이터베이스 Full backup
 
RMAN> backup database format '/data/backup/rman/%U_%T';
 
 
 
 
2. Test01 테이블 생성 후 삭제하여 장애 발생
 
SQL> select tablespace_name, bytes/1024/1024 MB, file_name from dba_data_files;
 
TABLESPACE_NAME      MB FILE_NAME
--------------- ------- --------------------------------------------------
USERS                13 /app/oracle/oradata/testdb/users01.dbf
UNDOTBS1             95 /app/oracle/oradata/testdb/undotbs01.dbf
SYSAUX              510 /app/oracle/oradata/testdb/sysaux01.dbf
SYSTEM              700 /app/oracle/oradata/testdb/system01.dbf
EXAMPLE             313 /app/oracle/oradata/testdb/example01.dbf
 
 
SQL>
create tablespace test01
datafile '/app/oracle/oradata/testdb/test01.dbf' size 10M;

 
SQL> create table scott.tt500 
(no number,name varchar2(10)) tablespace test01;

 
SQL> insert into scott.tt500 values (1,'AAA');
 
SQL> insert into scott.tt500 values (2,'BBB');
 
SQL> commit;
 
SQL> select * from scott.tt500;
 
SQL> !rm -fr /app/oracle/oradata/testdb/test01.dbf
 
SQL> alter tablespace test01 offline immediate;
 
SQL> alter tablespace test01 online;
안됨
SQL> select * from scott.tt500;
없음
 
 
 
3. 임시경로로 파일복원
Control file / redo log file : 가장 최근에 쓰던 것 임시경로로 복사
Data file : RMAN 백업본 복원

 
SQL> select name from v$controlfile;
 
NAME
---------------------------------------------
/app/oracle/oradata/testdb/control01.ctl
/app/oracle/fast_recovery_area/testdb/control02.ctl
 
SQL> shutdown immediate;

$ cp /home/oracle/oradata/testdb/control01.ctl /data/temp/
$ cp /home/oracle/oradata/testdb/redo*.log /data/temp/
$ vi /home/oracle/product/10g/dbs/inittestdb.ora
컨트롤 파일 위치 변경하기
:wq!
 
 
RMAN> startup mount;
RMAN> report schema;
 
 
SQL> select member from v$logfile;
 
MEMBER
---------------------------------------------
/app/oracle/oradata/testdb/redo03.log
/app/oracle/oradata/testdb/redo02.log
/app/oracle/oradata/testdb/redo01.log
 
 
4. 작업형 스크립트로 복구하기
RMAN>
run {
## Redo log file 위치부터 먼저 변경하기
## 주의 : sql 더블" alter database datafile 싱글''/경로/redo01.log싱글'' to 싱글''/data/temp/redo01.log싱글''더블"; 
sql "alter database renamefile ''/app/oracle/oradata/testdb/redo01.log'' to ''/data/temp/redo01.log''";
sql "alter database renamefile ''/app/oracle/oradata/testdb/redo02.log'' to ''/data/temp/redo02.log''";
sql "alter database renamefile ''/app/oracle/oradata/testdb/redo03.log'' to ''/data/temp/redo03.log''";

## datafile 위치 변경
set newname for datafile 1 to '/data/temp/system01.dbf';
set newname for datafile 2 to '/data/temp/undotbs01.dbf';
set newname for datafile 3 to '/data/temp/syaux01.dbf';

## 안쓰는 데이터파일 offline 처리 
## 주의 : sql 더블" alter database datafile 싱글''/경로/users01.dbf싱글'' offline drop 더블";
sql "alter database datafile ''/app/oracle/oradata/testdb/users01.dbf'' offline drop";
sql "alter database datafile ''/app/oracle/oradata/testdb/example01.dbf'' offline drop";

sql "alter database datafile ''/app/oracle/oradata/testdb/test01.dbf'' as ''/data/temp/test01.dbf''";

## 리스토어 할때 제외할 테이블스페이스지정
restore database skip tablespace'users','example';
switch datafile all;

## skip 안해주면 복구하려고 시도하다가 에러난다.
recover database skip tablespace 'users','example';
alter database open;
}

 

※ 설명 : 위 스크립트에 진하게 표시한 부분
사용안할 테이블스페이스를 offline drop 했어도, restore를 한다.
그렇기 때문에 restore할때 해당 테이블스페이스를 제외하라고 따로 지정을 해줘야 한다.
recover또한 마찬가지.


5. 복구확인해보기
 
SQL> @dd
 
SQL> alter tablespace test01 online;
 
SQL> select * from scott.tt500;
 
 
6. 정리
 : 백업 데이터파일이 없는 경우에도 RMAN에서도 새로 생성해서 복구 가능(test01 테이블스페이스의 백업본이 없는 경우)
 : 복구에 필요하지 않은 파일은 RMAN에서 offline 처리한 후
   restore 및 recover 과정에서 skip 옵션을 사용하여 해당 offline데이터는 복원 및 복구하지 않도록 할수 있다. - 복구시간절약

 
 

※ 참고 :vi 사용
명령 : %s/^/바꿀문자열/g
          %s/$/바꿀문자열/c
옵션 : /g 모든줄
옵션 : /c 각각 물어봄
옵션 : ^ 시작부분
옵션 : $ 끝부분
Ex)
:%s/'/''/g
:%s/^/sql "/g
:%s/$/";/g


 
 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습3 끝
 
  

 




 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습4 시작
실습 4: Drop table후 복구하기 - 원래 경로 사용
 
 

장애 과정 -------------->>>>>
  
1. Test table 생성
 
set line 200
col tablespace_name for a10
col file_name for a50

SYS> select tablespace_name, bytes/1024/1024 MB, file_name from dba_data__files;
 

SYS> create table rtest01 (no number) tablespace example;
SYS> insert into rtest01 values (1);
SYS> insert into rtest01 values (2);
SYS> commit;
SYS> select * from rtest01;
 
SYS> select to_char(sysdate,'YYYY-MM-DD:HH24:MI:SS') from dual;
SYS> save time.sql
복구에 필요한 시간
 
2. 테이블 삭제 장애
SYS> drop table srtest01 purge;
SYS> select * from rtest01;
없음
 
 
 


 
 
복구 과정 -------------->>>>>
  
3. RMAN이용
 
RMAN> shutdown immediate;
 
RMAN>
run {
startup mount;
sql 'alter session set nls_date_format="YYYY-MM-DD:HH24:MI:SS"';
set until time='2011-04-15:08:30:22';
restore database;
recover database;
alter database open resetlogs;
}

 
 
4. 확인
SYS> select * from rtest01;
 
 
5. 정리
 : drop user나 DML 장애도 똑같은 방법으로 복구가능
 ▶ 매번 NLS_DATA_FORMAT 를 지정해주기 번거롭다면,
    사용자 초기화 파일 (.bash_profile등)에 입력해두기 : export NLS_DATE_FORMAT='YYYY-MM-DD:HH24:MI:SS'
 
 
 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습4 끝
 
 
 
 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습5 시작
실습 5: drop talbe후 복구하기 - 임시 경로 이용
 : 기존 경로가 아닌 다른 경로(/data/temp)의 control file, redo log file, data file을 사용하여 장애난 테이블을 복구
   복구에 필요한 파일만 이용.
 

1. 전체 데이터베이스 백업
 
RMAN>
backup as compressed backupset database
format '/data/backup/rman/%U_%T';

 
 

2. 예제 테이블 (rtest2) 생성 후 장애 발생
 
SYS> create table scott.rtest02 (no number) tablespace example;
SYS> insert into scott.rtest02 values (1);
SYS> insert into scott.rtest02 values (2);
SYS> commit;
 
SYS> select to_char(sysdate,'YYYY-MM-DD:HH24:MI:SS') from dual;
복구에 필요한 시간
SYS> select * from rtest01;
 
 
SYS> drop table scott.rtest2 purge;
SYS> select * from scott.rtest2;
없음
 
 
 
 
 
3. DB 종료 후 임시경로(/data/temp) 에서 복구
 
SQL> shutdown immediate;
 
 
① 사용중이던 control file 임시경로로 복사후 파라미터 파일에서 위치 변경 (redo log file도 복사)
$ cp /app/oracle/oradata/testdb/*.ctl /data/temp/
$ cp /app/oracle/oradata/testdb/*.log /data/temp/
$ vi /app/oracle/product/10g/dbs/inittestdb.ora
컨트롤 파일 위치 변경
:wq!
 
SQL> startup mount;
 
 
 
② RMAN을 사용하여 파일을 새 경로로 Restore
 
RMAN> report schema;
 
RMAN>
run {
sql "alter database renamefile ''/app/oracle/oradata/testdb/redo01.log'' to ''/data/temp/redo01.log''";
sql "alter database renamefile ''/app/oracle/oradata/testdb/redo02.log'' to ''/data/temp/redo02.log''";
sql "alter database renamefile ''/app/oracle/oradata/testdb/redo03.log'' to ''/data/temp/redo03.log''";

set newname for datafile 1 to '/data/temp/system01.dbf';
set newname for datafile 2 to '/data/temp/undotbs01.dbf';
set newname for datafile 3 to '/data/temp/syaux01.dbf';
set newname for datafile 5 to '/data/temp/example01.dbf';

restore database skip tablespace 'users';
switch datafile all;

sql 'alter session set nls_date_format="YYYY-MM-DD:HH24:MI:SS";
set until time='2011-03-13:04:03:22';

recover database skip tablespace 'users';
sql "alter database datafile ''/app/oracle/oradata/testdb/users01.dbf'' offline drop";
alter database open resetlogs;
}

 
 
 
4. 복구확인
 
SQL> select * scott.rtest2;
복구 완료
 
 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습5 끝
 
 
 




 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습6 시작
실습 6: 증분 백업파일을 활용한 drop table 복구하기
 

★ 실습 순서 요약
1. 전체 데이터베이스를 incremental level 0 으로 백업 수행
2. 실습용 테이블 (scott.rtest3) 을 생성 후 차등 증분 백업 (level2) 수행
3. 실습용 테이블에 1을 입력한 후 차등 증분 백업 (level2)
4. 실습용 테이블에 2를 입력한 후 차등 증분 백업 (level2)
5. 실습용 테이블에 3을 입력한 후 차등 증분 백업 (level2)
6. 실습용 테이블을 drop 한 후 차등 증분 백업 (lelvel1) 수행하기

증분 백업 파일을 이용하여 임시 경로에 연습용 테이블을 복구 


 
 
 
 
1. 전체 데이터베이스 incremental level 0 으로 백업
 
$ ls -lSh /data/backup/rman
합계 0
 
 
RMAN>
backup as compressed backupset
incremental level 0
database
format '/data/backup/rman/%U_%T';

 
 
$ ls -lSh /data/backup/rman
확인
 
 
 
 
2. 실습용 테이블 (scott.rtest3) 을 생성 후 차등 증분 백업 (level2) 수행
 
SQL> create table scott.rtest3 (no number) tablespace example;
 
RMAN>
backup
incremental level 2
tablespace example
format '/data/backup/rman/%U_%T';

 
 
$ ls -lSh /data/backup/rman
백업 파일 크기 확인
 
 
 
 
3. 실습용 테이블에 1을 입력한 후 차등 증분 백업 (level2)
 
SQL> insert into scotgt.rtest03.dbf values (1);
SQL> commit;
 
RMAN>
backup
incremental level 2
tablespace example
format '/data/backup/rman/%U_%T';

 
 
$ ls -lSh /data/backup/rman
백업 파일 크기 확인
 
 
 
 
4. 실습용 테이블에 2를 입력한 후 차등 증분 백업 (level2)
 
 
SQL> insert into scotgt.rtest03.dbf values (2);
SQL> commit;
 
RMAN>
backup
incremental level 2
tablespace example
format '/data/backup/rman/%U_%T';

 
 
$ ls -lSh /data/backup/rman
백업 파일 크기 확인
 
 
 
5. 실습용 테이블에 3을 입력한 후 차등 증분 백업 (level2)
 
 
SQL> insert into scotgt.rtest03.dbf values (3);
SQL> commit;
 
RMAN>
backup
incremental level 2
tablespace example
format '/data/backup/rman/%U_%T';

 
 
$ ls -lSh /data/backup/rman
백업 파일 크기 확인
 
 
 
6. 실습용 테이블을 drop 한 후 차등 증분 백업 (lelvel1) 수행하기
 
 
SQL> select * from scott.rtest3;
 
SQL> drop table scott.rtest3 purge;
SQL> select * from scott.rtest3;
없음
 
 
RMAN>
backup
incremental level 1
tablespace example
format '/data/backup/rman/%U_%T';

 
 
$ ls -lSh /data/backup/rman
백업 파일 크기 확인
 
 
  
 
7. DB 종료후 임시경로 (/data/temp/) 에서 복구
 
SQL> shutdown immediate;
 
 
① 사용중이던 control file 임시경로로 복사후 파라미터 파일에서 위치 변경 (redo log file도 복사)
$ cp /app/oracle/oradata/testdb/*.ctl /data/temp/
$ cp /app/oracle/oradata/testdb/*.log /data/temp/
$ vi /app/oracle/product/10g/dbs/inittestdb.ora
컨트롤 파일 위치 변경
:wq!
 
SQL> startup mount;
 
 
② RMAN을 사용하여 파일을 새 경로로 Restore
 
RMAN> report schema;
 
 
RMAN>
run {
sql "alter database renamefile ''/app/oracle/oradata/testdb/redo01.log'' to ''/data/temp/redo01.log''";
sql "alter database renamefile ''/app/oracle/oradata/testdb/redo02.log'' to ''/data/temp/redo02.log''";
sql "alter database renamefile ''/app/oracle/oradata/testdb/redo03.log'' to ''/data/temp/redo03.log''";
 
set newname for datafile 1 to '/data/temp/system01.dbf';
set newname for datafile 2 to '/data/temp/undotbs01.dbf';
set newname for datafile 3 to '/data/temp/syaux01.dbf';
set newname for datafile 5 to '/data/temp/example01.dbf';
 
restore database skip tablespace 'users';
switch datafile all;
 
sql 'alter session set nls_date_format="YYYY-MM-DD:HH24:MI:SS";
set until time='2011-03-13:04:03:22';
 
recover database skip tablespace 'users';
sql "alter database datafile ''/app/oracle/oradata/testdb/users01.dbf'' offline drop";
alter database open resetlogs;
}

 
 
 
8. 복구확인
 
SQL> select * scott.rtest3;
복구 완료
 
 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습6 끝
 
 

 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습7 시작
실습 7 : drop tablespace 복구하기
 
 
 
장애과정------------------------------->>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 
 
1. 현재 상태 확인
 
$ vi dd.sql
set line 200
coll tablespace_name for a10
col file_name for a50
select tablespace_name, bytes/1024/1024 MB, file_name
from dba_data_files
/

 
 
SYS> @dd
 
 

2. 테스트용 테이블 스페이스 생성
 
SYS> create tablespace test datafile '/app/oracle/oradata/testdb/test01.dbf' size 5M;
 
SYS> @dd
 
 

3. 전체 데이터베이스 백업
 
$ rman target / catalog rcuser/rcuser@rcserver
or
$ rman target /
 
 
RMAN> backup database;
 
 
4. 실습용 테이블 생성 후 데이터 입력
 
SYS> create table rtest2 (no number) tablespace test;
 
SYS> insert into rtest2 values (1);
SYS> insert into rtest2 values (2);
SYS> commit;
SYS> @time
테이블스페이스 존재하는시간
 
 
 
5. 장애발생 - 테이블 스페이스 삭제
 
SYS> drop tablespace test including contents and datafiles;
 
 - alertlog 에서 삭제된 시간 확인하고 삭제된 시간 이전으로 복구하면 된다.
 
 
 
 
 
 
복구과정------------------------------->>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 
6. 복구 시작
 
RMAN> shut down immediate;
RMAN> startup nomount;
 
RMAN> sql 'alter session set nls_date_format="YYYY-MM-DD:HH24:MI:SS"';
 
 - 백업 컨트롤 파일 복원 - 앞에서 미리 백업 받아 둔 파일.
참고 : 해당글 문제 2,4 방식으로 컨트롤 파일 백업
2012/02/23 - [Study/Oracle - 백업&복구] - 백업 & 복구 29 - RMAN : RMAN 백업 1
 

RMAN>
run {
restore controlfile from '/data/backukp/rman/cf_c-2636382648926-27646283-2d';

 
RMAN> alter database mount;
RMAN> sql 'alter session set nls_date_format="YYYY-MM-DD:HH24:MI:SS"';
 
RMAN>
run {
set until time '2010-04-20:18:06:53';
restore database;
recover database;
}

 
RMAN> alter database open resetlogs;
복구완료
 
 
7. 확인
 
SYS> select * from rtest2;
 
 
 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습7 끝
 
 
Posted by 딩구르
,