행위

"오라클 rman"의 두 판 사이의 차이

DB CAFE

1번째 줄: 1번째 줄:
= {{:오라클_rman_개요|rman 개요}} =
+
== {{:오라클_rman_개요|rman 개요}} ==
 +
== [[오라클_rman_아카이브로그 삭제|rman 아카이브로그 삭제]] ==
  
[[오라클_rman_아카이브로그 삭제|rman 아카이브로그 삭제]]
+
== {{:오라클_rman_복구|rman 복구}} ==
 
+
== [[오라클_RMAN_CLONE_복구|RMAN+CLONE 복구]] ==
{{:오라클_rman_복구|rman 복구}}
 
[[오라클_RMAN_CLONE_복구|RMAN+CLONE 복구]]
 

2019년 12월 4일 (수) 17:48 판

thumb_up 추천메뉴 바로가기


목차

1 = = RMAN

android RMAN ( Recovery MANager ) : 백업과 복구를 위한 전용 유틸리티

  • 관리자가 RMAN 에게 명령하면 RMAN 이 알아서 백업/복구 실행
  • 증분블럭백업가능
    -> 과거에 백업받은 자료를 비교해서 그 이후에 추가된 자료만 백업(저장공간 대폭감소)
  • 백업시 자료가 있는 블록만 백업
    -> (datafile size 가 전체 5G 라도 사용하는 블럭만 백업하여 공간 절약


rmancoa5.gif

1.1 RMAN 의 주요특징[편집]

android # 자주 실행하는 작업을 스크립트로 저장

  1. RMAN Recover Catalog Server를 사용할 경우 자주 사용하는 백업 명령어들을 스크립트로 저장한 후 불러서 사용할 수 있음
  2. 증분 블록 레벨 백업 기능 지원
    과거 백업 받은 내역을 조사해서 그 기준 백업 이후에 변경된 블록만 찾아서 백업 수행 가능
    예) 기존 100M 파일에서 10M 만 변경되도 100M 를 백업받아야 하지만 RMAN 은 변경된 10M 만 백업 가능
  3. 사용되지 않은 블록 건너뛰고 백업 수행
    총 100M 을 백업 받는다고 사용안한 블록은 건너뛰고 현재 사용중인 블록만 찾아서 백업
  4. 백업 수행 중 훼손된 블록 감지
    백업 수행중 훼손된 블록을 감지해서 마킹해두고 계속 백업 수행
  5. ASM 기반 유일한 백업 도구
    ASM 기반으로 Storage 를 관리하는 경우는 RMAN외 백업할수 있는 방법이 없음(12c 이후에는 ASM 환경이 기본)
  6. 백업 수행시 압축 지원
    RMAN으로 백업을 진행하면서 동시에 압축까지 가능, 이때 압축으로 인한 자원 손실등이 거의 없음


1.2 RMAN 구성도[편집]

Oracle_rman_channel_allocation.jpg

1.3 RMAN 백업[편집]

android RMAN 백업 진행 순서

  1. 관리자가 RMAN 유틸리티에게 백업 / 복구 명령
  2. RMAN 은 관리자를 대신해 대상 서버(target database) 에 접속하여 백업 / 복구를 수행
  3. Recover Catalog Server 가 있으면 백업 관련 정보를 Catalog Database 에 기록, 없다면 Target Database 의 Controlfile 에기록
  • RMAN 은 기본적으로 PGA 사용, PGA 공간이 부족할 경우 SGA를 사용하여 백업을 수행


1.3.1 채널 설정하기[편집]

  1. Channel = 백업/복구 하는 경로 백업시 반드시 channel 을 할당 해주어야 한다.

1.3.1.1 자동 Channel 설정[편집]

[oracle@localhost~]$ rman target / catalog rcuser/rcuser@rcserver  ( 복구 카탈로그 서버 사용시 )

or

[oracle@localhost~]$ rman target sys/oracle ( 복구 카탈로그 서버 사용 안할 경우 )
RMAN> configure default device type to disk ;     <-- 자동 채널 설정 명령어

-> 이렇게 하면 default device 가 파라미터 파일의 db_recovery_file_dest 파라미터 경로로 설정 됨

or

