gpt4 book ai didi

oracle - 如何回收已删除 LOB 的存储空间

转载 作者:行者123 更新时间:2023-12-02 08:58:42 29 4
gpt4 key购买 nike

我有一个 LOB 表空间。目前 12GB 可用空间中有 9GB。而且,据我所知,删除记录不会回收表空间中的任何存储。 (这是通过监视存储的简单方法——针对 user_extents 的查询,这几乎是我作为非 DBA 所允许的全部内容)我开始担心如何处理进一步的处理。

我担心的只是空间不足——表空间可用空间为 12 GB 中的大约 9 GB,我想在请求更多空间之前弄清楚如何回收空间。

LOB 列存储在单独的表空间中,尽管小型列允许“行存储”。

这是 Oracle 11.1,数据位于同一个表的 CLOB 和 BLOB 列中。 LOB索引段(SYS_IL...)很小,所有存储都在数据段(SYS_LOB...)

我们尝试了清除和合并,但没有得到任何结果——user_extents 中的字节数相同。

“Alter table xxx move”可以工作,但我们需要有一个地方可以将其移动到有足够空间容纳修改后的数据的地方。当然,我们还需要在下类时间执行此操作并重建索引,但这很容易。

复制出好的数据并进行截断,然后将其复制回来,也可以。但这几乎正是“alter table”命令的作用。

我是否缺少一些简单的方法来缩小规模并恢复存储空间?或者“alter table xxx move”是最好的方法吗?或者这不是问题,Oracle 会在需要时从已删除的 lob 行中夺回空间?

最佳答案

这个问题很老了,但从来没有一个有效的答案,可能对很多人有用,所以这里是我在面对这个问题时找到的解决方案。

你是对的,删除 LOB 不会回收表景观中的任何存储。

在删除 LOB 之前和之后运行此查询将给出相同的结果

select bytes
from user_segments
where tablespace_name = yourTableSpace
and segment_name = yourTableName;

阅读this Oracle文档,我发现你需要执行以下语句

ALTER TABLE yourLobTable MODIFY LOB (yourLobColumn) (SHRINK SPACE);

这将缩小 BASICFILE LOB 段。

现在如果您重新执行查询

select bytes
from user_segments
where tablespace_name = yourTableSpace
and segment_name = yourTableName;

您会注意到该空间已释放到表空间,并且可以根据需要重新使用该空间。

现在,对于那些想要释放磁盘空间的人,请注意,数据文件不会自动调整大小,并且仍会保留磁盘上的完整大小。

但在调整数据文件大小之前,请确保使用这些查询(使用您需要的查询)释放段中未使用的空间(如前所述从同一个文档中窃取它)

ALTER TABLE table DEALLOCATE UNUSED KEEP integer;
ALTER INDEX index DEALLOCATE UNUSED KEEP integer;
ALTER CLUSTER cluster DEALLOCATE UNUSED KEEP integer;

请注意,KEEP 子句是可选的,可让您指定段中保留的空间量。您可以通过检查 DBA_FREE_SPACE View 来验证已释放的空间是否已释放。

现在要重新调整数据文件的大小,

ALTER DATABASE DATAFILE yourDatafile.dbf resize 500M

请注意,调整大小时可以缩小的最大大小取决于数据文件中最后一个数据 block 的位置。因此,在删除大量数据后,您很可能无法真正调整大小。然后,最简单的方法是导出数据并重新导入到另一个表空间中,然后删除旧的表空间。导入数据时,Oracle会尽可能打包。

如果您想释放更多空间,可以清除临时表空间,该表空间有时会占用大量空间(我的数据库为 5GB)。使用以下语句检查其大小:

SELECT tablespace_name, file_name, bytes
FROM dba_temp_files WHERE tablespace_name like 'TEMP%';

关于oracle - 如何回收已删除 LOB 的存储空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3038792/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com