Oracle压缩功能小结1--压缩功能介绍(二)

2014-11-24 12:24:49 · 作者: · 浏览: 1
ssionUnit)的结构来存储数据,将一组(很多行)行中每列的信息存放在一起,然后执行压缩操作。可以节省更多的空间。(原来只是块内引用,现在是多块内引用,肯定节省更多的空间)但是同样的,由于这种存储结构,在发生更新1行的数据的时候,会连带的锁定一个Logical Compression Unit中的所有行。

我不是OracleDatabase的销售,所以关于HCC的内容就介绍到这里。最后说一下关于压缩的几点限制:

1. Compress Basic和compress foroltp 不支持超过255列的信息。(真心蛋疼,难道是因为超过255列的row会跨越多个row piece的原因?)

2. BasicFile LOBs 不支持压缩,SecureFileLOBs支持压缩。(新东西带来新bug)

3. 使用Compress Basic的时候无法dropcolumn,但是对于compress for oltp以及hcc中的各种压缩格式是允许的。

4. 不支持索引组织表。

5. 不支持外部表或者ClusterTable(直接说只支持堆积表得了)。

HCC的限制内容不描述了。

附件

附件1 show_space脚本

下面附上show_space(itpub改良版)脚本:

CREATE OR REPLACE PROCEDURE show_space(p_segname_1   IN VARCHAR2,
                                      p_type_1      IN VARCHAR2 DEFAULT'TABLE',
                                      p_space       IN VARCHAR2 DEFAULT'AUTO',
                                      p_analyzed    IN VARCHAR2 DEFAULT'N',
                                      p_partition_1 IN VARCHAR2 DEFAULT NULL,
                                      p_owner_1     IN VARCHAR2 DEFAULTUSER)
  AUTHIDCURRENT_USER AS
 p_segname   VARCHAR2(100);
 p_type      VARCHAR2(30);
  p_owner     VARCHAR2(30);
 p_partition VARCHAR2(50);
 
 l_unformatted_blocks NUMBER;
 l_unformatted_bytes  NUMBER;
 l_fs1_blocks         NUMBER;
 l_fs1_bytes          NUMBER;
 l_fs2_blocks         NUMBER;
 l_fs2_bytes          NUMBER;
 l_fs3_blocks         NUMBER;
 l_fs3_bytes          NUMBER;
 l_fs4_blocks         NUMBER;
 l_fs4_bytes          NUMBER;
 l_full_blocks        NUMBER;
 l_full_bytes         NUMBER;
 
 l_free_blks          NUMBER;
 l_total_blocks       NUMBER;
 l_total_bytes        NUMBER;
 l_unused_blocks      NUMBER;
 l_unused_bytes       NUMBER;
 l_LastUsedExtFileId  NUMBER;
 l_LastUsedExtBlockId NUMBER;
 l_LAST_USED_BLOCK    NUMBER;
 
 PROCEDURE p(p_label IN VARCHAR2, p_num IN NUMBER) IS
  BEGIN
    DBMS_OUTPUT.put_line(RPAD(p_label,40, '.') || p_num);
  END;
BEGIN
 p_segname   := UPPER(p_segname_1);
 p_owner     := UPPER(p_owner_1);
 p_type      := p_type_1;
 p_partition := UPPER(p_partition_1);
 
  IF(p_type_1 = 'i' OR p_type_1 = 'I') THEN
    p_type:= 'INDEX';
  END IF;
 
  IF(p_type_1 = 't' OR p_type_1 = 'T') THEN
   p_type := 'TABLE';
  END IF;
 
  IF(p_type_1 = 'tp' OR p_type_1 = 'TP') THEN
   p_type := 'TABLE PARTITION';
  END IF;
 
  IF(p_type_1 = 'ip' OR p_type_1 = 'IP') THEN
   p_type := 'INDEX PARTITION';
  END IF;
 
  IF(p_type_1 = 'c' OR p_type_1 = 'C') THEN
   p_type := 'CLUSTER';
  END IF;
 
 DBMS_SPACE.UNUSED_SPACE(segment_owner             => p_owner,
                          segment_name              => p_segname,
                          segment_type              => p_type,
                          partition_name            => p_partition,
                          total_blocks              => l_total_blocks,
                          total_bytes               => l_total_bytes,
                          unused_blocks             => l_unused_blocks,
                          unused_bytes              => l_unused_bytes,
                         LAST_USED_EXTENT_FILE_ID  =>l_LastUsedExtFileId,
                          LAST_USED_EXTENT_BLOCK_ID =>l_LastUsedExtBlockId,
                          LAST_USED_BLOCK           => l_LAST_USED_BLOCK);
 
  IFp_space = 'MANUAL' OR (p_space <> 'auto' AND p_space <> 'AUTO')THEN
   DBMS_SPACE.FREE_BLOCKS(segment_owner    => p_owner,
                           segment_name      => p_segname,
                           segment_type      => p_type,
                           partition_name    => p_partition,
                           freelist_group_id=> 0,
                           free_blks         => l_free_blks);
 
   p('Free Blocks', l_free_blks);
  END IF;
 
 p('Total Blocks', l_total_blocks);
 p('Total Bytes', l_total_bytes);
 p('Unused Blocks', l_unused_blocks);
 p('Unused Bytes', l_unused_bytes);
  p('LastUsed Ext FileId', l_LastUsedExtFileId);
  p('LastUsed Ext BlockId', l_LastUsedExtBlockId);
  p('LastUsed Block', l_LAST_USED_BLOCK);
 
  /*IFthe segment is analyzed */
  IFp_analyzed = 'Y' THEN
   DBMS_SPACE.SPACE_USAGE(segment_owner     => p_owner,
                           segment_name       => p_segname,
                           segment_type       => p_type,