在了解备份优化以前首先要知道RMAN 备份的原理:算法
当RMAN 发起备份任务时,会开启相应的通道工做,每个通道在数据库服务器都有一个相对应的服务进程,RMAN 会首先调用DBMS_RCVMAN 包读取控制文件,肯定数据文件的存放位置等信息,获取该信息后,RMAN 将调用DBMS_BACKUP_RESTORE 包对数据文件进行读取并备份。读取过程就是基于RMAN 备份的算法规则来编译须要备份的文件列表。RMAN 执行备份操做时,会请求Oracle 的共享内存段来建立本身备份缓冲区,与通道相对应的服务进程会去扫描数据文件中的数据块,而且将须要备份的数据块读入到输入缓冲区中,当输入缓冲区被填满时,会被转移到输出缓冲区,在转移的过程当中,也会对数据块进行检测,检测是否有损坏的数据块,当输出缓冲区被填满时,就会造成备份片,与通道相对应的服务进程最终会将其写入到指定备份片的位置。数据库
全部的备份恢复不能千篇一概,须要契合不一样客户的生产环境针对性的去调整和优化,不然颇有可能会致使生产环境出现问题。生产环境场景有:备份磁盘空间不足、存储I/O 慢、存储很快且cpu 资源足够等。服务器
RMAN 备份的优势以下(以11g 为例):oracle
1 )RMAN 会检测数据坏块ide
2 ) 不须要开热备,额外的重作会减小工具
3 )RMAN 备份只备份使用过的块性能
4 )RMAN 备份具备压缩特性优化
5 ) 支持增量备份策略orm
对于不一样的场景咱们须要给出不一样的优化方法:进程
场景一:划分的备份文件系统空间不足:
存在这么一种状况,查询数据库大小略大于备份空间大小咱们怎么处理?
这就要从rman 的备份特性提及两个概念:
1 )null block compression
2 )unused block compression
10.1 版本 RMAN 的压缩方式为空值压缩(null compression ),当扫描数据块进行备份时,能够进行空值压缩,对块头为空的块,在从输入缓冲区转移到输出缓冲区时将其过滤掉,不会去备份已分配但未被格式化的块。
在10.2 版本RMAN 的压缩方式又出现一种未使用块压缩(unused block compression ),这种压缩方式是过滤掉不包含数据的数据块,就是该数据块已经被使用过(被格式化过),可是不包含数据。
只有在知足如下条件的时候,Unused Block Compression 会起做用:
1 )初始化参数COMPATIBLE=10.2 或者更新的版本
2 )数据文件是本地管理模式
3 )彻底备份或0 级备份
4 )备份的指定位置在磁盘上
因此备份出来的备份片至关于被压缩过,因此这也是rman页游备份工具一个很重要的特性,减小没必要要的空间浪费。
场景二:备份文件系统空间很是小
这时候咱们很容易想到rman 的压缩特性,rman 可以使用二进制压缩算法进行备份,这个二进制的压缩算法可以大大的减小备份集所须要的磁盘空间,一般状况下压缩比会达到2-4 倍
使用这种压缩方式的命令以下:
rman> backup as compressed backupset database;
1 )启用压缩将消耗更多的CPU 资源。。
2 )启用压缩备份耗时略有增长
3 )节省存储备份的空间
场景三:备份片很大,备份时间较长
加快备份速度的方法无非是开并行,这里涉及到两个关键词:通道、并行
自动分配通道(CHANNEL ):
Configure 命令来完成通道配置。若是没有用手工方式为RMAN 分配通道,RMAN 将利用预约义的设置来为命令自动分配通道
RMAN>Configure channel device type disk format ‘xxx’;
可配置自动分配多个通道
手工分配通道(PARALLELISM ):
allocate channel 命令进行分配通道,这个命令只能放在run 命令块中,而且它分配的通道也只做用于本run 块内的命令。
run {
Allocate channel d1 device type disk format ‘xxx’;
Allocate channel d2 device type disk format ‘xxx’;
Backup database;
release channel d1 ;
release channel d2 ;
}
注意 若是配置的通道个数据小于 PARALLELISM ,如 PARALLELISM 为 5 , configure channl 1 , 2 , 3 则 1 , 2 , 3 指定的配置备份 4 , 5 按默认的配置来备份。若是配置的通道大于 PARALLELISM , PARALLELISM 为 3 ,配置 5 个通道,则通道 4 , 5 被忽略
一个 CPU 任一时刻只能处理一个事务,并行度不能超过 CPU 数量。
场景四:数据库数据量很庞大,增量备份须要较长时间
这里须要打开一个数据库的特性:块跟踪
1 )块修改跟踪会记录数据文件里每一个块的更新信息,这些跟踪信息保存在跟踪文件里。当启动块修改跟踪后,RMAN 使用跟踪文件里的信息,只读取改变页游http://www.coubai.com块信息,而不用在对整个数据文件进行扫描,从而提升了RMAN 备份的性能。
2 )块修改跟踪默认是禁用的,若是启用了增量备份,那么建议开启块修改跟踪。 启用BCT 后,不须要其余的维护操做。
3 )在备份期间,修改跟踪会维护已经标记为更改的块的位图信息。Oracle 会自动管理修改跟踪文件的大小,只保留最近最近8 次块更改的信息。 超过8 次,那么最前面的块位图信息会被当前的更改覆盖。
4 )第一个0 级的增量备份扫描整个数据文件。随后的增量备份使用块跟踪文件的信息,只扫描自上次备份以来被标记为更改的块。
5 )若是是RAC 环境,块跟踪文件必须放在共享设备上。
6 )数据库在open 或者 mounted 状态均可以启用块跟踪.
打开块跟踪:
(1 ) 查看是否设置路径
SQL> showparameter db_create_file_dest
NAME TYPE VALUE
db_create_file_dest string
(2 ) 设置存放块跟踪文件路径
SQL> alter system set db_create_file_dest = 'oracle/blkch' scope=both sid='*';
System altered.
(3 ) 检查设置路径
SQL> show parameter db_create_file_dest
NAME TYPE VALUE
db_create_file_dest string oracle/blkch
SQL>
(4 ) 打开块跟踪
SQL> alter database enable block change tracking;
Database altered.
也能够直接指定目录或者复用已存在的文件
SQL>alter database enable block change tracking using file 'oracle/blkch/blkch.chg' reuse;
禁用块跟踪:
SQL>alter database disable block change tracking;
查看块跟踪是否可用:
SQL> select status, filename fromv$block_change_tracking;
STATUS FILENAME
ENABLED /oracle/blkch/blkch.chg
注意 快跟踪使用场景通常有两种: 1 、常规含有增量备份的 RMAN 备份策略; 2 、应用于 XTTS 迁移,能够有效加快增量数据的备份。
在使用 RMAN 增量备份的状况下,启用块跟踪,在作增量备份时会缩短 RMAN 备份的时间, 由于不用扫描整个数据文件。 可是块跟踪也会带来其余的一些开销。 因此要根据实际状况决定是否启用块跟踪。