姓名:杨宝秋,OCM,ACE。近8年的TB级数据库设计、建设、管理、运行维护、调优经验,也做了7年的Hp和IBM Rs6000的系统管理员,而且是获得了BCFP认证的SAN管理员,现为中国联通黑龙江分公司数据库主管。
ORACLE的数据段压缩技术 part4
上一篇 /
下一篇 2008-02-21 11:28:44
/ 个人分类:Oracle
5如何使用段压缩
5.1创建一张压缩表,后续直接装载插入的数据会被压缩
语法:
CREATE TABLE <table_name> ... COMPRESS; eg: SQL> create table T1 (col number) compress 2 / Table created. |
5.2压缩已有一张非分区表
Alter table <table_name> compress只对表后续的数据有效,并无压缩原有的数据,压缩原有的数据需要执行move compress操作。
语法:
ALTER TABLE <table_name> move … COMPRESS; eg : SQL> alter table T1 move compress; Table altered. |
5.3压缩一张已有的分区表
Scott下有一张分区表,创建脚本如下:
SQL>CREATETABLErange_sales ( prod_id NUMBER(6), cust_id NUMBER, time_id DATE ) PARTITIONBYRANGE(time_id) ( PARTITIONSALES_Q1_2007VALUESLESSTHAN(TO_DATE('01-APR-2007','DD-MON-YYYY')), PARTITIONSALES_Q2_2007VALUESLESSTHAN(TO_DATE('01-JUL-2007','DD-MON-YYYY')), PARTITIONSALES_Q3_2007VALUESLESSTHAN(TO_DATE('01-OCT-2007','DD-MON-YYYY')), PARTITIONSALES_Q4_2007VALUESLESSTHAN(TO_DATE('01-JAN-2008','DD-MON-YYYY')) ) ; -- Create/Recreate indexes createindexIDX_RANGE_SALES_PROD_IDonRANGE_SALES (PROD_ID)LOCAL; |
分区表是不能整表做move compress操作的,需要一个分区一个分区的做。
分区表整表压缩会报错:
SQL> alter table range_sales move compress; alter table range_sales move compress * ERROR at line 1: ORA-14511: cannot perform. operation on a partitioned object |
可以单个分区做move compress操作,做move compress后因rowid发生了改变,需要把索引rebuild一下。
SQL> alter table range_sales move partition SALES_Q1_2007 compress; Table altered. 查看一下索引的状态 SQL> SELECT index_name,partition_name,status FROM User_Ind_Partitions WHERE status=’ UNUSABLE’; INDEX_NAME PARTITION_NAME STATUS ------------------------- --------------- ---------------- IDX_RANGE_SALES_PROD_ID SALES_Q1_2007 UNUSABLE SQL> Rebuild一下UNUSABLE状态的索引 SQL> alter index IDX_RANGE_SALES_PROD_ID rebuild partition SALES_Q1_2007; Index altered. |
索引中的数据列重复项比较多的时候,可以考虑进行索引压缩,一般说来复合索引更适合索引压缩,复合索引前辍字段的重复列越多则压缩比越大。
语法: --创建 create index <index_name> on <table_name>(col1,col2 ….coln) compress [n]; --变更 Alter index <index_name> rebuild compress [n]; 其中n是可选的,即压缩索引的前n列,如果不指定则压缩所有的列。 |
这里需要特殊说明的是分区索引的压缩,分区索引的单个分区是不能通过rebuild compress方式进行压缩的,需要drop掉整个索引,然后创建时加compress选项。
SQL> alter index IDX_RANGE_SALES_PROD_ID rebuild partition SALES_Q1_2007 compress; alter index IDX_RANGE_SALES_PROD_ID rebuild partition SALES_Q1_2007 compress * ERROR at line 1: ORA-28659: COMPRESS must be specified at object level first SQL> drop index IDX_RANGE_SALES_PROD_ID; Index dropped. SQL> create index IDX_RANGE_SALES_PROD_ID on RANGE_SALES (PROD_ID) LOCALCOMPRESS; Index created. |
导入论坛
引用链接
收藏
分享给好友
推荐到圈子
管理
举报
TAG: