首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Oracle中存储数据所需的存储量大幅增加

在Oracle中存储数据所需的存储量大幅增加
EN

Database Administration用户
提问于 2023-01-06 10:28:49
回答 1查看 65关注 0票数 1

我有一个存储在表空间中的表,其中的大小增长通常不会太大。然而,在最后一次加载数据时,它突然需要更多的额外空间,同时插入相同的确切数据。以下是表空间大小的历史记录

代码语言:javascript
运行
复制
SELECT * FROM bcadw.tablespace_monitoring
WHERE tablespace_name = 'TESTING'  AND last_update_dt >= trunc(SYSDATE - 97);

1月5日,我将一些数据插入到表中,由于加载中有重复的数据,1月6日我截断了表并重新加载了表(行计数较少)。然而,为了存储数据,表突然需要大幅度增加空间。造成这个问题的原因可能是什么?

EN

回答 1

Database Administration用户

发布于 2023-01-06 13:04:58

Oracle几乎从不自动缩小文件的大小:截断表实际上不会缩小表空间中的表空间或数据文件的大小,甚至也不会缩小分配给表的空间。它只释放特定表的行,以便可以重用空间,除非包括DROP STORAGE选项。

代码语言:javascript
运行
复制
TRUNCATE TABLE table_a DROP STORAGE;

注意,如果不删除存储,表的选择将扫描所有空块以及包含新数据的任何块。如果要从实际的表空间数据文件中回收空间,还必须执行其他几个步骤,如本文所述:在数据文件中回收未使用的空间

简而言之:

  1. 用空闲空间标识表空间
  2. 重组表空间(有几种方法是可能的)

表空间重组通常意味着将对象从表空间中重新定位--或者导出到外部文件,或者重新定位到单独的表空间--这样就可以缩小原始表空间数据文件,然后将对象移动或导入回原来的位置。这是一个相对简单的过程,但通常涉及停机时间。

还请注意,表空间也可能包含表数据以外的许多东西,例如索引或LOB段,它们需要单独处理,例如重建或重新定位。

如果表空间只包含一个表而不包含其他对象,那么ALTER TABLE ... SHRINK SPACE命令(如所描述的这里 )可能足以帮助降低文件中的高水标记,并允许ALTER DATABASE DATAFILE ... RESIZE命令工作,尽管它并不能将所有数据块移动到更接近文件前面的位置(S)。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/321793

复制
相关文章

相似问题

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