轉摘:http://blog.itpub.net/29819001/viewspace-1320977/
[oracle@zx ~]$ rman target /
Recovery Manager: Release 11.2.0.1.0 - Production on Thu Oct 16 18:20:57 2014
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
connected to target database: zx (DBID=2731354802)
RMAN> show all;

using target database control file instead of recovery catalog
RMAN configuration parameters for database with db_unique_name zx are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/11.2.0/db_1/dbs/snapcf_zx1.f'; # default
開始設置備份策略
RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
RMAN> CONFIGURE BACKUP OPTIMIZATION ON;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/rman/controlfile/%F';
修改后的
RMAN> show all;

RMAN configuration parameters for database with db_unique_name zx are:
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/rman/controlfile/%F';
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/11.2.0/db_1/dbs/snapcf_zx1.f'; # default
開啟塊跟蹤
[oracle@zx ~]$ sqlplus / as sysdba
SQL> alter database enable block change tracking using file '+RCY1' ;
查看
SQL> col filename for a50
SQL> select * from v$block_change_tracking;
STATUS FILENAME BYTES
---------- -------------------------------------------------- ----------
ENABLED +RCY1/zx/changetracking/ctf.298.861133721 11599872
*****************************************************************************
增量備份
只備份從上次備份發生變化的塊。
1)增量備份首先做全備:
0,1,2,3,4,5
2)增量備份的好處是加快備份時間。
3)oracle增量備份有兩種:1.差異增量備份 2.累計增量備份
4)0級備份就是全被,做其他級別的備份前必須有0級,否則系統會做0級備份。
5)差異增量備份:backup incremental level 0 format
只要等於或小於自己的級別,前面的備份就可以作為備份的起點。
日 一 二 三 四 五 六 日
0 2 2 1 2 2 2 0
全 一 一 三 一 一 一 全
周一周二只備份一天就行了,但周三需要把周一二三的都備一遍,因為它級別比前面的備份低,周四就只備一天就行了,周日又要做全備了。
比如周三早晨掛了,需要周日周一周二才能恢復到周三早晨,但如果周四早晨就只需要周日,周三就能恢復。周六掛需要周日,周三,周四,周五四個備份集。
6)累計增量備份:backup incremental level 0 cumulative format
只看備份級別比自己低的。
日 一 二 三 四 五 六 日
0 2 2 1 2 2 2 0
全 一 二 三 一 二 三 全
周日全備,周一備份一天的,周二備份2天的。周三備份周一二三的。
周四只備份一天的,周五備份兩天的,周六備份3天的。周日全備。
假如周三恢復,需要0級別和一個到周二 的備份就行了。恢復更快。
周六掛需要周日,周三,周五三個備份集。
*************************************************************************
zx數據庫使用差異增量備份
日 一 二 三 四 五 六 日
0 2 2 1 2 2 2 0
全 一 一 三 一 一 一 全
周日全備,周一周二只備份一天就行了,但周三需要把周一二三的都備一遍,因為它級別比前面的備份低,周四周五周六就只備一天就行了,周日又要做全備了。
編輯備份腳本
腳本存放位置/home/oracle/scripts/rman/bin/
日志存放位置/home/oracle/scripts/rman/log/
備份存放位置+rcy1/backup/hrman_bak/
- 熱備0級腳本
[oracle@zx bin]$ cat hrman0.sh

#!/bin/bash export ORACLE_SID=zx1 export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1 export PATH=$ORACLE_HOME/bin rman target / <<eof run{ sql'alter system switch logfile'; allocate channel c1 type disk; allocate channel c2 type disk; crosscheck archivelog all; backup as compressed backupset incremental level 0 format '+rcy1/backup/hrman_bak/%d_%T_%U_0.bak' database plus archivelog; delete noprompt obsolete; } quit; EOF

#!/bin/bash current_day=`date +%Y%m%d` incr_day=incr$current_day mkdir /data2/backup/$incr_day export ORACLE_SID=assedb export ORACLE_BASE=/oracode/oracle export ORACLE_HOME=/oracode/oracle/ora11g export PATH=$ORACLE_HOME/bin rman target / <<EOF run{ CONFIGURE CONTROLFILE AUTOBACKUP ON; CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/data2/backup/$incr_day/PID-%F.ctl'; sql'alter system switch logfile'; allocate channel c1 type disk; allocate channel c2 type disk; crosscheck archivelog all; backup as compressed backupset incremental level 0 format '/data2/backup/$incr_day/%d_%T_%U_0.bak' database; sql 'alter system archive log current'; backup archivelog all format '/data2/backup/$incr_day/arc_%n_%T_%U.arg'; delete noprompt obsolete; release channel c1; release channel c2; } quit; EOF
- 熱備1級腳本
[oracle@zx bin]$ cat hrman1.sh