RMAN> configure channel device type disk
   2    format '/data/backup/rman/%U_%T' ;                <-- /data/backup/rman 디렉토리에 백업파일이 생성됨

1.3.1.2 수동 Channel 설정[편집]

  1. 백업을 수행할 때 백업 받을 경로를 직접 지정
RMAN> backup tablespace example format '/data/backup/open/%U_%T' ;

1.3.2 RMAN 백업 종류[편집]

  1. backupset 으로 백업 수행 ( default )
    1. Backupset = RMAN이 백업파일을 만들 때 RMAN 만이 알 수 있는 형태로 백업파일을 생성하는데 이것을 backupset 이라함
    2. Backuppiece = backupset 의 크기가 너무 클 경우 분할해서 여러 개의 파일로 나누어 백업 받는데 분할되는 하나의 백업파일을 backuppiece 라 한다.
  2. Image copy로 백업 수행 ( begin backup 과 비슷한 개념, 백업보다 카피에 많이 사용 )
RMAN> copy
      datafile '/app/oracle/oradata/testdb/example01.dbf'
      to '/data/backup/rman/example01.dbf.bak' ;

1.3.3 RMAN 백업시 주의사항[편집]

  1. database 가 open 상태에서 백업을 받으려면 DB가 아카이브 로그모드 (archive log mode) 로 운영되어야 한다.
  2. DB가 마운트 또는 오픈상태여야 한다.
  3. 운영중인 온라인 리두로그 파일은 백업이 불가.
  4. no archive log mode 에서는 Clean 백업만 사용가능.
    • Clean 백업이란? 오프라인 테이블스페이스나 읽기전용 테이블스페이스 백업을 의미
  5. RMAN 으로 백업을 수행하는 것은 Begin backup시의 조건들과 동일해야 함

1.3.4 백업 파일 포맷 설정[편집]

%d  : 데이터베이스명 
%D  : 일 (in format DD) 
%M  : 달 (format MM)
%Y  : 년 (YYYY)
%F  : DBID, day, month, year, and sequence 번호의 조합
%n  : 8자리 DB명 만약 SCOTT 이라는 DB라면 SCOTTXXX 로 표시됨(8자리가 안되면 X로채움) 
%p  : 백업셋내의 백업피스 번호. 1부터 시작하고 백업피스가 만들어질때마다 1씩증가함. 
%s  : 백업셋 번호 . 1부터 시작하고 콘트롤파일을 RESET 하거나 재생성하면 1부터 다시시작
%t  : 백업셋 타임스템프(시간)
%T  : 년월일 을 포함하는 날짜 (YYYYMMDD)
%u  : 백업셋 번호와 백업셋이 생성된 시간을 조합한 8자리 번호
%U  : %u_%p_%c 3가지를 묶은 포맷임, RMAN 에서 백업 파일의 포맷을 지정하지 않으면 Default가 %U 이다.
%% : %문자를 표현하기 위해서쓰임 (예: %%Y 는 %Y로 표시됨)
%c  : 중복된 백업 피스셋 내에서의 백업피스의 복제번호. 중복된 백업을 하지 않는다면 기본적으로 이값은 1, 최대값 : 256

1.3.5 RMAN 명령어 종류[편집]

1.3.5.1 standalone 독립형 명령[편집]

1.3.5.1.1 RMAN> prompt 에 1개의 명령어만 들어가는 방식[편집]

 arrow_downward 전체 데이터베이스 백업

RMAN> backup database;


 arrow_downward 전체 데이터베이스 압축 하여 백업

RMAN> backup as compressed backupset database;


 arrow_downward 테이블스페이스 단위 백업

RMAN> backup tablespace 'example','users' ;


 arrow_downward datafile 단위 백업(report shcema 명령실행후 출력되는 datafile 번호를 이용하여 백업)

RMAN> backup datafile 1,2,3 ;


 arrow_downward control file 백업

RMAN> backup current controlfile;

1.3.5.2 batch 작업형 명령[편집]

1.3.5.2.1 프로그램의 스크립트처럼 여러 개의 명령어를 한꺼번에 사용할 수 있는 방법[편집]
RMAN> run {
       allocate channel ch1 type disk maxpiecesize 10m ;
       allocate channel ch2 type disk maxpiecesize 50m ;
       backup
       tablespace users channel ch1
       format '/data/backup/close/%T_users.bak' ;
       tablespace example channel ch2
       format '/data/backup/close/%T_example.bak' ;
       }
