对Oracle压缩表及压缩表空间的一点研究
有时候我们想将OLTP生产系统上的数据存入历史库或者放入数据仓库进行数据分析(较少发生DML操作),这种情况下将表以压缩的方式存入历史库或数据仓库中将是一个不错的选择,不仅可以节省空间还可以加快查询速度。
本篇文章仅介绍如何实现上述需求及所涵盖的知识,如想深入了解Oracle压缩表及压缩表空间,请查阅其它资料。
压缩表空间,即创建在该表空间中的表默认都是压缩表;压缩表空间也有几种类型,以Create table中不同的子句实现(Oracle 12.2):
1 TABLE COMPRESS FOR OLTP
该模式压缩率略较小,应该是可以对任何方式产生的dml操作进行压缩(待确认),较适用于OLTP系统。2 TABLE COMPRESS FOR QUERY { LOW | HIGH }
该模式压缩率较大,适用于OLAP系统,明确可以对任何方式产生的dml操作进行压缩。3 TABLE COMPRESS FOR ARCHIVE { LOW | HIGH } 该模式类似于COLUMN STORE
COMPRESS FOR QUERY,但压缩率更大,适用于数据存储。
(2、3两种模式仅适用于EXADATA)
现在就要对OLTP数据转存成压缩形式进行实施测试,大致方案是在目标库创建TABLE COMPRESS FOR OLTP模式的压缩表空间,然后通过数据泵来迁移数据,在导入的时候加上TRANSFORM=SEGMENT_ATTRIBUTES:n:table子句,该子句是在导入过程中忽略表的一些元数据,不加该子句将无法以压缩形式导入该