数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

oracle压缩表/表空间


发布日期:2022年12月17日
 
oracle压缩表/表空间

从Oracle iR 开始ORACLE提供了表/表空间压缩技术以减少磁盘开销节省空间并在某些情况下提高查询性能

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

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

create table test compress as select * from dba_objects where =create table test (id numbername varchartime date) compress修改现有表为压缩表SQL> alter table test compress取消表的压缩SQL> alter table test nocompress确定表是否被压缩确定一个表是否使用了压缩查询user_tablescompression字段表明表是否被压缩

表空间级别创建表压缩空间create tablespace TEST datafile /export/home/oracle/orag/oradata/test/testdbf size M default compress与其他存储参数类似COMPRESS属性也具有一些继承特性当在一个表空间中创建一个表时它从该表空间继承COMPRESS属性

使现有表空间转换为压缩表空间SQL> alter tablespace test default compressSQL> alter tablespace test default nocompress确定是否已经利用compress对一个表空间进行了定义可查询user_tablespaces数据字典视图并查看def_tab_compression列SQL> select tablespace_namedef_tab_compression from user_tablespaces

压缩一个已经存在但并没有压缩的表使用alter table …… move compress使一个已存在但未压缩的表转换为压缩表

SQL> alter table test move compress同样也可以使用alter table…… move nocompress来解压一个已经压缩的表SQL> alter table test move nocompress压缩表的性能开销一个压缩的表可以存储在更少的数据块中从而节省了储存空间而使用更少的数据块也意味着性能的提高 在一个I/O受到一定限制的环境中对一个压缩的表进行查询通常可以更快速地完成因为他们需要阅读的数据库数据块要少得多

由此可以看出向压缩表中加入数据的时间是正常表的倍多加载压缩的表所需要的额外时间来自于在数据加载过程中所执行的压缩操作

可以得出的结论是在很少改变的表上使用压缩技术还是可以的表中数据经常变动的情况下尽量不要使用表压缩它影响插入操作

上一篇:Oracle 9i Data Guard进行数据库的灾难防护

下一篇:使用OracleWrap工具加密你的代码