connect target "/"

run {
    allocate channel c1 device type disk format '+RECO/BACKUP/RTISP/%d_%U';
    configure controlfile autobackup on;
    set controlfile autobackup format for device type disk to '+RECO/BACKUP/RTISP/ctl.%d.%F';
    backup channel c1 database plus archivelog delete all input;
}

list backup;

list backup summary;
LIST BACKUP OF DATABASE;
LIST BACKUP OF TABLESPACE TS_...;
LIST BACKUPSET OF DATAFILE 1;
LIST COPY OF DATAFILE 1, 2;

LIST BACKUP COMPLETED AFTER/BEFORE/BETWEEN '2014-01-15' AND '2014-01-16';
LIST BACKUP SUMMARY COMPLETED AFTER  "TO_DATE('2014-01-16','YYYY-MM-DD')";

list backup of archivelog all summary;
LIST BACKUP OF ARCHIVELOG ALL;
LIST BACKUP OF ARCHIVELOG like '+RECO/...%';
LIST BACKUP OF ARCHIVELOG FROM SEQUENCE 10;
LIST BACKUP OF ARCHIVELOG FROM TIME 'SYSDATE - 7';

1.3.5.3 증분 백업[편집]

이전에 백업받았던 백업파일과 비교해서 변경된 부분만 골라서 백업을 수행

1399363524_51.jpg

1.3.5.4 차등 증분 백업[편집]

백업 받을 때 설정했던 숫자가 자기보다 작거나 같으면 그시점부터 지금까지 모든 데이터를 백업
RMAN> run {
   2    allocate channel c1 type disk ;
   3    backup
   4    incremental level 0       <-- 차등 증분 백업을 의미
   5    database
   6    format '/data/backup/rman/%U_%T' ;
   7    }

1.3.5.5 누적 증분 백업[편집]

백업 받을 때 설정했던 숫자가 자기보다 작을경우 그 시점부터 지금까지 모든 데이터를 백업
RMAN> run {
   2    allocate channel c2 type disk ;
   3    backup
   4    incremental level 3 cumulative       <-- 누적 증분 백업을 의미
   5    tablespace example ;
   6    }
  • Block change tracking : 데이터 블록들의 변경된 블록만 추적하는 기능

1.3.5.6 압축하면서 백업 수행[편집]

RMAN> backup as compressed backupset database
   2    format '/data/backup/rman/%T_%U' ;

1.3.5.7 압축하면서 전체 archive log file 백업[편집]

RMAN> backup s compressed backupset archivelog all
   2    format '/data/backup/rman/%U_%T' ;

1.3.5.8 RMAN-06059, ORA-19625 - RMAN 백업시 archivelog 경로가 변경 되었을 경우[편집]

오라클의 fast recovery area를 disable 하고 archive log 모드에서 기본 경로가 아닌 다른 directory에 archive log를 저장할 경우 RMAN을 이용한 백업 시 archive log 파일을 못찾는 에러가 발생함.

1.3.5.8.1 에러 예제[편집]
RMAN> backup archivelog all ;

Starting backup at 14-OCT-14
current log archived
using channel ORA_DISK_1

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of backup command at 10/14/2014 01:12:43
RMAN-06059: expected archived log not found, loss of archived log compromises recoverability
ORA-19625: error identifying file /u01/oracle/product/flash_recovery_area/INNIDB/archivelog/2014_10_01/o1_mf_1_21_b2qyqgpg_.arc
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
1.3.5.8.2 해결 방법[편집]
RMAN> change archivelog all crosscheck ;
  • (주의)
    • 위와 같은 방법으로 설정을 한다면 백업 시 backupset이 저장되는 디렉토리는 $ORACLE_HOME/dbs에 저장

1.3.5.9 MultiSection Backup[편집]

하나의 파일이 아주 클 경우 여러 개의 프로세스가 동시에 다른 백업 셋을 생성해서 백업을 받을 수 있음
RMAN> backup as compressed backupset
   2    section size 100m
   3    format '/data/backup/rman/%U_%T'
   4    datafile 1 ;

