表压缩的功能11g中已有相关引入,但是在12c中,表的压缩选择更多,功能也更强,我们可以根据不同的业务需求及场景来选择。并且,表压缩也跟12c中一个新的特性相关。关于这个新的特性,我们下一篇文章再说。
压缩数据可以减少磁盘空间和内存占用,当然,最显著的,就是减少I/O,尤其是物理I/O。只不过,需要注意的是,启用压缩,会消耗额外的cpu资源,因为需要使用相关算法来完成数据的压缩和解压缩。
可以分别查询oracle官方文档
Oracle® Database SQL Language Reference 11.2
和
Oracle® Database SQL Language Reference 12.1
中的create table部分,来了解在11g和12c中表压缩部分的不同之处。
其中,11g中
compress 对应于12c中的compress basic;
compress for oltp,对应于12c中的compress row store compress basic/advanced。
接下来,看几个简单的启用压缩的例子:
数据库版本12.1.0.2,操作系统OEL 7.1
1,创建测试表
TEST1@ora12> create table tab_test (
2 id number,
3 name varchar2(30))
4 compress basic;
Table created.
TEST1@ora12> select table_name,compression,compress_for from user_tables;
TABLE_NAME COMPRESS COMPRESS_FOR
---------------------------------------------------------------
TAB_TEST ENABLED BASIC
2,修改压缩选项
TEST1@ora12> alter table tab_test row store compress advanced;
Table altered.
TEST1@ora12> select table_name,compression,compress_for from user_tables;
TABLE_NAME COMPRESS COMPRESS_FOR
---------------------------------------------------------------
TAB_TEST ENABLED ADVANCED
注:对已存在的表启用压缩,则不会压缩表中的已有数据。
也可以使用压缩子句来创建表空间
TEST1@ora12> conn / as sysdba
Connected.
SYS@ora12> create tablespace tbs_test default row store compress advanced datafile '/u01/oracle/oradata/ora12/tbs_test.dbf' size 10m;
Tablespace created.
以后创建在该表空间上的对象,默认都会启用压缩。
压缩选项的最后,还有column store compress for选项,
这个是混合列压缩的数据仓库选项和归档选项:
TEST1@ora12> alter table tab_test column store compress for archive low;
alter table tab_test column store compress for archive low
*
ERROR at line 1:
ORA-64307: Exadata Hybrid Columnar Compression is not supported for
tablespaces on this storage type
再测下另外一个:
TEST1@ora12> alter table tab_test column store compress for query high;
alter table tab_test column store compress for query high
*
ERROR at line 1:
ORA-64307: Exadata Hybrid Columnar Compression is not supported for
tablespaces on this storage type
可见,这两个都是针对Exadata环境下的存储才启用的。
关于Exadata的相关内容,这里不再多说。有兴趣的,请查阅Exadata相关技术文档。
当然,12c中,dbms_stats这个收集管理统计信息的系统包,也专门提供了支持Exadata的选项,oracle是铁了心的推广Exadata啊······