讲解Oracle数据段压缩技能

    作者:Oracle数据库学习更新于: 2015-10-29 11:37:54

    本文即将要讲述的是关于Oracle数据库学习的内容,重点介绍Oracle的数据段压缩技术,想了解详细内容的朋友,可以继续往下看:

    ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。比如SilverStream就是基于数据库的一种中间件。ORACLE数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。但它的所有知识,只要在一种机型上学习了ORACLE知识,便能在各种类型的机器上使用它。优点:可用性强、可扩展性强、数据安全性强、 稳定性强。

    1、引言
    作为DBA,空间的紧张是常遇到的一个问题,有时一个大的表就会占用几十GB及至上百GB的空间,存储历史数据的表常常都是这样,特别是数据仓库型应用(如经营分析应用)的数据库这样的问题就更加突出。如今,在计算机技术中数据压缩技术已经十分广泛和成熟了。在Windows系统中有winrar、winzip,7-zip等等这样的软件,Unix操作系统中相应的也有compress、gzip这样的压缩命令及软件。这些压缩工具的使用使我们节约了很多的空间,在Oracle 9i之前的版本我有时在想,ORACLE什么时候也有类似的功能可以节约空间,提高单位空间的使用价值。期待之余,ORACLE从9i开始羞羞答答的引入表段级压缩;10g在部分压缩功能略有增强,例如DataPump源数据的压缩、Rman备份的压缩等,并无本质的改观;Oracle11g才大张旗鼓的推出相应Compression组件,支持全方面的压缩。本文将立足于ORACLE9/10g这样的实际应用最多的版本探讨一下ORACLE的压缩技术,并简单介绍一下ORACLE 11g的压缩方面的新特征。
    2、数据段压缩实现原理
    2.1 原理简单描述
    ORACLE的数据段压缩技术可以理解为“数据块”级压缩技术,也就是说是针对Block级别的数据压缩。它是在Block中引入记号表(symbol表),Block中的重复数据在symbol中用一个项(指针)表示,即块中相同的ROW只存储一条,从而节约了空间。
    2.2 压缩数据块的存储结构
    2.2.1 建一张包含28672行数据的表T_ 28672

    SQL> show user
    USER is "SCOTT"
    SQL>
    SQL> select count(*) from t_28672;
    COUNT(*)
    ----------
    28672


    2.2.2 T_ 28672压缩前与压缩后段统计
    压缩前:

    SQL> select owner,segment_name,file_id,block_id,blocks                 
    2  from dba_extents
    3 where wner='SCOTT'          
    4   and segment_name='T_28672'
    5  order by block_id
    6 /
    OWNER SEGMENT_NAME           FILE_ID  BLOCK_ID    BLOCKS
    ----- -------------------- ---------- ---------- ----------
    SCOTT T_28672                      4      3729         8
    SCOTT T_28672                      4      3737         8
    SCOTT T_28672                      4      3745         8
    SCOTT T_28672                      4      3753         8
    SCOTT T_28672                      4      3761         8
    SCOTT T_28672                      4      3769         8
    SCOTT T_28672                      4      3777         8
    SCOTT T_28672                      4      3785         8
    SCOTT T_28672                      4      3793         8
    SCOTT T_28672                      4      3801         8
    SCOTT T_28672                      4      3809         8
    SCOTT T_28672                      4      3817         8
    SCOTT T_28672                      4      3825         8
    SCOTT T_28672                      4      3833         8
    SCOTT T_28672                      4      3841         8
    SCOTT T_28672                      4      3849         8
    SCOTT T_28672                      4      3977       128
    17 rows selected.
    SQL>
    执行表压缩:
    SQL> alter table T_28672 move COMPRESS;
    Table altered.


    压缩后:

    SQL> select owner,segment_name,file_id,block_id,blocks
    2  from dba_extents
    3 where wner='SCOTT'
    4   and segment_name='T_28672'
    5 order by block_id
    6 /
    OWNER SEGMENT_NAME           FILE_ID  BLOCK_ID    BLOCKS
    ----- -------------------- ---------- ---------- ----------
    SCOTT T_28672                      4      3857         8
    SCOTT T_28672                      4      3865         8
    SCOTT T_28672                      4      3873         8
    SCOTT T_28672                      4      3881         8
    SCOTT T_28672                      4      3889         8
    SCOTT T_28672                      4      3897         8
    6 rows selected.
    SQL>


    简单总结:
    从压缩前后段的数量上看,压缩还是相当节约空间的,17个区压缩成6个区,2倍的压缩比。
    2.2.3 dump出file 4 block 3860块
    SQL> alter system dump datafile 4 block 3860;
    System altered.
    2.2.4 结构分析
    需要说明的是,如下的内容为完整.trc的节选,有关于block dump内容更详细的解释可以参照“DSI402e Data Types and Block Structures”。

    以上内容就介绍到这里。相信大家已经有所了解了,更多相关Oracle教学视频尽在课课家官方网。大家有兴趣可以前往浏览。

课课家教育

未登录