1.3.5.10 이외 옵션들[편집]

1.3.5.10.1 keep - backup 수행시 backupset 보존기간 설정[편집]
RMAN> backup as compressed backupset tablespace example
   2    format '/data/backup/rman/%U_%T'
   3    keep until time 'sysdate +90' ;         <-- 보존기간을 90일로
1.3.5.10.2 Not backed up[편집]

- 백업 안 된 데이터파일만 골라서 백업하기 - 기준일을 주고 싶으면 since time=sysdate -5 이런식으로 오늘 기준으로 최근 5일이내 추가된 파일을 백업

1.3.5.11 RMAN 백업 진행사항 확인하기[편집]

SELECT SID,SERIAL#,CONTEXT,SOFAR,TOTALWORK,
       ROUND(SOFAR/TOTALWORK*100,2)"%COMPLETE"
       FROM V$SESSION_LONGOPS 
 WHERE OPNAME LIKE 'RMAN%'
   AND OPNAME NOT LIKE '%aggregate%'
   AND TOTALWORK!=0
   AND SOFAR<>TOTALWORK ;

1.4 RMAN 명령어[편집]

1.4.1 RMAN Default값 보기[편집]

RMAN> show all;

1.4.2 현재 DB의 상태보기(Datafile, Tablespace 정보확인)[편집]

RMAN> report schema;

1.4.3 백업된 파일들의 list 와 정보 보기[편집]

RMAN> list backupset;

1.4.4 백업set 지우기[편집]

RMAN> delete backupset 9;

1.4.5 전체 backupset 과 target 서버에 저장된 backupset의 정보 비교[편집]

RMAN> crosscheck backupset;

1.4.6 EXPIRED(실제파일은 없지만 control file에는 저장된 RMAN정보)된 정보 삭제[편집]

RMAN> delete expired backupset;

1.4.7 수동으로 백업받은 파일을 RMAN에 등록하기(rman에서 관리)[편집]

RMAN> catalog datafilecopy '/backup/example01.dbf';  
-- RMAN에서 정보삭제시  change datafilecopy '/backup/example01.dbf' uncatalog;

1.5 주요 백업 예제[편집]

1.5.1 예제 1. 전체 데이터 베이스를 백업[편집]

1.5.1.1 독립형 명령[편집]

RMAN> backup as compressed backupset database
   2    format '/data/backup/rman/%U_%T' ;

1.5.1.2 batch 작업형 명령[편집]

RMAN> run {
   2    allocate channel ch1 device type disk 
   3    format '/data/backup/rman/%U_%T' ;
   4    backup as compressed backupset database ;
   5    }

1.5.2 예제 2. Channel 3개를 할당해서 example, users, system, control file 을 백업[편집]

RMAN> run {
   2    allocate channel ch1 device type disk ;
   3    allocate channel ch2 device type disk ;
   4    allocate channel ch3 device type disk ;
   5    backup as compressed backupset
   6    tablespace example, users, system ;
   7    include current controlfile ;
   8    }


1.5.3 예제 3. 전체 데이터 파일의 위치를 확인 한 후 파일 번호로 백업수행[편집]

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    760      SYSTEM               ***     /data/temp7/system01.dbf
2    560      SYSAUX               ***     /data/temp7/sysaux01.dbf
3    2865     UNDOTBS1             ***     /data/temp7/undotbs01.dbf
4    201      USERS                ***     /data/temp7/users01.dbf
5    345      EXAMPLE              ***     /data/temp7/example01.dbf
6    5        TS_FDA01             ***     /data/temp7/ts_fda01.dbf
7    0        UNDO_FDA             ***     /data/temp7/undo_fda01.dbf
List of Temporary Files

:=======================

File Size(MB) Tablespace           Maxsize(MB) Tempfile Name

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

1    400      TEMP01               32767       /data/temp7/temp01.dbf
RMAN> run {
   2    allocate channel c1 type disk ;
   3    backup as compressed backupset datafile 1,2 ;         <-- SYSTEM, SYSAUX 가 백업됨
   4    }

1.5.4 예제 4. 현재 사용 중인 Control file 만 백업[편집]

RMAN> run {
   2    allocate channel c1 type disk ;
   3    backup current controlfile ; }

