Oracle 12C下的表压缩

时间:2021-09-27 19:50:57
oracle12C支持以下三种表压缩方法
⑴基本表压缩:(Compress Base)压缩比率高,CPU开心最小,适用于直接路径插入操作。常用于DSS
注:这样类型的压缩,除了直接路径插入会压缩外,普通的插入要是让数据块达到pctfree设置的标准,也会自动压缩数据块,以减少其原来占据的空间。
⑵高级行压缩:(Row Store Compress Advanced)压缩比率高,CPU开心最小,适用于所有DML操作。常用于OLTP,DSS。
⑶Hybrid Columnar压缩:通过Exadata实现
表压缩对数据库应用程序是透明的
⑴表压缩子句仅对按堆组织的表有效,【compress】关键字用于启动压缩,【nocompress】关键字用于禁用表压缩。默认是【nocompress】
⑵使用基本压缩时,oracle数据库服务器将在使用诸如直接加载或【create table as select】等操作执行批量加载时压缩数据。
⑶使用高级行压缩时,Oracle数据库在对表执行所有DML操作期间都会压缩数据。
启用基本压缩:建议为批量加载数据仓库使用这种方法,最大化块中的连续空闲空间。
create table....compress basic;  --12c使用【compress】或【compress basic】都是启用基本的表压缩。
alter table 表名 compress for direct_load operations;  --12c之前的使用方法
注:原始导入程序(imp)不支持直接路径insert,因此无法导入压缩格式的数据。压缩消除了块中因删除操作而形成的空隙,使块中的连续空闲空间达到最大化。
启用高级行压缩:建议为活动的OLTP环境使用这种压缩方法。
create table...row store compress advanced...;  --12c的方法
alter table 表名 compress for all operations; --12c之前的方法,也可以是【compress for oltp】
压缩对pctfree的影响:
⑴采用基本压缩的表使用pctfree值为0,以实现最大化压缩,除非显示设置pctfree子句的值,否则就是0.
⑵才用高级行压缩的表或不压缩的表,pctfree默认值是10,以便在最大化压缩的同时扔允许以后对数据进行一些DML更改,除非显示覆盖该默认值。
指定表压缩的限制:
⑴可以为堆表,分区表的分区和嵌套表的存储指定表压缩。
⑵无法为列数多余255的表指定基本压缩和高级压缩。
⑶如果表是针对直接加载而压缩的,则无法删除列。
⑷如果表使用的高级行压缩,则可以删除列。
dbms_compression程序包:通过它可以知道要压缩表的预期压缩比率
⑴dbms_compression.get_compression_ratio  --针对未压缩的表给出可行的压缩比率
⑵dbms_compression.get_compression_type  --函数,针对给定行返回压缩类型