首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何减少oracle数据库存储空间?

如何减少oracle数据库存储空间?
EN

Stack Overflow用户
提问于 2017-10-13 22:37:46
回答 2查看 2.3K关注 0票数 1

我遇到了硬盘空间不足的问题。因此,我删除了oracle数据库中一个大表中的所有记录。但是我的硬盘空间并没有改变。我怎么才能修复它?

EN

回答 2

Stack Overflow用户

发布于 2017-10-13 22:39:29

尝试使用ALTER TABLE table_name SHRINK SPACE CASCADE;并重新构建索引。

票数 3
EN

Stack Overflow用户

发布于 2017-10-13 23:10:27

从表中删除所有行不会重置高水位线,也不会释放任何空间。这是因为对于DML操作,Oracle假定空间将在以后重用,而不会费心释放它。

您可能希望运行一条TRUNCATE语句。它也比DELETE快得多,因为它不会生成任何重做或撤消。但要注意,截断表是一条不能回滚的DDL语句。

TRUNCATEing表将空间释放给表空间,该空间可供其他对象使用。但它仍然不能减少操作系统空间的使用量。降低磁盘空间需要缩小数据文件。

缩小数据文件可能很棘手。数据文件只能缩小到最后一个范围。在这种情况下,必须对数据文件进行碎片整理。这可以由Oracle Enterprise Manager完成,您可以找到许多其他脚本来执行此操作。它们通常涉及移动或重建所有对象。

节省空间的最简单方法是尝试缩小每个文件。这不会释放所有可用空间,但在实践中,大多数空闲空间通常是在最后一个扩展区之后,可以回收。

运行下面的脚本,它将生成一组alter语句,以尝试将数据文件大幅收缩。大多数语句都会失败,但这没问题。将数字减半,然后重复重试。这是一种“愚蠢”的方式,但它通常可以快速释放一些空间。

代码语言:javascript
运行
复制
with decrease_size as (select 64 gb from dual)
select 'alter database datafile '''||file_name||''' resize '||to_char(round(bytes/1024/1024/1024)-(select gb from decrease_size))||'g;'
from dba_data_files
where bytes > (select gb from decrease_size) * 1024*1024*1024
order by 1 desc;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46732408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档