1.5.5 예제 5. 아래 조건으로 RMAN 백업[편집]

  • RMAN 을 사용하여 sysaux, example, users 테이블 스페이스를 백업

1) 백업경로

  • sysaux -> /data/backup/open/
  • example -> /data/backup/rman/
  • users -> /data/backup/close/

2) 작업형 명령어 사용

3) channel 은 3개로 병렬작업

4) 각 channel 하나당 크기가 최대 10m 이넘지 않도록 설정

RMAN> run {
allocate channel ch1 type disk maxpicesize 10m;
allocate channel ch2 type disk maxpicesize 10m;
allocate channel ch3 type disk maxpicesize 10m;
backup compressed backupset 
tablespace sysaux channel ch1
format '/data/backup/open/%U_%T' ;
tablespace example channel ch2
format '/data/backup/rman/%U_%T' ;

tablespace users channel ch3
format '/data/backup/close/%U_%T' ;
}

1.5.6 예제 6. 차등 증분 백업 실습[편집]

 arrow_downward level 0 으로 데이터베이스 전체 백업받기

RMAN> run {
   2    allocate channel c1 type disk ;
   3    backup
   4    incremental level 0       
   5    database
   6    format '/data/backup/rman/%U_%T' ;
   7    }


 arrow_downward level 3 으로 users tablespace 만 차등 증분 백업 받기

RMAN> run {
   2    allocate channel c2 type disk ;
   3    backup as compressed backupset
   4    incremental level 3       
   5    tablespace users ;
   6    }

1.5.7 예제 7. 누적 증분 백업하기[편집]

RMAN> run {
   2    allocate channel c2 type disk ;
   3    backup as compressed backupset
   4    incremental level 3 cumulative 
   5    tablespace example ;
   6    }

1.5.8 예제 8. 전체 데이터베이스를 백업하면서 Archive log file 함께 백업하기[편집]

RMAN> backup as compressed backupset database plus archivelog 
   2    format '/data/backup/rman/%U_%T' ;

1.5.9 예제 9. Archive log file 만 백업하기[편집]

RMAN> backup as compressed backupset archivelog all ;

==

2 = = RMAM 백업/복구 시나리오

2.1 RMAN 백업 설정[편집]

2.1.1 DB 아카이브 모드 변경[편집]

SQL> STARTUP MOUNT
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ARCHVIE LOG LIST
SQL> ALTER DATABASE OPEN;

2.2 RMAN 설정/백업[편집]

2.2.1 RMAN 접속[편집]

$rman target / -- nocatalog

2.2.2 device 에 대한 채널 설정[편집]

  • configure 명령어로 파라미터를 수정
RMAN> configure channel device type disk format '/oracle/app/oracle/backup/orcl_%U';

2.2.3 controlfile Auto backup channel 설정[편집]

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/oracle/app/oracle/backup/control/%F';

2.2.4 백업 최적화 옵션[편집]

RMAN> CONFIGURE BACKUP OPTIMIZATION ON;

2.2.5 controlfile Auto Backup 설정[편집]

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;

2.2.6 백업보관주기 설정[편집]

RMAN> configure retention policy to recovery window of 5 days;

2.2.7 백업 설정 확인[편집]

RMAN> show all

2.2.8 rman FULL 백업[편집]

RMAN> backup as compressed backupset database spfile plus archivelog delete input;

2.3 RMAN 장애복구 시나리오[편집]

  • RMAN은 archive mode 에서만 백업 가능

2.4 장애 상황[편집]

2.4.1 system01.dbf datafile 삭제[편집]

$rm -rf /oracle/app/oracle/oradata/system01.dbf

2.4.2 DB 재기동[편집]

SQL> SHUTDOWN ABORT
SQL> STARTUP
...... 에러 발생 ......(data file 오류 내용 확인)
SQL> startup
ORACLE instance started.

Total System Global Area 2533359616 bytes
Fixed Size                  8922088 bytes
Variable Size             687868952 bytes
Database Buffers         1828716544 bytes
Redo Buffers                7852032 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: 'D:\APP\CYKIM\ORADATA\ORCL\SYSTEM01.DBF'

2.4.3 RMAN 복구[편집]