#!/bin/bash export ORACLE_SID=zx1 export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1 export PATH=$ORACLE_HOME/bin rman target / <<eof run{ sql'alter system switch logfile'; allocate channel c1 type disk; allocate channel c2 type disk; crosscheck archivelog all; backup as compressed backupset incremental level 1 format '+rcy1/backup/hrman_bak/%d_%T_%U_1.bak' database plus archivelog; delete noprompt obsolete; } quit; EOF

#!/bin/bash current_day=`date +%Y%m%d` incr_day=incr$current_day mkdir /data2/backup/$incr_day export ORACLE_SID=assedb export ORACLE_BASE=/oracode/oracle export ORACLE_HOME=/oracode/oracle/ora11g export PATH=$ORACLE_HOME/bin rman target / <<EOF run{ CONFIGURE CONTROLFILE AUTOBACKUP ON; CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/data2/backup/$incr_day/PID-%F.ctl'; sql'alter system switch logfile'; allocate channel c1 type disk; allocate channel c2 type disk; crosscheck archivelog all; backup as compressed backupset incremental level 1 format '/data2/backup/$incr_day/%d_%T_%U_1.bak' database; sql 'alter system archive log current'; backup archivelog all format '/data2/backup/$incr_day/arc_%n_%T_%U.arg'; delete noprompt obsolete; release channel c1; release channel c2; } quit; EOF
- 熱備2級腳本
[oracle@zx bin]$ cat hrman2.sh

#!/bin/bash export ORACLE_SID=zx1 export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1 export PATH=$ORACLE_HOME/bin rman target / <<eof run{ sql'alter system switch logfile'; allocate channel c1 type disk; allocate channel c2 type disk; crosscheck archivelog all; backup as compressed backupset incremental level 2 format '+rcy1/backup/hrman_bak/%d_%T_%U_2.bak' database plus archivelog; delete noprompt obsolete; } quit; EOF

#!/bin/bash current_day=`date +%Y%m%d` incr_day=incr$current_day mkdir /data2/backup/$incr_day export ORACLE_SID=assedb export ORACLE_BASE=/oracode/oracle export ORACLE_HOME=/oracode/oracle/ora11g export PATH=$ORACLE_HOME/bin rman target / <<EOF run{ CONFIGURE CONTROLFILE AUTOBACKUP ON; CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/data2/backup/$incr_day/PID-%F.ctl'; sql'alter system switch logfile'; allocate channel c1 type disk; allocate channel c2 type disk; crosscheck archivelog all; backup as compressed backupset incremental level 2 format '/data2/backup/$incr_day/%d_%T_%U_2.bak' database ; sql 'alter system archive log current'; backup archivelog all format '/data2/backup/$incr_day/arc_%n_%T_%U.arg'; delete noprompt obsolete; release channel c1; release channel c2; } quit; EOF
設置權限
[oracle@zx bin]$ chmod -R 777 hrman0.sh
[oracle@zx bin]$ chmod -R 777 hrman1.sh
[oracle@zx bin]$ chmod -R 777 hrman2.sh
[oracle@zx bin]$ ll
total 12
-rwxrwxrwx 1 oracle oinstall 468 Oct 21 17:03 hrman0.sh
-rwxrwxrwx 1 oracle oinstall 468 Oct 21 17:05 hrman1.sh
-rwxrwxrwx 1 oracle oinstall 468 Oct 21 17:06 hrman2.sh
配置作業
一個crontab文件中包含有六個字段:
分鍾 0-59
小時 0-23
月中的第幾天 1-31
月份 1 - 12
星期幾 0 - 6, with 0 = Sunday
配置
[oracle@zx ~]$ crontab -e
查看
[oracle@zx ~]$ crontab -l
0 2 * * 0 sh /home/oracle/scripts/rman/bin/hrman0.sh >> /home/oracle/scripts/rman/log/backup0.log 2>&1
0 2 * * 3 sh /home/oracle/scripts/rman/bin/hrman1.sh >> /home/oracle/scripts/rman/log/backup1.log 2>&1
0 2 * * 1,2,4,5,6 sh /home/oracle/scripts/rman/bin/hrman2.sh >> /home/oracle/scripts/rman/log/backup2.log 2>&1
日志變大可清空
[oracle@zx ~]$ cat /dev/null > /home/oracle/scripts/rman/log/backup0.log
[oracle@zx ~]$ cat /dev/null > /home/oracle/scripts/rman/log/backup1.log
[oracle@zx ~]$ cat /dev/null > /home/oracle/scripts/rman/log/backup2.log
[oracle@zx ~]$ ll /home/oracle/scripts/rman/log
total 432
-rwxrwxrwx 1 oracle dba 0 Jul 15 16:12 backup0.log
-rwxrwxrwx 1 oracle dba 0 Jul 15 16:12 backup1.log
-rwxrwxrwx 1 oracle dba 0 Jul 15 16:12 backup2.log

