2012-02-24 74 views
7

在我的应用程序中删除,我们上传的庞大数据。如果任何错误上传的数据那么我们就可以删除data.So,无论数据删除的空间时,将收回的数据?。就是有什么对性能的影响有没有办法在Oracle中大量删除后回收空间?如何回收空间?回收后大的空间在Oracle

+0

参见http://stackoverflow.com/questions/10934037/shrink-a-database-in-oracle-11g – Vadzim 2017-03-02 12:16:53

回答

13

在Oracle中,删除数据不会自动回收磁盘空间。数据库将保留其存储空间,直到您执行某些对表空间的管理。这种行为的期望是,如果你一次需要存储空间,你可能会再次需要它,因此简单地保留分配会更有效率。

至于性能的影响,要处理的数据少一般会进行查询走得更快。 :)

要回收空间,你有几个选择。 This article from ORACLE-BASE对这种情况有一个相当全面的看法。

而且,你为什么会插入数据,然后确定它是“坏”来然后将其删除?难道你最好避免将数据从一开始放入?

+0

这是我们的发展环境,迫使我们去创造一个新的数据库的一个重大问题,每6 -8个月,并放弃旧的。为了测试/开发目的,我们每晚添加10-15个新用户,并在一周后删除旧用户。表空间回收的问题在于,如果任何一块数据位于表空间中并靠近文件末尾,则无法回收中间的任何空闲空间。实际上这很烦人。 – tsells 2012-02-26 01:02:28

+1

如果你经常丢弃/创建用户并且有很多怪异的用法模式,那么为什么不给每个用户自己的表空间? – 2012-02-27 14:07:39

+0

这是一种选择 - 在查看这个最新版本之后,我确实为“自动”用户提供了自己的表空间 - 所以我可以删除它们并删除表空间,而不必删除数据库。我不确定我想要为每个用户创建表空间,但同意这是一个可行的选择。感谢您的输入..... !!! – tsells 2012-02-27 17:58:05

0

删除后无法回收空间。但如果之后删除剩余数据的尺寸比较小,然后创建一个与数据的新表,删除旧表和新表重命名为旧名称

3

你需要研究的High Water Mark(HWM)。

基本上它是特定表曾经使用过的块的最大数量,如果你加载大量数据,你可能会增加HWM,删除那些记录不会减少HWM。

Here是关于如何调整HWM的一篇很好的文章,如果一旦你理解它,你认为它可能会影响你的环境,那么使用包含的提示减少你的HWM。

希望它可以帮助...

+1

sysdba.wordpress.com的链接不再可用。 – 2017-02-15 07:12:28

0

我知道这是一个老问题,但以备将来参考:

  • 删除空表,但空间已经“锁定”为未来的馅料
  • TRUNCATE TABLE可以做到这一点(你需要禁用引用表的所有外键才能工作)。