2.4.4 RMAN에서 datafile 번호 확인[편집]

RMAN> list backup;

2.4.5 restore 작업 진행[편집]

  • 백업된 파일로 복원
RMAN> restore datafile 1; -- /tablespace/database/

Starting restore at 08-JAN-20
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=11 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 00001 to D:\APP\CYKIM\ORADATA\ORCL\SYSTEM01.DBF
channel ORA_DISK_1: reading from backup piece D:\APP\BACKUP\ORCL_0EULFSPM_1_1
channel ORA_DISK_1: piece handle=D:\APP\BACKUP\ORCL_0EULFSPM_1_1 tag=TAG20200108T174110
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:55
Finished restore at 08-JAN-20

2.4.6 recover 작업 진행[편집]

  • 복원된 파일에서 문제 복원 작업
RMAN>recover datafile 1; -- /tablespace/database/

2.4.7 DB 오픈[편집]

RMAN> sql 'alter database open';
RMAN> exit;

2.4.8 DB 오픈 확인[편집]

$sqlplus / as sysdba
SQL> SELECT INSTANCE_NAME, STATUS FROM V$INSTANCE;

2.5 케이스별 장애 복구 방법(완전복구)[편집]

2.5.1 (DB 종료없이) 삭제된 파일 복구 방법[편집]

  • ( offline 되는 데이터 파일 삭제된 경우 ) - DB 종료없이 복구
1. 전체 full 백업
2. 파일 삭제
3. 복구
RMAN> sql 'alter tablespace test offline immediate' ;           <-- 해당 데이터파일이 속한 테이블 스페이스 offline 
RMAN> restore tablespace test ;         <-- 백업파일에서 복원 해옴
RMAN> recover tablespace test ;         <-- 복구
RMAN> sql 'alter tablespace test online' ;   <-- 복구완료후 다시 online

2.5.2 (DB 종료 후) 삭제된 파일 복구 방법[편집]

  • ( offline 안되는 데이터 파일 삭제된 경우 ) - DB 종료 후 복구
1. 전체 full 백업
2. 파일 삭제
3. 복구
RMAN> shutdown abort ;
RMAN> restore tablespace system ;
RMAN> recover tablespace database ;        <-- 비정상 종료했기때문에 전체 데이터베이스 복구
RMAN> alter database open ;

2.5.3 임시 경로에서 복구하기[편집]

  • 기존 경로가 아닌 다른 위치로 복구
1. 전체 full 백업
2. 파일 삭제
3. 임시경로로 복원후 복구
RMAN> run {
 sql 'alter tablespace test offline immediate' ;            
 set newname for datafile '/app/oracle/oradata/testdb/test01.dbf'
 to '/data/temp/test01.dbf' ;
 restore tablespace test ;
 switch datafile 6 ;           <-- 이 파일번호는 report schema 에서 확인 할 수 있음   ( 컨트롤파일의 내용변경 )
 recover tablespace test ;
 sql 'alter tablespace test online' ;
 }

3,4 번 줄에서 복원하기전 미리 경로를 지정한 후 5번 줄에서 백업파일을 새로운 경로로 복원, 6번 줄에서 control file 에 있는 경로를 새로운 경로로 변경.

2.5.4 임시 경로에 필요한 데이터 파일만 복원 후 복구하기[편집]

1. 전체 full 백업
2. 파일 삭제
3. 임시경로로 복원 후 복구  ( 데이터파일=백업파일, 컨트롤,리두는 현재사용중인 파일 복사)

파라미터 파일의 컨트롤파일 경로 변경