在rman增量備份中,有差異增量和累積增量的概念
1、概念
差異增量:是備份上級及同級備份以來所有變化的數據塊,差異增量是默認增量備份方式
累積增量:是備份上級備份以來所有變化的塊
因為累積增量是備份上級備份以來所有變化的數據塊,所以累積增量需要更多的備份時間,同時需要較小的恢復時間;而差異增量正好相反,它可以備份同級備份以來變化的數據塊。所以會減少備份時間,但需要更多的恢復時間.在oracle 9中增量備份需要通過掃描整個數據庫的數據塊才能知道哪些數據塊發生了變化,這是一個代價很大,時間很長的過程,而且由於增量備份形成多個不同的備份集,使恢復變得更加不可靠,所以增量備份在版本9中仍然不被推薦使用;在10g中,增量備份作了很大的改進,不需要再掃描所有數據塊就能得知哪些數據塊發生變化,從而大大提升備份效率。但這些卻以犧牲磁盤i/o為代價,所以在oltp事務系統中還得衡量是否願意以i/o為代價來保證安全及高可用性。10g還支持增量合並,增量備份可支持7級增量。
2、備份策略及恢復
以rman多級增量備份來作為備份策略例子:
增量備份都需要一個0級備份來作為基礎,0級備份與全備份的區別在於0級可以用來增量恢復,而全備份則不可以。
備份策略:
eg:我們對一星期做如下備份策略 ,那么差異增量只需要使用星期天的0級,星期三的一級,星期四、五的二級就可以恢復,累積增量則需要星期天的0級、星期三的1級,星期五的二級即可進行恢復。以上是一個星期的備份策略,如果做長期的備份策略則只需要把備份的時間延長即可得到新的備份策略,具體需要看自己備份及恢復能夠接受的程度而頂,見最后的備份策略典型案例。
星期 差異增量 累積增量
星期天 0級 0級
星期一 2級 2級
星期二 2級 2級
星期三 1級 1級
星期四 2級 2級
星期五 2級 2級
星期六 2級 2級
星期天 0級 0級
備份命令如下:
零級備份
backup incremental level 0 database;
一級差異增量
backup incremental level 1 database;
一級累計增量
backup incremental level 1 cumulative database;
備份策略典型案例:
每半年做一個數據庫的全備份(包括所有的數據和只讀表空間)
每一個月做一次零級備份(不包含只讀表空間)
每個星期做一次一級備份
每天做一次二級備份
任何數據庫的更改需要重新同步CATALOG目錄並重新備份(如添加數據文件)或重新備份(如修改表空間為只讀)
建議備份一段時間歸檔日志和定期備份歸檔到到磁帶上
全庫備份腳本
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup full tag 'dbfull' format '/u01/oradata/backup/full%u_%s_%p' database
include current controlfile;
sql 'alter system archive log current';
backup filesperset 3 format '/u01/oradata/backup/arch%u_%s_%p'
archivelog all delete input; #備份歸檔可選,可以單獨定期備份
release channel c1;
release channel c2;
release channel c3;
}
零級備份腳本 run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup incremental level 0 tag 'db0' format '/u01/oradata/backup/db0%u_%s_%p'
database skip readonly;
sql 'alter system archive log current';
backup filesperset 3 format '/u01/oradata/backup/arch%u_%s_%p'
archivelog all delete input; #備份歸檔可選,可以單獨定期備份
release channel c1;
release channel c2;
release channel c3;
}
一級備份腳本 run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup incremental level 1 tag 'db1' format '/u01/oradata/backup/db1%u_%s_%p'
database skip readonly;
sql 'alter system archive log current';
backup filesperset 3 format '/u01/oradata/backup/arch%u_%s_%p'
archivelog all delete input; #備份歸檔可選,可以單獨定期備份
release channel c1;
release channel c2;
release channel c3;
}
如果按照以上備份策略,則每天的所需要備份的數據量只有一天的改變量。而做恢復時最多要恢復當月的一個零級備份+三個一級備份+6個二級備份+當天的歸檔文件。