Oracle 数据压缩(Compression)步骤(转载)
本文只是叙述运维中压缩表的步骤,具体原理请自行查阅相关文档,不足之处敬请指正。
--1.查看某个用户下最大的30个表
SELECT *
FROM (SELECT OWNER, SEGMENT_NAME,SEGMENT_TYPE, partition_name,tablespace_name,BYTES / 1024 / 1024 / 1024 AS GB
FROM DBA_SEGMENTS
WHERE OWNER = 'user'
ORDER BY BYTES DESC)
WHERE ROWNUM <= 30;
--2.检查索引和分区
SELECT OWNER, SEGMENT_NAME, SEGMENT_TYPE,partition_name,tablespace_name,BYTES / 1024 / 1024 / 1024 AS GB
FROM DBA_SEGMENTS
WHERE OWNER = 'user'
AND tablespace_name='tbs_name'
and SEGMENT_NAME='table_name'
ORDER BY BYTES DESC;
SELECT INDEX_NAME,TABLE_OWNER,TABLE_NAME,COMPRESSION FROM USER_INDEXES WHERE TABLE_NAME='table_name' ;
--3.压缩数据表
ALTER TABLE table_name MOVE COMPRESS FOR OLTP PARALLEL 8;
该方法支持表以后的DML的压缩,同时也会已经存在的数据进行压缩,但是在move 期间会对表加上exclusive(X)锁,其他的DML 操作会被block。使用并行来执行ALTER TABLE MOVE 会增加操作的效率。
MOVE操作会导致分区或者表上的所有失效,需要操作结束后rebuild 索引,或者在执行MOVE操作时加上UPDATE INDEXES,来维护索引。
注意:
OLTP Table Compression 不支持超过255个字段的表,或者表里有LONG 类型的字段。
--4.压缩分区表
分区表是不能整表做MOVE COMPRESS操作的,需要一个分区一个分区的做。
分区表整表压缩会报错:
SQL> ALTER TABLE table_name MOVE COMPRESS FOR OLTP ;
ALTER TABLE table_name MOVE COMPRESS FOR OLTP
*
ERROR AT LINE 1:
ORA-14511: CANNOT PERFORM OPERATION ON A PARTITIONED OBJECT
可以单个分区做MOVE COMPRESS操作,做MOVE COMPRESS后因ROWID发生了改变,需要把索引REBUILD一下。
ALTER TABLE table_name MOVE PARTITION table_part COMPRESS FOR OLTP PARALLEL 8;
--5.压缩索引
ALTER INDEX index_name REBUILD COMPRESS ;
--6.重建索引
SELECT * FROM USER_INDEXES WHERE TABLE_NAME='table_name' ; //查看一下索引的状态
SELECT INDEX_NAME,PARTITION_NAME,STATUS FROM USER_IND_PARTITIONS WHERE STATUS='UNUSABLE';
REBUILD一下UNUSABLE状态的索引
ALTER INDEX index_name REBUILD PARTITION index_part;
相关参考:
https://blog.csdn.net/tianlesoftware/article/details/8170488
https://blog.csdn.net/fenglin20115588/article/details/51862446
原文链接:https://blog.csdn.net/swordlb/article/details/113104609