RMAN> run{
startup mount;
sql "alter database rename file ''/data/temp7/redo01_a.log''          <-- 리두 경로 부터 변경
to ''/data/temp/redo01_a.log''";
sql "alter database rename file ''/data/temp7/redo01_b.log''
to ''/data/temp/redo01_b.log''";
sql "alter database rename file ''/data/temp7/redo02_a.log''
to ''/data/temp/redo02_a.log''";
sql "alter database rename file ''/data/temp7/redo02_b.log''
to ''/data/temp/redo02_b.log''";
sql "alter database rename file ''/data/temp7/redo03_a.log''
to ''/data/temp/redo03_a.log''";
sql "alter database rename file ''/data/temp7/redo03_b.log''
to ''/data/temp/redo03_b.log''";
set newname for datafile 1 to '/data/temp/system01.dbf';          <-- 데이터파일중 필요한 파일만 임시 경로로 변경
set newname for datafile 2 to '/data/temp/sysaux01.dbf';
set newname for datafile 3 to '/data/temp/undotbs01.dbf';
sql "alter database datafile ''/data/temp7/users01.dbf'' offline drop" ;        <-- 필요없는 파일은 offline drop
sql "alter database datafile ''/data/temp7/example01.dbf'' offline drop" ;
sql "alter database create datafile ''/data/temp7/test01.dbf''          <-- 백업이 없는 삭제된 파일을 신규로 생성
as ''/data/temp/test01.dbf''";
restore tablespace system;                         <-- 필요한 테이블 스페이스만 복원
restore tablespace sysaux;
restore tablespace undotbs1;
switch datafile all;                                 <-- 파일 위치 변경내용을 control file 에 반영
recover tablespace system;                    <-- 필요한 테이블스페이스만 복구
recover tablespace sysaux;
recover tablespace undotbs1;
recover tablespace test;
alter database open;
sql "alter database test online";
}

여기 까지 완전 복구 방법



2.6 케이스별 장애 복구 방법(불완전복구)[편집]

2.6.1 삭제 테이블 (Drop table) 후 복구하기[편집]

  • 임시경로 사용
  1. 전체 full 백업
  2. > drop table 장애 발생
  3. > DB 종료 후 임시경로에서 복구
  4. > 파라미터 파일의 컨트롤 파일 경로 변경
RMAN> run {
 startup mount;
 sql "alter database rename file ''/data/temp7/redo01_a.log''
 to ''/data/temp/redo01_a.log''";
 sql "alter database rename file ''/data/temp7/redo01_b.log''
 to ''/data/temp/redo01_b.log''";
 sql "alter database rename file ''/data/temp7/redo02_a.log''
 to ''/data/temp/redo02_a.log''";
 sql "alter database rename file ''/data/temp7/redo02_b.log''
 to ''/data/temp/redo02_b.log''";
 sql "alter database rename file ''/data/temp7/redo03_a.log''
 to ''/data/temp/redo03_a.log''";
 sql "alter database rename file ''/data/temp7/redo03_b.log''
 to ''/data/temp/redo03_b.log''";
 set newname for datafile 1 to '/data/temp/system01.dbf';
 set newname for datafile 2 to '/data/temp/sysaux01.dbf';
 set newname for datafile 3 to '/data/temp/undotbs01.dbf';
 set newname for datafile 4 to '/data/temp/users01.dbf';
 set newname for datafile 5 to '/data/temp/example01.dbf';
 restore database;
 switch datafile all;
 sql 'alter session set nls_date_format="yyyy-mm-dd:hh24:mi:ss"';
 set until time='2014-11-12:07:41:41';
 recover database;
 alter database open resetlogs;
 }

2.6.2 삭제 테이블스페이스 (Drop tablespace) 복구하기[편집]

2.6.2.1 백업 파일이 있을 경우[편집]

  1. 테스트용 Tablespace 생성
  2. > 전체 Full backup
  3. > 예제 데이터 입력후 Tablespace drop 장애 발생
  4. > 임시 경로로 복구에 필요한 파일 복원 후 복구
  • Full 백업중 알아둘것!
    piece handle = /data/backup/rman/03pndnfs_1_1_full_20141112 tag=TAG20141112T115300 <- 복구에 사용될 백업셋이름
    piece handle = /data/backup/rman/04pndnir_1_1_full_20141112 tag=TAG20141112T115300 <- 복구에 사용될 controlfile이름
  • 임시경로로 복구에 필요한 파일 복원 후 복구 ( 파라미터 파일의 controlfile 위치 바꾸고, 현재 사용중인 로그파일만 이동 )
