从 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 数据库
大对象的大小未显示 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 数据库