FULL BACKUP은 사용된 모든 데이터 파일의 블록을 포함해서 백업을 수행한다.
레벨 0 Incremental backup은 full backup과 동일하다.Differential Incremental backup
Cumulative incremental backup
예1) differential incremental
# 레벨 0에서 incremental(full backup)
매주 일요일에는 레벨 0백업을 수행한다.
backup incremental level 0 database;
수요일을 제외한 다른 요일에는 incremental 2 레벨 백업을 수행한다.
backup incremental level 2 database;
수요일에는 일요일 이후에 변경된 모든 블록을 백업 수행한다.
backup incremental level 1 database;
| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 일 |
|---|---|---|---|---|---|---|---|
| 0 | 2 | 2 | 1 | 2 | 2 | 2 | 0 |
화요일과 금요일은 누적 증분 백업수행
backup incremental level 2 cumulative database;
| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 일 |
|---|---|---|---|---|---|---|---|
| 0 | 2 | 2C | 1 | 2 | 2C | 2 | 0 |
변경사항 추적 파일에 변경된 블록의 주소를 기록,CTWR(백그라운드 프로세스)
활성화된 경우 RMAN에 의해 자동으로 사용된다.
백업중에 데이터 파일을 전체 스캔하지 않도록 incremental 백업 최적화
alter database enable block change tracking using file '/home/oracle/backup/rman/block_tracking.txt';
db_create_file_dest 파라미터를 설정한 경우 블록 변경사항 추적 파일의 이름을 지정할 필요가 없다. OMF(Oracle Managed File)방식으로 생성된다.
활성화
alter database enable block change tracking;
비활성화
alter database disable block change tracking;
활성화 여부 확인
select status,filename,bytes/1024/1024 mb from v$block_change_tracking;

변경사항 추적 파일 활성화 하기
alter database enable block change tracking;
incremental full backup 받기
backup incremental level 0 database;
- 백업셋의 Type이 FULL로 되어있으면 incremental backup에는 사용할 수 없다.
- incremental로 백업받게 되면 Type은 Incr이고 level이 0은 full backup이다.

- 특정한 백업셋번호를 이용해서 삭제
delete backupset 3,4;
v$backup_datafile 뷰를 통해서도 incremental backup 받은걸 확인할 수 있다.
select file#,incremental_level, completion_time, blocks, datafile_blocks, used_change_tracking
from v$backup_datafile;

create table hr.inc_emp tablespace example as select * from hr.employees;
insert into hr.inc_emp select * from hr.inc_emp;
level 0 백업 이후의 변경내용을 incremental 백업 받는다.
backup incremental level 1 database;

v$backup_datafile 뷰를 통해서도 확인
select file#,incremental_level, completion_time, blocks, datafile_blocks, used_change_tracking
from v$backup_datafile;

DB 내린 후 example 데이터파일 삭제로 장애유발
rman통해 incremental 레벨로 받은 백업본을 이용해서 복구를 진행할때 처음 restore 할때는 0 level로 되어있는 full backup본만 먼저 restore 한뒤 recover 시에 그 후 level의 백업본을 restore 한뒤 redo를 적용해서 recover을 진행한다.

후에 change block tracking을 비활성화 할때
alter database disable block change tracking;
비활성화 확인
select status,filename,bytes/1024/1024 mb from v$block_change_tracking;

1) 직접 설정
alter database enable block change tracking using file '/home/oracle/backup/rman/block_tracking.txt';
2) OMF(Oracle Managed File)
show parameter db_create_file_dest

alter system set db_create_file_dest='/home/oracle/backup/rman/';

변경사항 추적 파일 활성화(OMF)
alter database enable block change tracking;
활성화 확인
select * from v$block_change_tracking;

run {
allocate channel ch1 device type disk format '/home/oracle/backup/rman/incr/%U';
backup as copy tag 'base01' incremental level 0 database;
backup as copy current controlfile;
}
list copy;

- list copy에서는 incremental level을 확일 할 방법은 없기 때문에 copy본을 생성할때 tag의 이름을 명확하게 주어 구별할 수 있게 해야한다.
delete copy tag=BASE01;신규 테이블생성 후 dml 작업
level 0 이후의 변경사항에 대해 level 1로 백업을 받지만 copy로는 못받고 backup set으로만 받을 수 있다.
run {
allocate channel ch1 device type disk format '/home/oracle/backup/rman/incr/%U';
backup tag 'incr_update' incremental level 1 database;
backup as copy current controlfile;
}

run {
allocate channel ch1 device type disk format '/home/oracle/backup/rman/incr/%U';
recover copy of database with tag 'base01';
}


결론은 image copy로는 level 0 이외에는 생성할 수 없고 backupset 으로 level n단계 백업을 생성 후 level 0의 image copy에 추가해주는 방식(그걸 rman에서는 recover 하는걸로 생각하나보다)으로 적용을 해야한다.