【问题标题】:Compressing LOB-segments doesnt reclaim space压缩 LOB 段不会回收空间
【发布时间】:2018-10-03 20:01:39
【问题描述】:

我尝试压缩 lob 段:

ALTER TABLE "MA_USER"."TEST_CLOB_COMPRESS3"  MODIFY 
    LOB("RTDM_RESPONSE_XML") (
         compress high  
    );

但此查询报告“字节”列具有相同的值:

select S.BYTES/1024/1024/1024,S.* from dba_segments S where segment_name in (select segment_name from dba_lobs where lower(TABLE_NAME) = 'test_clob_compress3');

我应该如何压缩 lob 段以回收空间?

【问题讨论】:

    标签: sql oracle compression blob clob


    【解决方案1】:

    试试这个 -

    ALTER TABLE <table_name> MODIFY LOB (<lob_column>) (SHRINK SPACE);
    

    【讨论】:

    • 我有一个错误:ORA-10635: Invalid segment or tablespace type
    • 您正在尝试哪个版本的 Oracle? .... 这应该适用于 Oracle 10g R2 及更高版本。
    • 我使用 Oracle 11g
    • 运行这个:ALTER TABLE "MA_USER"."TEST_CLOB_COMPRESS3" MODIFY LOB (RTDM_RESPONSE_XML) (SHRINK SPACE CASCADE);但是有相同的字节
    【解决方案2】:

    作为问题解决方案,您可以尝试对 LOB 列上的 ALTER TABLE 命令使用 MOVE(即不修改)子句,并指定压缩程度:

    ALTER TABLE 表名 移动 lob(lob_column_name) 存储为安全文件 ( 禁用行中存储 TABLESPACE 表空间名称 压缩高 缓存 )

    因为仅仅通过压缩修改 LOB 会增加他的空间 x2 倍:

    更改表contracts_sec 修改 lob(orig_file) (压缩高)

    【讨论】:

      【解决方案3】:

      根据https://oracle-base.com/articles/misc/alter-table-shrink-space-online,缩小安全文件 LOB 段的正确解决方案如下:

      ALTER TABLE TABLE_NAME MOVE LOB (LOB_COLUMN_NAME) STORE AS (NOCOMPRESS);
      

      这对我来说确实很有帮助,不像 ALTER TABLE TABLE_NAME MODIFY LOB (LOB_COLUMN_NAME) (SHRINK SPACE CASCADE) 没有回收可用空间。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-17
        • 2013-06-24
        • 2016-05-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多