다른 명령
RMAN
RMAN 의 주요특징
RMAN 구성도
RMAN 백업
채널 설정하기
- Channel = 백업/복구 하는 경로 백업시 반드시 channel 을 할당 해주어야 한다.
자동 Channel 설정
- 복구 카탈로그 서버 사용 안할 경우
[oracle]$ rman target sys/oracle --또는 rman target /
- 복구 카탈로그 서버 이용시
[oracle]$ rman target / catalog rcuser/rcuser@rcserver ( 복구 카탈로그 서버 사용시 )
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 디렉토리에 백업파일이 생성됨
수동 Channel 설정
- 백업을 수행할 때 백업 받을 경로를 직접 지정
RMAN> backup tablespace example format '/data/backup/open/%U_%T' ;
RMAN 백업 종류
- backupset 으로 백업 수행 ( default )
- Backupset = RMAN이 백업파일을 만들 때 RMAN 만이 알 수 있는 형태로 백업파일을 생성하는데 이것을 backupset 이라함
- Backuppiece = backupset 의 크기가 너무 클 경우 분할해서 여러 개의 파일로 나누어 백업 받는데 분할되는 하나의 백업파일을 backuppiece 라 한다.
- Image copy로 백업 수행 ( begin backup 과 비슷한 개념, 백업보다 카피에 많이 사용 )
RMAN> copy datafile '/app/oracle/oradata/testdb/example01.dbf' to '/data/backup/rman/example01.dbf.bak' ;
RMAN 백업시 주의사항
- database 가 open 상태에서 백업을 받으려면 DB가 아카이브 로그모드 (archive log mode) 로 운영되어야 한다.
- DB가 마운트 또는 오픈상태여야 한다.
- 운영중인 온라인 리두로그 파일은 백업이 불가.
- no archive log mode 에서는 Clean 백업만 사용가능.
- Clean 백업이란? 오프라인 테이블스페이스나 읽기전용 테이블스페이스 백업을 의미
- RMAN 으로 백업을 수행하는 것은 Begin backup시의 조건들과 동일해야 함
백업 파일 포맷 설정
%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
RMAN 명령어 종류
standalone 독립형 명령
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;
batch 작업형 명령
프로그램의 스크립트처럼 여러 개의 명령어를 한꺼번에 사용할 수 있는 방법
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';
증분 백업
- 이전에 백업받았던 백업파일과 비교해서 변경된 부분만 골라서 백업을 수행
차등 증분 백업
- 백업 받을 때 설정했던 숫자가 자기보다 작거나 같으면 그시점부터 지금까지 모든 데이터를 백업
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 파일을 못찾는 에러가 발생함.
에러 예제
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
해결 방법
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 백업 진행사항 확인하기
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 명령어
RMAN Default값 보기
RMAN> show all;
현재 DB의 상태보기(Datafile, Tablespace 정보확인)
RMAN> report schema;
백업된 파일들의 list 와 정보 보기
RMAN> list backupset;
백업set 지우기
RMAN> delete backupset 9;
전체 backupset 과 target 서버에 저장된 backupset의 정보 비교
RMAN> crosscheck backupset;
EXPIRED(실제파일은 없지만 control file에는 저장된 RMAN정보)된 정보 삭제
RMAN> delete expired backupset;
수동으로 백업받은 파일을 RMAN에 등록하기(rman에서 관리)
RMAN> catalog datafilecopy '/backup/example01.dbf'; -- RMAN에서 정보삭제시 change datafilecopy '/backup/example01.dbf' uncatalog;
주요 백업 예제
예제 1. 전체 데이터 베이스를 백업
독립형 명령
RMAN> backup as compressed backupset database 2 format '/data/backup/rman/%U_%T' ;
batch 작업형 명령
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 테이블 스페이스를 백업
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' ; }
예제 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 }
예제 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 ;