如何在Oracle

时间:2015-04-24 05:06:36

标签: oracle shrink lob

我今天注意到用于在oracle中收缩LOB的SQL命令在12c中不起作用。

ALTER TABLE SAMPLE_TABLE MODIFY lob (LOB_COLUMN) (SHRINK SPACE)

这会返回oracle错误

  

ORA-10635:无效的段或表空间类型

在oracle文档中提到SecureFiles LOB不支持SHRINK选项。

我想知道blob在安全文件中是如何压缩的。 oracle会在内部处理吗?

谢谢

2 个答案:

答案 0 :(得分:2)

ALTER TABLE SAMPLE_TABLE MOVE LOB(LOB_COLUMN) STORE AS (TABLESPACE USERS)

注意:与读取方式不同,这是一个 move lob 操作。这是一个 move TABLE 操作,同时也移动了一个 lob。

这就是它使索引无效的原因,因为它移动整个表而不仅仅是 lob。当然,这可能需要很长时间,并且在操作过程中会消耗 2 倍的空间,因为 oracle 会复制数据,并且只有在完成后才会释放旧段。

答案 1 :(得分:0)

如果要使用SecureFiles缩小LOB,请使用以下语句:

ALTER TABLE SAMPLE_TABLE MOVE LOB(LOB_COLUMN) STORE AS (TABLESPACE USERS)

请小心使用-此命令会使SAMPLE_TABLE上的所有索引无效,因此,在完成LOB之后,应重新构建它们:

ALTER INDEX <index_name> REBUILD;