오라클/백업/복구

RMAN

김포춘 2014. 11. 13. 18:11
반응형

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

- 관리자가 RMAN 에게 명령하면 RMAN 이 알아서 백업/복구 실행



RMAN 의 주요특징


- 자주 실행하는 작업을 스크립트로 저장 : RMAN Recover Catalog Server를 사용할 경우 자주 사용하는 백업 명령어들을 스크립트로 저장한 후 불러서 사용할 수 있음


- 증분 블록 레벨 백업 기능 지원 : 과거 백업 받은 내역을 조사해서 그 기준 백업 이후에 변경된 블록만 찾아서 백업 수행 가능

 예 ) 기존 100M 파일에서 10M 만 변경되도 100M 를 백업받아야 하지만 RMAN 은 변경된 10M 만 백업 가능


- 사용되지 않은 블록 건너뛰고 백업 수행 : 총 100M 을 백업 받는다고 사용안한 블록은 건너뛰고 현재 사용중인 블록만 찾아서 백업

 

- 백업 수행 중 훼손된 블록 감지 : 백업 수행중 훼손된 블록을 감지해서 마킹해두고 계속 백업 수행


- ASM 기반 유일한 백업 도구 : ASM 기반으로 Storage 를 관리하는 경우는 RMAN외 백업할수 있는 방법이 없음


- 백업 수행시 압축 지원 : RMAN으로 백업을 진행하면서 동시에 압축까지 가능, 이때 압축으로 인한 자원 손실등이 거의 없음


- RMAN 구성도 -


RMAN 이용 백업 / 복구 순서

1. 관리자가 RMAN 유틸리티에게 백업 / 복구 명령

2. RMAN 은 관리자를 대신해 대상 서버(target database) 에 접속하여 백업 / 복구를 수행

3. Recover Catalog Server 가 있으면 백업 관련 정보를 Catalog Database 에 기록, 없다면 Target Database 의 Controlfile 에기록


RMAN 은 기본적으로 PGA 사용, PGA 공간이 부족할 경우 SGA를 사용하여 백업을 수행


채널 설정하기

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


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 디렉토리에 백업파일이 생성됨



2. 수동 Channel 설정

백업을 수행할 때 백업 받을 경로를 직접 지정


RMAN> backup tablespace example format '/data/backup/open/%U_%T' ; 



RMAN 백업 종류


1. backupset 으로 백업 수행 ( default )

Backupset = RMAN이 백업파일을 만들 때 RMAN 만이 알 수 있는 형태로 백업파일을 생성하는데 이것을 backupset 이라함

Backuppiece = backupset 의 크기가 너무 클 경우 분할해서 여러 개의 파일로 나누어 백업 받는데 분할되는 하나의 백업파일을 backuppiece 라 한다.


2. Image copy로 백업 수행 ( begin backup 과 비슷한 개념, 백업보다 카피에 많이 사용 )

RMAN> copy

    2    datafile '/app/oracle/oradata/testdb/example01.dbf'

    3    to '/data/backup/rman/example01.dbf.bak' ;



RMAN 백업시 주의사항

- open 상태에서 백업을 받으려면 DB가 archive log mode 로 운영되어야 한다.

- DB가 마운트 또는 오픈상태여야 한다.

- 운영중인 온라인 리두로그 파일은 백업이 불가

- 노 아카이브모드에서는 Clean 백업만 사용가능

- Clean 백업이란 오프라인 테이블스페이스나 읽기전용 테이블스페이스 백업을 의미

- RMAN 으로 백업을 수행하는 것은 Begin backup시의 조건들과 동일해야 함


RMAN 명령어 종류

1. 독립형 명령 - RMAN> prompt 에 1개의 명령어만 들어가는 방식


RMAN> backup tablespace example ;  


2. 작업형 명령 - 프로그램의 스크립트처럼 여러 개의 명령어를 한꺼번에 사용할 수 있는 방법


RMAN> run {

   2    allocate channel ch1 type disk maxpiecesize 10m ;

   3    allocate channel ch2 type disk maxpiecesize 50m ;

   4    backup

   5    tablespace users channel ch1

   6    format '/data/backup/close/%T_users.bak' ;

   7    tablespace example channel ch2

   8    format '/data/backup/close/%T_example.bak' ;

   9    }


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

