Oracle压缩表表空间

2014-11-24 17:42:14 · 作者: · 浏览: 0

表压缩是如何工作的


在Orcle9i第2版中,表压缩特性通过删除在数据库表中发现的重复数据值来节省空间。压缩是在数据库的数据块级别上进行的。当确定一个表要被压缩后,数据库便在每一个数据库数据块中保留空间,以便储存在该数据块中的多个位置上出现的数据的单一拷贝。这一被保留的空间被称作符号表(symbol table)。被标识为要进行压缩的数据只存储在该符号表中,而不是在数据库行本身内。当在一个数据库行中出现被标识为要压缩的数据时,该行在该符号表中存储一个指向相关数据的指针,而不是数据本身。节约空间是通过删除表中数据值的冗余拷贝而实现的。


对于用户或应用程序开发人员来说,表压缩的效果是透明的。无论表是否被压缩,开发人员访问表的方式都是相同的,所以当你决定压缩一个表时,不需要修改SQL查询。表压缩的设置通常由数据库管理人员或设计人员进行配置,几乎不需要开发人员或用户参与。


1.表级别:


1.1 创建一个压缩表:


创建表时使用COMPRESS关键字,COMPRESS关键字指示Oracle数据库尽可能以压缩的格式存储该表中的行。


SQL> create table tmp_test


(id number,phone varchar2(20),create_time date)


compress;


1.2 修改现有表为压缩表:


SQL> alter table tmp_test compress;


取消表的压缩:


SQL> alter table tmp_test nocompress;


1.3 确定表是否被压缩:


确定一个表是否使用了压缩,查询user_tables,compression字段表明表是否被压缩.


SQL> select table_name,compression from user_tables where table_name not like 'BIN%';


TABLE_NAME COMPRESS


------------------------------ --------


CLASSES ENABLED


ROOMS ENABLED


STUDENTS DISABLED


MAJOR_STATS DISABLED


2.表空间级别:


2.1 创建表压缩空间:


可以在表空间级别上定义COMPRESS属性,既可以在生成时利用CREATE TABLESPACE来定义,也可以稍后时间利用ALTER TABLESPACE来定义。


与其他存储参数类似,COMPRESS属性也具有一些继承特性。当在一个表空间中创建一个表时,它从该表空间继承COMPRESS属性。


可以在一个表空间直接压缩或解压缩一个表,而不用考虑表空间级别上的COMPRESS属性。


2.2 使现有表空间转换为压缩表空间 SQL> alter tablespace sms default compress;
SQL> alter tablespace sms default nocompress;


2.3 确定是否已经利用COMPRESS对一个表空间进行了定义,可查询USER_TABLESPACES数据字典视图并查看DEF_TAB_COMPRESSION列


SQL> select tablespace_name,def_tab_compression from user_tablespaces;


TABLESPACE DEF_TAB_


---------- --------


USERS DISABLED


TEST DISABLED


UNDOTBS01 DISABLED


STATPACK DISABLED