본문 바로가기

오라클 백업/복구

RMAN - 백업


대상


가능 대상

- database (all data file + 현재 control file)

- datafile (current / image copy)

- control file (current / image copy)

- tablespace

- archive redo log


백업되지 않는 대상

- online redo log file

- init.ora

- password file

- listener.ora

- tnsnames.ora 



종류


1) backup set으로 백업 수행 (default)

- RMAN이 백업 파일을 만들 때 RMAN 만이 알 수 있는 형태로 백업 파일을 생성

- backup set 크기가 너무 클 경우 분할해서 여러개의 파일로 나눠서 백업 받을 시,

분할 되는 하나의 백업 파일을 backup piece라고 함



2) Image copy 로 백업 수행

- OS 명령어로 begin backup 하는 것과 가장 유사항 방법

- RMAN 백업 장점인 사용중인 블록만 백업 받거나, 증분 백업 받는 기능 등을 사용할 수 없음


eg)

RMAN> copy

2> datafile '/data2/vol1/users01.dbf' 

3> to '/data2/backup/rman/users01.dbf' ;



제한 사항

- open 상태에서 백업 수행 시, 데이터 베이스는 archive log mode로 운영되어야 함

- 데이터 베이스가 마운트 또는 오픈 되어있어야 함

- online redo log는 백업 불가능




명령어


1) 독립형 명령 - stand alone

RMAN> prompt에 1개의 명령어만 들어가는 방식, 한 줄이 아니라 ; <- 세미콜론이 한개 이면 한개의 명령어


eg) 

RMAN> backup tablespace example ;

얘랑

RMAN>backup

2> tablespace

3> example ;

얘랑 둘 다 독립형 명령어!



2) 작업형 명령

여러개의 명령어를 한꺼번에 사용 할 수 있음

run { 수행할 명령들 ; } 의 형식으로 구성됨


eg)

RMAN> run {

2> allocate channel c1 type disk maxpiecesize 10M ;

3> allocate channel c2 type disk maxpiecesize 50M ;

4> backup

5> tablespace users channel c1

6> format '/data2/backup/rman/%U_%T'

7> tablespace example channel c2

8> format '/data2/backup/rman/%U_%T' ;

9> }


--> maxpiecesize는 하나의 backup piece 사이즈가 10M 라는 의미
작업형 명령은 채널 설정 해줘야 좋음 channel 하나당, server process 하나씩 붙어서
users tablespace 와 example tablespace 백업을 동시에 함 = 병렬 backup


좀더 예를 살펴보면...
1. 전체 데이터 베이스 백업

RMAN> run {
2> allocate channel c1 device type disk ;
3> format '/data2/backup/rman/%U_%T' ;
4> backup database ;
5> }


2. channel 3개 할당 후 example, users, system, control file만 백업

RMAN> run {
2> allocate channel c1 device type disk ;
3> allocate channel c2 device type disk ;
4> allocate channel c3 device type disk ;
5> backup
6> tablespace example, users, system
7> include current controlfile ;
8> }


3. tablespace 이름이 아닌 data file 명으로 백업

RMAN> run {
2> allocate channel ch1 type disk ;
3> backup datafile 1,2,3,4,5 ;
4> }

--> 여기서 숫자의 의미는 file#를 뜻함, report shema 명령어로 확인 가능하다.


4. 현재 control file 만 백업

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

5. channel 3개로sysaux, example, system tablespace 한번에 병렬 백업, 백업 하나의 크기가 최대 10M 넘지 않도록!

RMAN> run {
2> allocate channel c1 type disk maxpiecesize 10M ;
3> allocate channel c2 type disk maxpiecesize 10M ;
4> allocate channel c3 type disk maxpiecesize 10M ;
5> backup
6> tablespace example channel c1
7> format '/data2/backup/rman/%U_%T'
8> tablespace system channel c2
9> format '/data/backup/close/%U_%T'
10> tablespace sysaux channel c3
11> format '/data/backup/open/%U_%T' ;
12> }



증분 백업 (Incremental backup)

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

Enterprise Edition에서만 지원 됨





1) 차등 증분 백업

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


쓰는 법

backup incremental level n

n에는 0~5 까지의 값이 들어갈 수 있다.


eg)

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




2) 누적 증분 백업

무조건 작은 숫자가 나온 시점부터 지금까지의 모든 데이터를 백업


쓰는 법

backup incremental level n cummulative

n에는 0~5 까지의 값이 들어갈 수 있다.


eg)

RMAN> run {
2> allocate channel c1 type disk ;
3> backup 
4> incremental level 3 cummulative
5> tablespace example ;
6> }


목요일 백업 전에 장애가 발생했다고 가정하면, 

일요일 전체 백업 받은 파일 복원 + 수요일 백업 파일만 복구 하면 전체 데이터를 다 복구 할 수 있음




압축하면서 백업 수행

backup as compressed backupset


백업을 하는 동시에 압축 시작

시간이 오래 걸리지는 않는다. 하는거 안하는거 시간차이 별로 없어


eg)

RMAN> backup as compressed backupset database

2> format '/data2/backup/rman/%U_%T' ;


archive redo log file 도 한꺼번에 압축해서 백업 가능

eg)

RMAN> backup as compressed backupset archivelog all 

2> format '/data2/backup/rman/%U_%T' ;




MultiSection Backup (11g New Feature)

한개의 파일이 아주 크면 channel 별로 분할해서 백업 받을 수 없음

이 문제를 해결하기 위해 나온 기능

하나의 큰 파일을 여러개의 프로세스가 동시에 백업받는 기능, 병렬 백업이랑은 다르다.

하지만 backup piece로 받는게 더 효율적...


eg)

RMAN> backup as compressed backupset

2> section size 100m

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

4> datafile 1 ;



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







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

RMAN - 복구 (불완전 복구)  (0) 2013.02.19
RMAN - 복구 (완전 복구)  (0) 2013.02.19
RMAN - Recovery Catalog와 Channel  (0) 2013.02.18
Flashback 3 - Database Level  (0) 2013.02.17
Flashback 2 - Table Level  (0) 2013.02.14