一、备份通道
如果服务器CPU资源充裕、I/O子系统没有明显的竞争,可以增加执行RMAN任务的服务器进程数,以加快执行的速度.增加通道有两种办法:
configure device type(隐式通道):
configure device type disk parallelism 2 [backup type to backupset]
---这样,当备份时具体哪个文件通过哪个通道就得由ORACLE来决定了,路径也只有使用默认路径了。parallelism数量最多为254,然后没有其它限制了,
备份时多出的由快速恢复区或dbs目录自动顶上
configure channel(显示通道)
configure channel 1 device type disk to destination '/home/oracle/disk1/'; 真正通道名称为ORA_DISK_1
configure channel 2 device type disk to destination '/home/oracle/disk2/'; 真正通道名称为ORA_DISK_1
---如果这里显示分配了两个通道,就得必须把parallelism设置为大于或等于这里的数量,不然会报错;
*通道与并行度的关系:通道是指定的通道数量,但并行度就是执行备份过程中真正用到的通道数量。比如,设置了两个通道,备份只备份一个数据文件,那么其中有一个通道就
用不上了,这时并行度就为1.
*要指出的时configure不能在后面跟format(10G中是可以的),但是backup 后面却可以跟format,而且format是指定路径+文件名的
backup tablespace t device type disk format 'oracle/orcl11g/backup/%U'
-------------------------------------------
针对隐式通道的配置,我们在备份时也可以指定通道,比如:
RMAN>backup device type disk
2>(tablespace users channel ORA_DISK_1)
3>(tablespace examle channel ORA_DISK_2);
RMAN> run {
2> backup as copy tablespace users channel ORA_DISK_1;
3> backup as backupset tablespace t channel ORA_DISK_2;
4> }
针对显示的通道也可以使用上面的语句格式,只要事先把通道配置好,但显示通道也可以上RUN中配置后立即使用,可能隐式通道应该也可以在RUN中配置,不作详述
在RUN运行块中可以使用allocate channel命令来突破parallelism的限制,但allocate channel后面的语句不能使用configure中的配置的通道的
RMAN >run {
allocate channel c1 device type disk to destination '/home/oracle/disk/';
allocate channel c2 device type disk;
backup
(tablespace users,example channel c2)
(tablespace t channel c1);
}
二、RMAN备份片与备份集的关系
被RMAN备份的文件被叫做输入文件,共有控制文件、归档日志、参数文件、数据文件4类;
备份集由备份片组成。输入文件与备份片之间是多对多的关系。输入文件与备份集之间是多对一的关系
备份片的命名格式有两种:传统和OMF。传统格式由format指定,比如%d-数据库名,%T-年月日,%s-备份集号,%p-备份片号;
OMF格式,只要使用快速恢复区或“to destination”子句即利用OMF,很多专家都推荐用这种方法
OMF生成的文件名中第7到11一共5个字符,它表示在备份片中的输入文件类型,a-归档日志,c-控制文件,s-参数文件,d-数据文件,f-除归档日志以外的任何文件。
这里是有规则的,数据文件与归档日志都是单独占用一个备份集的,控制文件与参数文件可以在一起也可以分开
三、RMAN备份集的数量由以下几个因素决定
1、输入文件的数量:备份集的数量小于或等于输入文件数量。参数filesperset表示一个备份集可以容纳的输入文件
2、并行度:备份集的数量大于或等于并行度
3、输入文件的种类:之前说过归档日志和数据文件只能独占一个备份集的,控制文件与参数文件可以在一起也可以分开
4、小括号的使用:不在同一个小括号内的输入文件一定不在同一个备份集中,在同一个小括号内的输入文件不一定在同一个备份集中
run{
allocate channel c1 device type disk;
allocate channel c2 device type disk;
allocate channel c3 device type disk;
backup (datafile 5,6) (datafile 4);
} -----虽然用了小括号,但是输入文件和通道数可以使并行度达到3,于是依从并行度规则
与
run{
allocate channel c1 device type disk;
allocate channel c2 device type disk;
allocate channel c3 device type disk;
backup (datafile 5,6 channel c1) (datafile 4 channel c2);
} -----显然,这里已经明确指出了通道,即使通道有3个也不行了
四、多路传输:在备份时,一个通道中,RMAN同时读取多个输入文件的数据并将其写入同一个备份片的操作称为多路传输。读取的输入文件的数量称为多路传输等级
该等级等于以下3个数中的最小值:
1、通道的maxopenfiles
2、通道的输入文件数
3、64或backup命令的filesperset
如果maxopenfiles=2,输入文件为6,filesperset=64,那么RMAN每次只读两个数据文件,分三批写入备份片中
五、镜像复制
backup as copy 或 configure device type disk backup type to copy
镜像复制优点:还原快
缺点:浪费空间,不能使用SBT,参数文件不能生成镜像复制
六、备份优化
压缩
configure device type disk parallelism 4 backup type to compressed backupset;
configure compression algorithm 'LOW'|'BASIC'|'MEDIUM'|'HIGH';
configure compression algorithm ‘BZIP2’;
configure compression algorithm ‘ZLIB’;
RMAN> backup as compressed backupset tablespace system;
分割输入数据文件
RMAN >run {
allocate channel c1 device type disk;
allocate channel c2 device type disk;
backup section size 100M datafile 2;
}
七、增量追加备份:前滚镜像拷贝
工作原理:首先创建一个文件镜像拷贝,然后定期把从上次镜像拷贝最大SCN以来变化的数据块追加到镜像拷贝文件中。增量追加备份可以达到快速恢复的目的,
如果是每天进行增量追加的话,在进行恢复的时候,我们最多应用一天的REDO数据就可以完成恢复。
格式如下: BACKUP... FOR RECOVER OF COPY WITH TAG
一个基础的增量追加备份示例:简称basic脚本:
RUN ...{
RECOVER COPY OF DATABASE WITH TAG 'incr_update';
BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG 'incr_update'
DATABASE;
}
我们看一下整个basic脚本的执行情况:
第一次运行该脚本没有数据文件拷贝和增量备份所以执行RECOVER COPY OF DATABASE WITH TAG 'incr_update'没有任何结果;
执行BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG 'incr_update' DATABASE将产生数据文件的镜像文件拷贝。
第二次运行该脚本,由于第一次运行的时候BACKUP INCREMENTAL LEVEL 1…… FOR RECOVER OF COPY WITH TAG……命令产生一个镜像文件拷贝,
但是没有LEVEL1的增量备份,所以执行RECOVER COPY OF DATABASE WITH TAG 'incr_update'还是没有任何结果;
执行BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG 'incr_update' DATABASE将产生LEVEL1增量备份。
第三次运行该脚本,执行RECOVER COPY OF DATABASE WITH TAG 'incr_update'命令将把第二次执行该脚本产生的LEVEL1增量备份追加到镜像文件拷贝,
同时又产生一个新的LEVEL1增量备份文件。
以后再执行该脚本都是把上次产生的LEVEL1的增量备份追加到镜像文件拷贝,然后再产生一个新的LEVEL1的增量备份文件。如果需要恢复,我们首先恢复镜像文件拷贝和最后
一次LEVEL1增量备份,最后应用REDO.
八、备份加密
三种加密方式:透明模式、口令模式、双体模式
透明和双体都要求将主密钥放在wallet文件中,wallet的路径由sqlnet.ora声明
透明模式就是备份在通道的复制阶段自动加密的
口令模式最方便,不用钱包,如下:
RMAN >set encryption on identified by "123456" only;
RMAN >backup database
还原:
RMAN >set decryption identified by "123456"
RMAN >restore database
RMAN >recover database
九、复用备份
即将一个备份集复制多份,同一备份集,Oracle最多可复用个
手工指定
RMAN> backup copies 2 datafile 4 format '/u01/app/oracle/rmanbak/d1/df_%U','/u01/app/oracle/rmanbak/d2/df_%U';
自动指定:配置下列参数
RMAN> configure datafile backup copies for device type disk to 2; --指定备份数据文件副本数
RMAN> configure archivelog backup copies for device type disk to 2;--指定备份日志文件副本数
backup as copy #3 files copied in parallel
(datafile 1 format '/oracle/orcl11g/product/backup/ORCL11G/disk1/df1.bak')
(datafile 2 format '/oracle/orcl11g/product/backup/ORCL11G/disk1/df2.bak')
(datafile 3 format '/oracle/orcl11g/product/backup/ORCL11G/disk3/df3.bak');
十、备份闪回区
RMAN> backup recovery area;
使用backup recovery area时,将备份位于闪回区且未进行过备份的所有文件,这些文件包括完整、增量备份集、自动备份的
控制文件(假定使用闪回区作为备份路径时)、归档日志、数据文件的镜像副本等。闪回日志,当前的控制文件。联机重做日志不会被备份
RMAN> backup recovery files;
使用backup recovery files时,将备份磁盘上未进行过备份的所有恢复文件,而不论是否位于闪回区
注:使用上述两条命令时,备份目的地必须是磁带
RMAN > bacup backupset ---备份备份集
十一、DB_FILE_NAME_CONVERT
镜像备份时指定子句DB_FILE_NAME_CONVERT来实现镜像路径转移,该子句也是一个初始化参数,用于primary db 到standby db的数据文件的转换
DB_FILE_NAME_CONVERT = ('string1' , 'string2' , 'string3' , 'string4' ...) 用string2替换string1,string4替换string3
RMAN> backup as copy device type disk
2> db_file_name_convert('oradata/orcl','bk/rmbk')
3> tablespace users;
十二、备份监控进度
select case
when opname like '%aggregate%' then
'Total'
else
opname
end opname,
trunc(sofar * 100 / totalwork, 2) || '%' progress,
units
from v$session_longops
where opname like 'RMAN%'
and totalwork > sofar;
十三、备份相关的动态性能视图及监控
1.相关视图
v$backup_files、v$backup_set、v$backup_piece、v$backup_redolog、v$backup_spfile、v$backup_device、v$rman_configuration
v$archived_log、v$backup_corruption、v$copy_corruption、v$database_block_corruption、v$backup_datafile
2、查看channel对应的server sessions
使用set command id命令 查询v$process和v$session判断哪一个会话与之对应的RMAN通道
--下面使用了set command id命令
RMAN> run{
2> allocate channel ch1 type disk;
3> set command id to 'rman';
4> backup as copy datafile 4
5> format '/u01/app/oracle/rmanbak/dd_%U';}
SQL> select sid,spid,client_info
2 from v$process p ,v$session s
3 where p.addr = s.paddr
4 and client_info like '%id=%';
SID SPID CLIENT_INFO
---------- ------------ ------------------------------
140 5002 id=rman
--通过如下SQL获得rman用来完成备份操作的服务进程的SID与SPID信息:
select sid, spid, client_info
from v$process p, v$session s
where p.addr = s.paddr
and client_info like '%rman%'
3.利用crontal实现自动备份(中小型数据库不使用恢复编录才使用sh脚本和crontal的)
1) sh脚本:
#!/bin/bash
#export TMP=/tmp
#export TMPDIR=$TMP
export ORACLE_BASE=/oracle/ora10g
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
export ORACLE_SID=wolf
#export ORACLE_TERM=xterm
#export PATH=/usr/sbin:$PATH
#export PATH=$ORACLE_HOME/bin:$PATH
#export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/usr/x11R6/lib64
#export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
#export LD_ASSUME_KERNEL=2.6.18
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.UTF8"
#export PATH=....... #自动写
SH_HOME=/oracle/ora10g/rmanbak
export SH_HOME
DATE=`date +"%Y%m%d-%H%M"`
week=`date +"%w"`
#-------------------------------------
#confirm whether the oracle is runing
#-------------------------------------
ps -ef | grep dbw0_$ORACLE_SID | grep -v grep >>/dev/null
#-------------------------------------
#begin to backup
#-------------------------------------
if [ $? -eq 0 ]; then
if [ $week = "0" ]; then
rman target / @$SH_HOME/script/rman_bak_0.sql log=$SH_HOME/logs/oraclel0$DATE.log
else if [ $week = "3" ]; then
rman target / @$SH_HOME/script/rman_bak_1c.sql log=$SH_HOME/logs/oraclel1$DATE.log
else
rman target / @$SH_HOME/script/rman_bak_ld.sql log=$SH_HOME/logs/oraclel1$DATE.log
fi
fi
fi
2)增量备份的脚本
0级增量备份的sql--rman_bak_0.sql:
run{
allocate channel cha1 type disk;
backup incremental level 0 format "/oracle/ora10g/rmanbak/inc0_%u_%T" tag "wolf_inc0" database;
release channel cha1;
}
1级累积增量备份的sql--rman_bak_1c.sql:
run{
allocate channel cha1 type disk;
backup incremental level 1 cumulative format "/oracle/ora10g/rmanbak/inc1c_%u_%T" tag "wolf_inc1c" database;
release channel cha1;
}
1级差异增量备份的sql--rman_bak_ld.sql:
run{
allocate channel cha1 type disk;
backup incremental level 1 format "/oracle/ora10g/rmanbak/inc1d_%u_%T" tag "wolf_inc1d" database;
release channel cha1;
}
3)在root下行crontab -e -u oracle
30 3 * * * /oracle/ora10g/rmanbak/script/startrman.sh >> /oracle/ora10g/rmanbak/script/crontab.log
注:cron文件语法:
分 小时 日 月 星期 命令
0-59 0-23 1-31 1-12 0-6 command (取值范围,0表示周日一般一行对应一个任务)
4)[root@oradb ~]# service crond restart
检查自动备份是否成功执行
存盘退出后,你会发现在/var/spool/cron/中新增了一个名为orcl11g文件。到此大功告成,系统会将每次备份的信息通过mail的形式发送给oracle用户。
在进行以上操作时,建议将/var/spool/cron/crontabs中其他用户(尤其是root)的Crontab文件进行备份,以免误操作对系统产生影响。
也可以这样写00 17 * * 1-5 “/usr/oracle/backup.sh” (周一到周五)
十四、RMAN的delete命令
delete backupset 102;//删除102号备份集
delete noprompt expired backup of tablespace xxwz_data;//无提示删除表空间的expired备份信息。
delete obsolete;//删除不需要的备份集
//备份时删除原来的备份
backup archivelog all delete input;
backup archivelog sequence between 99 and 199 thread 1 delete input;
-----------------------------------------------------------------------------------------------------------------------------
backup archivelog all delete input 备份默认目录下所有归档日志,并且删除这个目录下所有归档日志
backup archivelog all delete all input 备份默认目录下所有归档日志,并且删除几个备份目录下所有归档日志
-----------------------------------------------------------------------------------------------------------------------------