차등 증분 백업 : 백업 받을 때 설정했던 숫자가 자기보다 작거나 같으면 그시점부터 지금까지 모든 데이터를 백업

누적 증분 백업 : 백업 받을 때 설정했던 숫자가 자기보다 작을경우 그 시점부터 지금까지 모든 데이터를 백업


RMAN> run {

   2    allocate channel c1 type disk ;

   3    backup

   4    incremental level 0       <-- 차등 증분 백업을 의미

   5    database

   6    format '/data/backup/rman/%U_%T' ;

   7    }


RMAN> run {

   2    allocate channel c2 type disk ;

   3    backup

   4    incremental level 3 cumulative       <-- 누적 증분 백업을 의미

   5    tablespace example ;

   6    }


Block change tracking : 데이터 블록들의 변경된 블록만 추적하는 기능




압축하면서 백업 수행

RMAN> backup as compressed backupset database

   2    format '/data/backup/rman/%T_%U' ;


압축하면서 전체 archive log file 백업 

RMAN> backup s compressed backupset archivelog all

   2    format '/data/backup/rman/%U_%T' ;

RMAN-06059, ORA-19625 - RMAN 백업시 archivelog 경로가 변경 되었을 경우

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

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


2. 해결 방법

RMAN> change archivelog all crosscheck ;


** 주의

위와 같은 방법으로 설정을 한다면 백업 시 backupset이 저장되는 디렉토리는 $ORACLE_HOME/dbs에 저장



MultiSection Backup

하나의 파일이 아주 클 경우 여러 개의 프로세스가 동시에 다른 백업 셋을 생성해서 백업을 받을 수 있음


RMAN> backup as compressed backupset

   2    section size 100m

   3    format '/data/backup/rman/%U_%T'

   4    datafile 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일로


Not backed up - 백업 안 된 데이터파일만 골라서 백업하기 

- 기준일을 주고 싶으면 since time=sysdate -5  이런식으로 오늘 기준으로 최근 5일이내 추가된 파일을 백업




RMAN 백업 진행사항 확인하기


SYS> SELECT SID,SERIAL#,CONTEXT,SOFAR,TOTALWORK,

  2    ROUND(SOFAR/TOTALWORK*100,2)"%COMPLETE"

  3    FROM V$SESSION_LONGOPS 

  4    WHERE OPNAME LIKE 'RMAN%'

  5    AND OPNAME NOT LIKE '%aggregate%'

  6    AND TOTALWORK!=0

  7    AND SOFAR<>TOTALWORK ;



주요 백업 예제


예제 1. 전체 데이터 베이스를 백업

독립형

RMAN> backup as compressed backupset database

   2    format '/data/backup/rman/%U_%T' ;


작업형

RMAN> run {

   2    allocate channel ch1 device type disk 

   3    format '/data/backup/rman/%U_%T' ;

   4    backup as compressed backupset database ;

   5    }

예제 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    }


예제 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    }


예제 4. 현재 사용 중인 Control file 만 백업


RMAN> run {

   2    allocate channel c1 type disk ;

   3    backup current controlfile ; }


예제 5. 아래 조건으로 RMAN  백업


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

* 백업경로 sysaux -> /data/backup/open/

                example -> /data/backup/rman/

                users -> /data/backup/close/

* 작업형 명령어 사용

* channel 은 3개로 병렬작업

* 각 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' ;

}


예제 6. 차등 증분 백업 실습

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    }


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    }


예제 7. 누적 증분 백업하기


RMAN> run {

   2    allocate channel c2 type disk ;

   3    backup as compressed backupset

   4    incremental level 3 cumulative    

   5    tablespace example ;

   6    }


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


RMAN> backup as compressed backupset database plus archivelog 

   2    format '/data/backup/rman/%U_%T' ;


예제 9. Archive log file 만 백업하기

RMAN> backup as compressed backupset archivelog all ;



반응형

'오라클 > 백업/복구' 카테고리의 다른 글

TTS(Transportable Tablespace) Migration  (1) 2015.07.24
RMAN+Clone DB 사용해서 복구  (0) 2014.11.17
RMAN 복구하기  (0) 2014.11.14
Flashback  (0) 2014.11.12
Clone DB  (0) 2014.11.10
sql loader  (0) 2014.11.10
데이터 이동하기  (0) 2014.11.06