RMAN> run {
startup nomount;
restore controlfile from '/data/backup/rman/07pne4hj_1_1_20141112';
alter database mount;
sql "alter database rename file ''/data/temp3/redo01_a.log''
to ''/data/temp4/redo01_a.log''";
sql "alter database rename file ''/data/temp3/redo01_b.log''
to ''/data/temp4/redo01_b.log''";
sql "alter database rename file ''/data/temp3/redo02_a.log''
to ''/data/temp4/redo02_a.log''";
sql "alter database rename file ''/data/temp3/redo02_b.log''
to ''/data/temp4/redo02_b.log''";
sql "alter database rename file ''/data/temp3/redo03_a.log''
to ''/data/temp4/redo03_a.log''";
sql "alter database rename file ''/data/temp3/redo03_b.log''
to ''/data/temp4/redo03_b.log''";
set newname for datafile 1 to '/data/temp4/system01.dbf';
set newname for datafile 2 to '/data/temp4/sysaux01.dbf';
set newname for datafile 3 to '/data/temp4/undotbs01.dbf';
set newname for datafile 4 to '/data/temp4/users01.dbf';
set newname for datafile 5 to '/data/temp4/example01.dbf';
set newname for datafile 7 to '/data/temp4/rtest04.dbf';
sql 'alter session set nls_date_format="yyyy-mm-dd:hh24:mi:ss"';
set until time='2014-11-12:12:52:34';
restore database from tag 'TAG20141112T124903';
switch datafile all;
recover database ;
alter database open resetlogs;
}

2.6.2.2 백업 파일이 없을 경우[편집]

  1. DB 전체 Full backup
  2. > 신규 Tablespace 생성 후 데이터 생성
  3. > Drop Tablespace 삭제/ 백업파일 없음
  4. > Tablespace 복구
  • Full 백업중 알아둘것 !
    piece handle = /data/backup/rman/03pndnfs_1_1_full_20141112 tag=TAG20141112T115300 <- 복구에 사용될 백업셋이름
    piece handle = /data/backup/rman/04pndnir_1_1_full_20141112 tag=TAG20141112T115300 <- 복구에 사용될 controlfile이름
  • 신규 테이블스페이스 생성 후 테스트용 테이블 생성하고 시간확인
  • Drop tablespace 수행해서 장애 발생
  • DB 종료 후 임시경로로 필요한 파일 이동 후 복구 ( 현재 사용중인 로그파일만 복사 )
  • 파라미터 파일의 컨트롤 파일 경로 변경
    • RMAN 에 접속하여 Control File 복원한 후 MOUNT 상태로 변경하여 파일위치 변경 하고 복원
RMAN> run {
startup nomount;
restore controlfile from '/data/backup/rman/04pndnir_1_1_full_20141112';      <-- 컨트롤파일 복원
alter database mount;
sql "alter database rename file ''/data/temp/redo01_a.log''
to ''/data/temp3/redo01_a.log''";
sql "alter database rename file ''/data/temp/redo01_b.log''
to ''/data/temp3/redo01_b.log''";
sql "alter database rename file ''/data/temp/redo02_a.log''
 to ''/data/temp3/redo02_a.log''";
 sql "alter database rename file ''/data/temp/redo02_b.log''
 to ''/data/temp3/redo02_b.log''";
 sql "alter database rename file ''/data/temp/redo03_a.log''
 to ''/data/temp3/redo03_a.log''";
 sql "alter database rename file ''/data/temp/redo03_b.log''
 to ''/data/temp3/redo03_b.log''";
 set newname for datafile 1 to '/data/temp3/system01.dbf';
 set newname for datafile 2 to '/data/temp3/sysaux01.dbf';
 set newname for datafile 3 to '/data/temp3/undotbs01.dbf';
 set newname for datafile 4 to '/data/temp3/users01.dbf';
 set newname for datafile 5 to '/data/temp3/example01.dbf';
 sql 'alter session set nls_date_format="yyyy-mm-dd:hh24:mi:ss"';
 set until time='2014-11-12:09:12:19';
 restore database from tag 'TAG20141112T090811';
 switch datafile all;
 }

복원 완료 -> 복구 시작

RMAN> run {
sql 'alter session set nls_date_format="yyyy-mm-dd:hh24:mi:ss"';
set until time='2014-11-12:09:12:19';
recover database;
}

관리자가 직접 복구할때는 삭제된 데이터파일을 수동으로 생성해 준 후 복구 시도 했지만 RMAN 으로 복구 할때는 자동으로 생성해서 복구 됨 ==