Recovery Manager (RMAN) _ 백업하기
[Backup&Recovery]/백업복구 2014. 11. 13. 12:18 |Recovery Manager (RMAN)
1. RMAN의 주요 특징
① 자주 실행하는 작업을 스크립트로 저장.
- RMAN Recovery Catalog Server를 사용할 경우 자주 사용하는 백업 명령어들을 스크립트로 저장한 후 불러서 사용할 수 있다.
② 증분 블록 레벨 백업 기능 지원.
- 과거에 백업받은 내역을 조사해서 그 기준 백업 이후에 변경된 블록만 찾아서 백업을 수행할 수 있다.
예를들어, 100M 파일에서 10M만 변경되었을 때, 변경된 10M만 다시 백업받을 수 있기 때문에 백업 공간을 절약하고, 백업시간 단축.
③ 사용되지 않은 블록 건너뛰고 백업수행.
- 전체 data file이 100M라 하더라도 실제 사용하는 용량은 아주 작을 수 있으므로, RMAN을 사용할 경우 총 100M중에 현재 사용하고 있는 블록만 찾아서 백업을 수행한다. Backupset으로 백업을 수행할 경우 자동 지원된다.
④ 백업수행 중 훼손된 블록 감지.
- 일반 백업에서는 훼손된 블록이 있을 경우 장애가 발생하고 백업이 중단되지만, RMAN을 사용하면 백업 수행 도중 훼손된 블록을 감지해서 마킹해두고 계속 백업을 진행한다.
⑤ ASM 기반 유일한 백업도구.
- ASM 기반으로 Storage를 관리하는 경우에는 RMAN밖에 백업할 수 있는 방법이 없다.
⑥ 백업수행 시 압축 지원.
- RMAN으로 백업을 진행하면서 동시에 압축까지 진행할 수 있는데, 이때 압축 기능으로 인한 자원손실(CPU부하)는 거의 없으며 압축 효율도 좋으므로 꼭 사용하는 것을 권장한다.
2. Recovery Manager 구성도.
: 관리자가 RMAN 유틸리티에게 백업이나 복구를 명령하면 RMAN유틸리티는 관리자를 대신하여 대상 서버에 접속하여 백업을 수행한다.
- Recovery catalog Server : 백업 관련 정보를 catalog Database에 저장하고, 없다면 Target Database의 control file에 기록한다. 그리고 복구 카탈로그안에는 백업파일이 들어가는 것이아니라, 어디에 백업을 받았는지에 관한 내역만 들어가는 것이다.
3. RMAN Memory 구조.
: RMAN은 백업 및 복구를 수행할 때 기본적으로 PGA를 사용하며, PGA공간이 부족할 경우 SGA(Large pool, shared pool)를 사용하여 백업을 수행한다.
- Input buffer : 데이터파일에서 백업해야 하는 블록만 추출해서 메모리로 가져올 때 사용.
- Output buffer : Backup Set (백업파일)에 저장하기 위해 사용.
① 각 Data file 별로 input buffer가 생성된다. 이 input buffer에 data file에서 백업 받아야 할 블록을 가져온다.
② 여러 개의 input buffer중 하나가 가득차면 output buffer로 블록을 복사해온다.
③ ouput buffer에는 여러 data file의 블록이 혼재하게 되며 output buffer 역시 가득차게 되면 backup set에 내려쓰게 된다.
** 그래서 RMAN backup set에는 여러 파일들의 블록들이 혼재되어 있다.
4. Channel 설정하기.
channel이란? : 백업과 복구를 하는 경로.
- channel을 할당해야 RMAN이 백업, 복구를 수행할 수 있다.
- 복구를 할 때는 channel을 할당하지 않아도 되지만, 백업을 할 경우는 반드시 channel을 할당해 줘야 한다.
1) 자동 Channel 설정하기.
: 자동 channel이란 백업을 수행할 때 별도의 경로를 주지 않아도 정해진 위치로 백업을 받는 것을 말하며 default channel의 의미가있다.
(1) default device가 기본경로로 설정. (파라미터 파일의 db_recovery_file_dest 파라미터의 경로)
① rman에 접속.
- 복구 카탈로그 서버 사용시 (복구카탈로그가 있을 경우에만 사용)
$vi /app/oracle/product/11g/network/admin/listener.ora --리스너파일을 열어 ip주소와, SID명을 맞춰준다.
$lsnrctl start --리스너 시작
$vi /app/oracle/product/11g/network/admin/tnsnames.ora --tnsnames파일을 열어 ip주소와, SID명을 맞춰준다.
$rman target / catalog rcuser/rcuser@rcserver
- 복구 카탈로그 서버 사용 안 할 경우 (control file안에 기본으로 있다.)
$rman target sys/oracle
② 자동 channel을 설정 -> default device가 설정된다.
RMAN> configure default device type to disk;
(2) default device를 특정한 경로로 설정.
① 백업 경로파일을 만들어 준 후, rman에 접속합니다.
$ mkdir /data/backup/rman
$ rman target sys/oracle
② tablespace example 을 백업받아 보면 기본경로에 백업이 받아집니다.
RMAN> backup tablespace example ;
-- 기본 경로인 $ORACLE_BASE/fast_recovery_area/ 아래로 백업 파일을 저장합니다.
③ 이번에는 기본경로를 다른 곳으로 설정한 후 백업을 수행하면, 그 특정 경로로 백업이 받아집니다.
RMAN> configure channel device type disk
2> format '/data/backup/rman/%U_%T';
2) 수동 Channel 설정하기.
: 수동 channel이란 백업을 수행할 때 백업받을 경로를 직접 지정해주는 것.
- 자동으로 설정된 경로보다 수동으로 설정된 경로를 우선적으로 적용하여 백업을 수행하게 된다.
(1) 작업형 명령어를 사용하여 channel 설정.
RMAN> run { |
(2) 독립형 명령어로 백업수행.
RMAN> backup tablespace example format '/data/backup/open/%U_%T' ;
(3) Backup set의 이름을 직접 지정하여 백업수행.
RMAN> backup tablespace example
2> format '/data/backup/rman/%T_example.bak';
5. RMAN 백업 종류.
1) backupset으로 백업수행 (default)
* backupset이란?
: RMAN이 백업파일을 만들 때 RMAN만이 알 수 있는 형태로 백업파일을 생성하는 것. (기본 값)
-> 이 방법으로 백업을 수행해야 RMAN 백업의 장점들을 모두 사용할 수 있다.
* backup piece란?
: backupset의 크기가 너무 클 경우 분할해서 여러 개의 파일로 나누어서 백업을 받을 수 있는데, 그 분할되는 하나의 백업 파일을 말한다. 마치 용량이 아주 큰 파일을 특정 용량으로 분할 압축할 때, 분할압축된 하나 하나를 backup piece라고 생각하면 된다.
2) Image copy로 백업수행
* Image copy란?
: os명령어로 begin backup 하는 것과 가장 유사한 방법.
-> 이 방법으로 백업을 수행할 경우 RMAN백업의 장점인 '사용 중인 블록만 백업받는 기능이나 증분백업받는 기능'등의 기능을 사용할 수 없다.
RMAN> copy
|
6. RMAN 백업시 주의 사항.
1. open 상태에서 백업을 받으려면 데이터베이스가 archive log mode로 운영되어야 한다. 2. 데이터베이스가 마운트 또는 오픈되어 있어야 한다. 3. 운영중인 온라인 리두 로그 파일은 백업이 불가능하다. 4. 노 아카이브 모드에서는 clean 백업만 사용가능하다. 5. clean backup이란 오프라인 테이블스페이스나 읽기 전용 테이블스페이스 백업을 의미한다. 6. 해당 테이블스페이스는 백업모드 이어서는 안된다. 7. RMAN으로 백업을 수행하는 것은 Begin backup시의 조건들과 동일해야 한다.
|
7. RMAN 명령어 종류.
1) 독립형 명령 (stand alone)
: RMAN> 프롬프트에 1개의 명령어만 들어가는 방식이다.
|
2) 작업형 명령 : 프로그램의 스크립트처럼 여러 개의 명령어를 한꺼번에 사용할 수 있는 방법.
- user tablespae와 example tablespace를 다른 channel을 할당해서 다른 경로로 백업받는 방법.
RMAN> run { |
8. 증분 백업 (Incremental backup) : 이전에 백업받았던 백업파일과 비교해서 변경된 부분만 골라서 백업을 수행하는 것.
(이 기능은 Enterprise Edition에서만 지원되고, 10g버전부터는 block change tracking이라는 기능이 지원되서 더빠른 증분백업이 지원됨.)
1) 차등증분백업
: 백업받을 때 설정했던 숫자가 자기보다 작거나 같으면 그 시점부터 지금까지 변경된 모든 데이터를 백업받는 것.
RMAN> run {
|
2) 누적증분백업
: 백업받을 때 설정했던 숫자가 자기보다 작으면 그 시점부터 지금까지 변경된 모든 데이터를 백업받는 것.
->차등증분백업과 다른점이 숫자가 같은경우에는 해당하지 않으므로, 숫자가 같은경우에는 elvel에 C를 붙여 표시.
ex. 만약 수요일 백업전에 장애가 발생했다면 일요일 전체백업파일과 화요일 백업파일 하나만 복구하면 전체데이터를 다 복구할 수 있다.
RMAN> run {
|
3) Block Change tracking 기능 활성화 후 증분 백업 수행 (사용하지 말 것.)
: Block change tracking기능이란 데이터 블록들의 변경된 블록만 추적하는 기능을 의미한다. 블록들의 변경사항은 특정파일에 저장되어 관리된다. (이 기능은 oracle10g enterprise edition에서부터 지원된다.)
9. 압축하면서 백업수행하기(10g, 11g 공통)
* RMAN에서 지원하는 압축 기본값 : BZip2 (ZLIB는 옵션으로 선택 가능)
BZip2 |
장점 : 압축 효율이 가장 좋다. 단점 : CPU 부하가 많이 걸릴 수 있고, 속도가 느리다. |
Zlib (11gR1부터) |
장점 : CPU 부하가 적고 속도가 빠르다. 단점 : 압축 효율이 상대적으로 좋지 않다. -> 11g버전부터 Advanced Compression Option이 설치되어야 한다. |
1)압축하지 않고 기본모드로 전체 Database 백업수행.
RMAN> backup database format '/data/backup/rman/%T_full_%U' ;
|
2) 압축하면서 전체 Database 백업 수행 ★(압축 효율이 좋으므로, 꼭 사용하도록 한다.)
RMAN> backup as compressed backupset database |
** 위 두 백업 세트의 크기를 비교.
3) 압축하면서 전체 Archive log file 백업
RMAN> backup as compressed backupset archivelog all
|
** 에러 : RMAN-06059 , ORA-19625 : RMAN 백업시 archivelog 경로가 변경되었을 경우, 오라클의 fast recovery area를 disable하고 archive log 모드에서 기본경로가 아닌 다른 direcotry에 archive log를 저장할 경우, RMAN을 이용한 백업시 archivelog파일을 못찾는 에러 발생.
** 해결방법 : RMAN> change archivelog all crosscheck;
** 주의 : 백업시 backupset이 저장되는 디렉토리는 $ORACLE_HOME/dbs에 저장됨. 다시 실습을 위해 /data/backup/rman으로 경로를 설정해주겠습니다. RMAN>configure channel device type disk 2>format '/data/backup/rman/%U_%T';
|
10. MultiSection Backup(11g new feature) (거의 필요 없다.)
: 만약 한 개의 파일이 아주 클 경우 channel별로 분할해서 받을 수 없는데, MultiSection Backup기능은 하나의 큰 파일을 여러 개의 프로세스가 동시에 다른 백업셋을 생성해서 백업을 받을 수 있는 기능이다.
* shcema 조회 : RMAN>report schema;
* 특정 tablespace를 multisection으로 백업수행.
RMAN> backup as compressed backupset
|
11. 그외 각종 백업 옵션들 사용하기.
1) keep-backup 수행시 backupset 보존기간 설정하기.
RMAN> backup as compressed backupset tablespace example
|
2) Not backed up - 백업 안 된 데이터파일만 골라서 백업하기.
: 특정 시점 이후 추가된 테이블스페이스나 데이터파일이 있을 경우 그 부분만 백업을 수행하는 기능.
RMAN> backup as compressed backupset database ** 기준일을 줘서 오늘을 기준으로 며칠 이내 추가된 파일을 백업하고 싶을 때에는 since옵션을 사용한다. RMAN> backup as compressed backupset database
|
① 실습을 위해 전체 백업 수행.
② 테이블스페이스와 데이터파일을 추가.
③ 백업안된 데이터파일만 골라서 백업합니다.
12. RMAN 백업 작업 진행사항 확인하기
SYS> SELECT SID, SERIAL#, CONTEXT, SOFAR, TOTALWORK,
SYS> save rmansel.sql -- rmansel.sql로 저장해서 다음에 편하게 사용하겠습니다..
|
13. 주요 백업 예제들
(563p~ 567p)