我今天注意到用于在oracle中收缩LOB的SQL命令在12c中不起作用。
ALTER TABLE SAMPLE_TABLE MODIFY lob (LOB_COLUMN) (SHRINK SPACE)
这会返回oracle错误
ORA-10635:无效的段或表空间类型
在oracle文档中提到SecureFiles LOB不支持SHRINK选项。
我想知道blob在安全文件中是如何压缩的。 oracle会在内部处理吗?
谢谢
答案 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;