행위

오라클 rman

DB CAFE

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 ;