"오라클 rman 개요"의 두 판 사이의 차이
DB CAFE
45번째 줄: | 45번째 줄: | ||
</source> | </source> | ||
or | or | ||
− | + | <source lang=bash> | |
[oracle@localhost~]$ rman target sys/oracle ( 복구 카탈로그 서버 사용 안할 경우 ) | [oracle@localhost~]$ rman target sys/oracle ( 복구 카탈로그 서버 사용 안할 경우 ) | ||
− | + | </source> | |
+ | <source lang=sql> | ||
RMAN> configure default device type to disk ; <-- 자동 채널 설정 명령어 | RMAN> configure default device type to disk ; <-- 자동 채널 설정 명령어 | ||
− | + | </source> | |
-> 이렇게 하면 default device 가 파라미터 파일의 db_recovery_file_dest 파라미터 경로로 설정 됨 | -> 이렇게 하면 default device 가 파라미터 파일의 db_recovery_file_dest 파라미터 경로로 설정 됨 | ||
or | or | ||
− | + | <source lang=sql> | |
RMAN> configure channel device type disk | RMAN> configure channel device type disk | ||
− | |||
2 format '/data/backup/rman/%U_%T' ; <-- /data/backup/rman 디렉토리에 백업파일이 생성됨 | 2 format '/data/backup/rman/%U_%T' ; <-- /data/backup/rman 디렉토리에 백업파일이 생성됨 | ||
− | + | </source> | |
63번째 줄: | 63번째 줄: | ||
백업을 수행할 때 백업 받을 경로를 직접 지정 | 백업을 수행할 때 백업 받을 경로를 직접 지정 | ||
− | + | <source lang=sql> | |
RMAN> backup tablespace example format '/data/backup/open/%U_%T' ; | RMAN> backup tablespace example format '/data/backup/open/%U_%T' ; | ||
− | + | </source> | |
77번째 줄: | 77번째 줄: | ||
2. Image copy로 백업 수행 ( begin backup 과 비슷한 개념, 백업보다 카피에 많이 사용 ) | 2. Image copy로 백업 수행 ( begin backup 과 비슷한 개념, 백업보다 카피에 많이 사용 ) | ||
− | + | <source lang=sql> | |
RMAN> copy | RMAN> copy | ||
− | |||
2 datafile '/app/oracle/oradata/testdb/example01.dbf' | 2 datafile '/app/oracle/oradata/testdb/example01.dbf' | ||
− | |||
3 to '/data/backup/rman/example01.dbf.bak' ; | 3 to '/data/backup/rman/example01.dbf.bak' ; | ||
− | + | </source> | |
103번째 줄: | 101번째 줄: | ||
1. 독립형 명령 - RMAN> prompt 에 1개의 명령어만 들어가는 방식 | 1. 독립형 명령 - RMAN> prompt 에 1개의 명령어만 들어가는 방식 | ||
− | + | <source lang=sql> | |
RMAN> backup tablespace example ; | RMAN> backup tablespace example ; | ||
− | + | </source> | |
2. 작업형 명령 - 프로그램의 스크립트처럼 여러 개의 명령어를 한꺼번에 사용할 수 있는 방법 | 2. 작업형 명령 - 프로그램의 스크립트처럼 여러 개의 명령어를 한꺼번에 사용할 수 있는 방법 | ||
− | + | <source lang=sql> | |
RMAN> run { | RMAN> run { | ||
− | |||
2 allocate channel ch1 type disk maxpiecesize 10m ; | 2 allocate channel ch1 type disk maxpiecesize 10m ; | ||
− | |||
3 allocate channel ch2 type disk maxpiecesize 50m ; | 3 allocate channel ch2 type disk maxpiecesize 50m ; | ||
− | |||
4 backup | 4 backup | ||
− | |||
5 tablespace users channel ch1 | 5 tablespace users channel ch1 | ||
− | |||
6 format '/data/backup/close/%T_users.bak' ; | 6 format '/data/backup/close/%T_users.bak' ; | ||
− | |||
7 tablespace example channel ch2 | 7 tablespace example channel ch2 | ||
− | |||
8 format '/data/backup/close/%T_example.bak' ; | 8 format '/data/backup/close/%T_example.bak' ; | ||
− | |||
9 } | 9 } | ||
+ | </source> | ||
증분 백업 - 이전에 백업받았던 백업파일과 비교해서 변경된 부분만 골라서 백업을 수행 | 증분 백업 - 이전에 백업받았던 백업파일과 비교해서 변경된 부분만 골라서 백업을 수행 | ||
131번째 줄: | 122번째 줄: | ||
누적 증분 백업 : 백업 받을 때 설정했던 숫자가 자기보다 작을경우 그 시점부터 지금까지 모든 데이터를 백업 | 누적 증분 백업 : 백업 받을 때 설정했던 숫자가 자기보다 작을경우 그 시점부터 지금까지 모든 데이터를 백업 | ||
− | + | <source lang=sql> | |
RMAN> run { | RMAN> run { | ||
− | |||
2 allocate channel c1 type disk ; | 2 allocate channel c1 type disk ; | ||
− | |||
3 backup | 3 backup | ||
− | |||
4 incremental level 0 <-- 차등 증분 백업을 의미 | 4 incremental level 0 <-- 차등 증분 백업을 의미 | ||
− | |||
5 database | 5 database | ||
− | |||
6 format '/data/backup/rman/%U_%T' ; | 6 format '/data/backup/rman/%U_%T' ; | ||
− | |||
7 } | 7 } | ||
− | + | </source> | |
+ | <source lang=sql> | ||
RMAN> run { | RMAN> run { | ||
− | |||
2 allocate channel c2 type disk ; | 2 allocate channel c2 type disk ; | ||
− | |||
3 backup | 3 backup | ||
− | |||
4 incremental level 3 cumulative <-- 누적 증분 백업을 의미 | 4 incremental level 3 cumulative <-- 누적 증분 백업을 의미 | ||
− | |||
5 tablespace example ; | 5 tablespace example ; | ||
− | |||
6 } | 6 } | ||
− | + | </source> | |
Block change tracking : 데이터 블록들의 변경된 블록만 추적하는 기능 | Block change tracking : 데이터 블록들의 변경된 블록만 추적하는 기능 | ||
163번째 줄: | 144번째 줄: | ||
압축하면서 백업 수행 | 압축하면서 백업 수행 | ||
− | + | <source lang=sql> | |
RMAN> backup as compressed backupset database | RMAN> backup as compressed backupset database | ||
− | |||
2 format '/data/backup/rman/%T_%U' ; | 2 format '/data/backup/rman/%T_%U' ; | ||
− | + | </source> | |
압축하면서 전체 archive log file 백업 | 압축하면서 전체 archive log file 백업 | ||
− | + | <source lang=sql> | |
RMAN> backup s compressed backupset archivelog all | RMAN> backup s compressed backupset archivelog all | ||
− | |||
2 format '/data/backup/rman/%U_%T' ; | 2 format '/data/backup/rman/%U_%T' ; | ||
− | + | </source> | |
RMAN-06059, ORA-19625 - RMAN 백업시 archivelog 경로가 변경 되었을 경우 | RMAN-06059, ORA-19625 - RMAN 백업시 archivelog 경로가 변경 되었을 경우 | ||
오라클의 fast recovery area를 disable 하고 archive log 모드에서 기본 경로가 아닌 다른 directory에 archive log를 저장할 경우 RMAN을 이용한 백업 시 archive log 파일을 못찾는 에러가 발생함. | 오라클의 fast recovery area를 disable 하고 archive log 모드에서 기본 경로가 아닌 다른 directory에 archive log를 저장할 경우 RMAN을 이용한 백업 시 archive log 파일을 못찾는 에러가 발생함. | ||
1. 에러 예제 | 1. 에러 예제 | ||
− | + | <source lang=sql> | |
RMAN> backup archivelog all ; | RMAN> backup archivelog all ; | ||
− | + | </source> | |
Starting backup at 14-OCT-14 | Starting backup at 14-OCT-14 | ||
current log archived | current log archived | ||
195번째 줄: | 174번째 줄: | ||
2. 해결 방법 | 2. 해결 방법 | ||
− | + | <source lang=sql> | |
RMAN> change archivelog all crosscheck ; | RMAN> change archivelog all crosscheck ; | ||
− | + | </source> | |
** 주의 | ** 주의 | ||
− | 위와 같은 방법으로 설정을 한다면 백업 시 backupset이 저장되는 디렉토리는 $ORACLE_HOME/dbs에 저장 | + | 위와 같은 방법으로 설정을 한다면 백업 시 backupset이 저장되는 디렉토리는 $ORACLE_HOME/dbs에 저장 |
− | |||
− | |||
MultiSection Backup | MultiSection Backup | ||
하나의 파일이 아주 클 경우 여러 개의 프로세스가 동시에 다른 백업 셋을 생성해서 백업을 받을 수 있음 | 하나의 파일이 아주 클 경우 여러 개의 프로세스가 동시에 다른 백업 셋을 생성해서 백업을 받을 수 있음 | ||
− | + | <source lang=sql> | |
RMAN> backup as compressed backupset | RMAN> backup as compressed backupset | ||
− | |||
2 section size 100m | 2 section size 100m | ||
− | |||
3 format '/data/backup/rman/%U_%T' | 3 format '/data/backup/rman/%U_%T' | ||
− | |||
4 datafile 1 ; | 4 datafile 1 ; | ||
− | + | </source> | |
이외 옵션들 | 이외 옵션들 | ||
keep - backup 수행시 backupset 보존기간 설정 | keep - backup 수행시 backupset 보존기간 설정 | ||
+ | <source lang=sql> | ||
RMAN> backup as compressed backupset tablespace example | RMAN> backup as compressed backupset tablespace example | ||
− | |||
2 format '/data/backup/rman/%U_%T' | 2 format '/data/backup/rman/%U_%T' | ||
− | |||
3 keep until time 'sysdate +90' ; <-- 보존기간을 90일로 | 3 keep until time 'sysdate +90' ; <-- 보존기간을 90일로 | ||
− | + | </source> | |
Not backed up - 백업 안 된 데이터파일만 골라서 백업하기 | Not backed up - 백업 안 된 데이터파일만 골라서 백업하기 | ||
- 기준일을 주고 싶으면 since time=sysdate -5 이런식으로 오늘 기준으로 최근 5일이내 추가된 파일을 백업 | - 기준일을 주고 싶으면 since time=sysdate -5 이런식으로 오늘 기준으로 최근 5일이내 추가된 파일을 백업 | ||
− | |||
− | |||
RMAN 백업 진행사항 확인하기 | RMAN 백업 진행사항 확인하기 | ||
− | + | <source lang=sql> | |
SYS> SELECT SID,SERIAL#,CONTEXT,SOFAR,TOTALWORK, | SYS> SELECT SID,SERIAL#,CONTEXT,SOFAR,TOTALWORK, | ||
− | |||
2 ROUND(SOFAR/TOTALWORK*100,2)"%COMPLETE" | 2 ROUND(SOFAR/TOTALWORK*100,2)"%COMPLETE" | ||
− | |||
3 FROM V$SESSION_LONGOPS | 3 FROM V$SESSION_LONGOPS | ||
− | |||
4 WHERE OPNAME LIKE 'RMAN%' | 4 WHERE OPNAME LIKE 'RMAN%' | ||
− | |||
5 AND OPNAME NOT LIKE '%aggregate%' | 5 AND OPNAME NOT LIKE '%aggregate%' | ||
− | |||
6 AND TOTALWORK!=0 | 6 AND TOTALWORK!=0 | ||
− | |||
7 AND SOFAR<>TOTALWORK ; | 7 AND SOFAR<>TOTALWORK ; | ||
− | + | </source> | |
255번째 줄: | 220번째 줄: | ||
독립형 | 독립형 | ||
− | + | <source lang=sql> | |
RMAN> backup as compressed backupset database | RMAN> backup as compressed backupset database | ||
− | |||
2 format '/data/backup/rman/%U_%T' ; | 2 format '/data/backup/rman/%U_%T' ; | ||
− | + | </source> | |
작업형 | 작업형 | ||
RMAN> run { | RMAN> run { | ||
− | |||
2 allocate channel ch1 device type disk | 2 allocate channel ch1 device type disk | ||
− | |||
3 format '/data/backup/rman/%U_%T' ; | 3 format '/data/backup/rman/%U_%T' ; | ||
− | |||
4 backup as compressed backupset database ; | 4 backup as compressed backupset database ; | ||
− | |||
5 } | 5 } | ||
− | + | </source> | |
예제 2. Channel 3개를 할당해서 example, users, system, control file 을 백업 | 예제 2. Channel 3개를 할당해서 example, users, system, control file 을 백업 | ||
+ | <source lang=sql> | ||
RMAN> run { | RMAN> run { | ||
− | |||
2 allocate channel ch1 device type disk ; | 2 allocate channel ch1 device type disk ; | ||
− | |||
3 allocate channel ch2 device type disk ; | 3 allocate channel ch2 device type disk ; | ||
− | |||
4 allocate channel ch3 device type disk ; | 4 allocate channel ch3 device type disk ; | ||
− | |||
5 backup as compressed backupset | 5 backup as compressed backupset | ||
− | |||
6 tablespace example, users, system ; | 6 tablespace example, users, system ; | ||
− | |||
7 include current controlfile ; | 7 include current controlfile ; | ||
− | |||
8 } | 8 } | ||
− | + | </source> | |
예제 3. 전체 데이터 파일의 위치를 확인 한 후 파일 번호로 백업수행 | 예제 3. 전체 데이터 파일의 위치를 확인 한 후 파일 번호로 백업수행 | ||
− | + | <source lang=sql> | |
RMAN> report schema ; | RMAN> report schema ; | ||
− | + | </source> | |
Report of database schema for database with db_unique_name TESTDB | Report of database schema for database with db_unique_name TESTDB | ||
− | |||
List of Permanent Datafiles | List of Permanent Datafiles | ||
− | |||
=========================== | =========================== | ||
305번째 줄: | 257번째 줄: | ||
1 760 SYSTEM *** /data/temp7/system01.dbf | 1 760 SYSTEM *** /data/temp7/system01.dbf | ||
− | |||
2 560 SYSAUX *** /data/temp7/sysaux01.dbf | 2 560 SYSAUX *** /data/temp7/sysaux01.dbf | ||
− | |||
3 2865 UNDOTBS1 *** /data/temp7/undotbs01.dbf | 3 2865 UNDOTBS1 *** /data/temp7/undotbs01.dbf | ||
− | |||
4 201 USERS *** /data/temp7/users01.dbf | 4 201 USERS *** /data/temp7/users01.dbf | ||
− | |||
5 345 EXAMPLE *** /data/temp7/example01.dbf | 5 345 EXAMPLE *** /data/temp7/example01.dbf | ||
− | |||
6 5 TS_FDA01 *** /data/temp7/ts_fda01.dbf | 6 5 TS_FDA01 *** /data/temp7/ts_fda01.dbf | ||
− | |||
7 0 UNDO_FDA *** /data/temp7/undo_fda01.dbf | 7 0 UNDO_FDA *** /data/temp7/undo_fda01.dbf | ||
− | |||
List of Temporary Files | List of Temporary Files | ||
328번째 줄: | 273번째 줄: | ||
1 400 TEMP01 32767 /data/temp7/temp01.dbf | 1 400 TEMP01 32767 /data/temp7/temp01.dbf | ||
+ | <source lang=sql> | ||
RMAN> run { | RMAN> run { | ||
− | |||
2 allocate channel c1 type disk ; | 2 allocate channel c1 type disk ; | ||
− | |||
3 backup as compressed backupset datafile 1,2 ; <-- SYSTEM, SYSAUX 가 백업됨 | 3 backup as compressed backupset datafile 1,2 ; <-- SYSTEM, SYSAUX 가 백업됨 | ||
− | |||
4 } | 4 } | ||
− | + | </source> | |
예제 4. 현재 사용 중인 Control file 만 백업 | 예제 4. 현재 사용 중인 Control file 만 백업 | ||
− | + | <source lang=sql> | |
RMAN> run { | RMAN> run { | ||
− | |||
2 allocate channel c1 type disk ; | 2 allocate channel c1 type disk ; | ||
− | |||
3 backup current controlfile ; } | 3 backup current controlfile ; } | ||
− | + | </source> | |
예제 5. 아래 조건으로 RMAN 백업 | 예제 5. 아래 조건으로 RMAN 백업 | ||
349번째 줄: | 290번째 줄: | ||
* 백업경로 sysaux -> /data/backup/open/ | * 백업경로 sysaux -> /data/backup/open/ | ||
− | |||
example -> /data/backup/rman/ | example -> /data/backup/rman/ | ||
− | |||
users -> /data/backup/close/ | users -> /data/backup/close/ | ||
359번째 줄: | 298번째 줄: | ||
* 각 channel 하나당 크기가 최대 10m 이넘지 않도록 설정 | * 각 channel 하나당 크기가 최대 10m 이넘지 않도록 설정 | ||
− | + | <source lang=sql> | |
RMAN> run { | RMAN> run { | ||
− | |||
allocate channel ch1 type disk maxpicesize 10m; | allocate channel ch1 type disk maxpicesize 10m; | ||
− | |||
allocate channel ch2 type disk maxpicesize 10m; | allocate channel ch2 type disk maxpicesize 10m; | ||
− | |||
allocate channel ch3 type disk maxpicesize 10m; | allocate channel ch3 type disk maxpicesize 10m; | ||
− | |||
backup compressed backupset | backup compressed backupset | ||
− | |||
tablespace sysaux channel ch1 | tablespace sysaux channel ch1 | ||
− | |||
format '/data/backup/open/%U_%T' ; | format '/data/backup/open/%U_%T' ; | ||
− | |||
tablespace example channel ch2 | tablespace example channel ch2 | ||
− | |||
format '/data/backup/rman/%U_%T' ; | format '/data/backup/rman/%U_%T' ; | ||
tablespace users channel ch3 | tablespace users channel ch3 | ||
− | |||
format '/data/backup/close/%U_%T' ; | format '/data/backup/close/%U_%T' ; | ||
− | |||
} | } | ||
− | + | </source> | |
예제 6. 차등 증분 백업 실습 | 예제 6. 차등 증분 백업 실습 | ||
level 0 으로 데이터베이스 전체 백업받기 | level 0 으로 데이터베이스 전체 백업받기 | ||
− | + | <source lang=sql> | |
RMAN> run { | RMAN> run { | ||
− | |||
2 allocate channel c1 type disk ; | 2 allocate channel c1 type disk ; | ||
− | |||
3 backup | 3 backup | ||
− | |||
4 incremental level 0 | 4 incremental level 0 | ||
− | |||
5 database | 5 database | ||
− | |||
6 format '/data/backup/rman/%U_%T' ; | 6 format '/data/backup/rman/%U_%T' ; | ||
− | |||
7 } | 7 } | ||
− | + | </source> | |
level 3 으로 users tablespace 만 차등 증분 백업 받기 | level 3 으로 users tablespace 만 차등 증분 백업 받기 | ||
− | + | <source lang=sql> | |
RMAN> run { | RMAN> run { | ||
− | |||
2 allocate channel c2 type disk ; | 2 allocate channel c2 type disk ; | ||
− | |||
3 backup as compressed backupset | 3 backup as compressed backupset | ||
− | |||
4 incremental level 3 | 4 incremental level 3 | ||
− | |||
5 tablespace users ; | 5 tablespace users ; | ||
− | |||
6 } | 6 } | ||
− | + | </source> | |
예제 7. 누적 증분 백업하기 | 예제 7. 누적 증분 백업하기 | ||
− | + | <source lang=sql> | |
RMAN> run { | RMAN> run { | ||
− | |||
2 allocate channel c2 type disk ; | 2 allocate channel c2 type disk ; | ||
− | |||
3 backup as compressed backupset | 3 backup as compressed backupset | ||
− | + | 4 incremental level 3 cumulative | |
− | 4 incremental level 3 cumulative | ||
− | |||
5 tablespace example ; | 5 tablespace example ; | ||
− | |||
6 } | 6 } | ||
− | + | </source> | |
예제 8. 전체 데이터베이스를 백업하면서 Archive log file 함께 백업하기 | 예제 8. 전체 데이터베이스를 백업하면서 Archive log file 함께 백업하기 | ||
+ | <source lang=sql> | ||
RMAN> backup as compressed backupset database plus archivelog | RMAN> backup as compressed backupset database plus archivelog | ||
− | |||
2 format '/data/backup/rman/%U_%T' ; | 2 format '/data/backup/rman/%U_%T' ; | ||
+ | </source> | ||
예제 9. Archive log file 만 백업하기 | 예제 9. Archive log file 만 백업하기 | ||
− | + | <source lang=sql> | |
RMAN> backup as compressed backupset archivelog all ; | RMAN> backup as compressed backupset archivelog all ; | ||
+ | </source> |
2019년 8월 19일 (월) 11:20 판
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
RMAN 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 }
</source> 예제 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
1 ===============[편집]
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
2 ===========[편집]
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 ;