oracle


Oracle RMAN Block Compression Oracle块压缩技术

<h1>Oracle RMAN Block Compression 介绍</h1> <p>在使用 RMAN 将数据库备份为 backup sets 时,<strong>必然使用</strong>块压缩技术其中的一种; RMAN 的 block compression 区别于 binary compression。binary compression 指的是 RMAN 备份时开启的压缩参数实现对备份数据的压缩,而 block compression 是为了备份时跳过不需要备份的数据块技术。 &gt; Oracle RMAN Block Compression 与 Binary Compression 的区别:</p> <ul> <li>前者主要使用于备份是跳过数据块的检测,且块压缩方式无法人为修改,Oracle 会根据满足的条件自行选择;</li> <li>后者用于备份数据的压缩,节省备份存储空间。对应 RMAN 配置中的 backup to compressed backupset 配置,其也对应于 AnyBackup Oracle 定时备份任务中的“数据库高级压缩”选项,可以人为选择开启或者关闭。该选项开启后会影响备份性能,故若需考虑性能,不建议开启该参数。</li> </ul> <p>两种块压缩技术分别是:</p> <h2>Unused Block Compression,即未使用块压缩,在备份时会跳过当前不存在数据的数据块。</h2> <p>在满足如下条件时,Oracle 会自动使用未使用块压缩方式: 1)数据库的 COMPATIBLE 参数为 10.2 或更高版本; 2)数据库当前没有担保还原点; --引申:restore point 分为 normal restore point 和 guaranteed restore point,该技术为数据库闪回技术,需手动创建还原点,如:create restore point POINT_NAME guarantee flashback databse; 3)数据文件使用本地管理方式; --引申:表空间管理分为字典管理(Dictionary-Management Tablespace)和本地管理(Locally Managed Tablespace);9i R2后默认使用本地管理,性能更优。 4)数据库使用 full 或 level 0 将数据文件备份到备份片; 5)备份集备份到disk,或者使用 Oracle Secure Backup 软件进行备份;并且,Unused Block Compression 只支持备份集备份到 disk,或者使用 Oracle Secure Backup 软件进行备份。</p> <h2>Null Block Compression,即空块压缩,在备份时跳过从未写入数据的块。</h2> <p>在满足如下条件时,Oracle 会自动使用空块压缩方式: 1)level 0 的备份 2)以备份集形式的备份,包括第三方软件备份。</p> <h2>两种压缩技术的差别</h2> <p>两种块压缩技术针对跳过的数据块存在差异:当前非空的数据块和从未使用的数据块。 假设一个 Oracle 数据库刚部署完成,经过业务运行一段时间的增删查改之后,变化如下: <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=7feed103e0790a7ebacc5a605be93c55&amp;amp;file=file.png" alt="" /> 那么,本例中采用 Unused Block Compression 技术的备份,备份的数据块个数为 7 个;而采用 Null Block Compression 技术的备份,备份的数据块个数为 12 个。 即,<strong>采用 Null Block Compression 技术的备份任务备份的数据量 ≥ 采用 Unused Block Compression 技术的备份任务。</strong></p> <h2>对AnyBackup的影响</h2> <p>AnyBackup (或其他第三方采用SBT通道进行备份的软件)在对数据库进行定时备份时,必然使用 Null Block Compression 空块压缩技术。 Q:那么使用这种方式会存在哪些场景的问题,或者说不同表现? A:基于块压缩技术的差异,有出现如下场景问题: 1)数据文件很大(dba_data_files),实际数据很小(dba_segments),备份性能对比本地 RMAN 备份性能更差。 2)备份数据量大于数据库实际数据量(dba_segments)+归档日志大小;对比本地 RMAN 备份数据量更大。 结合第一章节介绍的 Oracle block compression 技术,可得知原因: 场景1:第三方非 disk 通道备份时,采用 Null Block Compression 技术,由于数据文件很大,扫描数据块需要一定的耗时,对比本地备份,由于使用的块压缩技术不一样,备份的数据量更多,进而导致备份任务整体耗时比本地备份时间更长,从而表现为“性能更差”。 场景2:Oracle 数据库实际数据量 dba_segments 中仅统计当前已有数据的块,而 Null Block Compression 不会跳过那些历史写入了数据当前为空的数据块的备份,从而出现备份的数据量会比实际数据量+归档日志更大的情况。该场景通常出现于 Oracle 数据库做了大批量数据清理之后的环境。</p> <h3>场景模拟实测</h3> <p>如,上述描述的场景2实测如下: <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=05c56aee875b933f56b394f95b580ed0&amp;amp;file=file.png" alt="" /> <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=dce9b1e3989b56e105de62694697e1b1&amp;amp;file=file.png" alt="" /></p> <h3>结论:</h3> <p>基于快压缩技术备份跳过的数据块存在区别,会导致 AnyBackup 定时备份 Oracle 数据库的数据量比 RMAN 本地备份数据量更大,比 dba_segments + 归档日志数据量更大;耗时比本地 RMAN 备份耗时更长。</p> <h2>附录</h2> <p>查看备份的情况,可以查看 V$RMAN_BACKUP_JOB_DETAILS 视图,结果显示如下: <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=e7b82a7d4e63e5fee29dbcc780a06cee&amp;amp;file=file.png" alt="" /> 正常情况下,不管用什么备份,input都会大于等于output,这是正常的 output可能受备份片打包、压缩等处理,数据会变小 input的大小和数据库的快压缩方式以及数据块是否被使用过有关系</p>

页面列表

ITEM_HTML