我有一个存储在表空间中的表,其中的大小增长通常不会太大。然而,在最后一次加载数据时,它突然需要更多的额外空间,同时插入相同的确切数据。以下是表空间大小的历史记录
SELECT * FROM bcadw.tablespace_monitoring
WHERE tablespace_name = 'TESTING' AND last_update_dt >= trunc(SYSDATE - 97);
1月5日,我将一些数据插入到表中,由于加载中有重复的数据,1月6日我截断了表并重新加载了表(行计数较少)。然而,为了存储数据,表突然需要大幅度增加空间。造成这个问题的原因可能是什么?
发布于 2023-01-06 13:04:58
Oracle几乎从不自动缩小文件的大小:截断表实际上不会缩小表空间中的表空间或数据文件的大小,甚至也不会缩小分配给表的空间。它只释放特定表的行,以便可以重用空间,除非包括DROP STORAGE
选项。
TRUNCATE TABLE table_a DROP STORAGE;
注意,如果不删除存储,表的选择将扫描所有空块以及包含新数据的任何块。如果要从实际的表空间数据文件中回收空间,还必须执行其他几个步骤,如本文所述:在数据文件中回收未使用的空间
简而言之:
表空间重组通常意味着将对象从表空间中重新定位--或者导出到外部文件,或者重新定位到单独的表空间--这样就可以缩小原始表空间数据文件,然后将对象移动或导入回原来的位置。这是一个相对简单的过程,但通常涉及停机时间。
还请注意,表空间也可能包含表数据以外的许多东西,例如索引或LOB段,它们需要单独处理,例如重建或重新定位。
如果表空间只包含一个表而不包含其他对象,那么ALTER TABLE ... SHRINK SPACE
命令(如所描述的这里 )可能足以帮助降低文件中的高水标记,并允许ALTER DATABASE DATAFILE ... RESIZE
命令工作,尽管它并不能将所有数据块移动到更接近文件前面的位置(S)。
https://dba.stackexchange.com/questions/321793
复制相似问题