从 table 中删除行是否也会释放 CLOB 或 BLOB 列中的 space 大对象?

Does deleting the rows from table also release space of large objects in CLOB or BLOB columns?

大对象的大小未显示 table 大小,其中通过 dba_segments 进行查询,其中 table_name=abc 因此从 table 中删除行也会释放 space 中的 CLOB 或 BLOB 列中的大对象 tables?

如果删除具有大型 LOB 对象的行,则 oracle 不会自动将 space 释放到 tablespace。

您需要申请 space(size),它将使用以下查询发布到您的 tablespace:

ALTER TABLE <YourTable> MODIFY LOB (<LobColumn>) (SHRINK SPACE);

您可以使用以下查询计算 LOB 段的总大小:

SELECT OWNER,SEGMENT_NAME,ROUND(SUM(BYTES)/1024/1024) "LOB size (mb)" 
FROM DBA_SEGMENTS
WHERE SEGMENT_NAME IN 
    (
    SELECT SEGMENT_NAME 
    FROM DBA_LOBS WHERE TABLE_NAME = <YOURTABLE>
    AND OWNER = <YOUROWNER>
    )
GROUP BY OWNER,SEGMENT_NAME; 

你可以计算删除记录前后的大小,你会发现没有区别,但是一旦你执行上述ALTER TABLE命令(删除行后),你会看到使用以上查询。

干杯!!

如果table不大,你在tablespace中有足够的space,而你没有ALTER TABLE的权限,那么我建议采用以下方法。

删除记录后

CREATE TABLE NEW_LOB_TABLE AS SELECT * FROM ORIGINAL_LOB_TABLE
DROP ORIGINAL_LOB_TABLE
RENAME NEW TABLE TO ORIGINAL TABLE 

检查这个答案,我的数据库是 40 数据库,在 SQLManager 中使用 'Vaccum' 命令后它减少到 10 数据库