【问题标题】:reclaim the space after a large delete in oracle在 oracle 中大删除后回收空间
【发布时间】:2012-02-24 14:36:23
【问题描述】:

在我的应用程序中,我们上传了大量数据。如果有任何错误上传的数据,那么我们可以删除数据。那么,无论什么数据删除了那个空间,什么时候会回收数据?对性能有什么影响吗?无论如何要回收oracle大删除后的空间?如何回收空间?

【问题讨论】:

标签: oracle


【解决方案1】:

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

就性能影响而言,要处理的数据越少,通常查询速度就越快。 :)

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

另外,你为什么要插入数据,然后确定它是“坏的”然后删除它?避免从一开始就输入数据不是更好吗?

【讨论】:

  • 这是我们开发环境中的一个主要问题,它迫使我们每 6-8 个月创建一个新数据库并删除旧数据库。我们每晚添加 10-15 个新用户用于测试/开发目的,并在一周后删除旧用户。表空间回收的问题在于,如果任何数据块驻留在文件末尾的表空间中 - 您无法回收中间的任何可用空间。其实挺烦人的。
  • 如果您不断删除/创建用户并且有很多奇怪的使用模式,那么为什么不给每个用户自己的表空间呢?
  • 这是一种选择——在查看了这个最新版本之后,我确实为“自动”用户提供了自己的表空间——所以我可以删除它们并删除表空间,而不必删除数据库。我不确定我是否要为每个用户创建表空间——但我同意这是一个可行的选择。感谢您的输入.....!!!
【解决方案2】:

您需要研究High Water Mark (HWM)。

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

Here 是一篇很棒的文章,介绍了如何调整 HWM,如果您理解它后认为它可能会影响您的环境,那么请使用包含的提示来降低您的 HWM。

希望对你有帮助...

【讨论】:

  • sysdba.wordpress.com 的链接不再可用。
【解决方案3】:

删除后无法回收空间。但是如果删除后剩余数据的大小相对较小,那么用数据创建一个新表,删除旧表并将新表重命名为旧名称

【讨论】:

    【解决方案4】:

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

    • DELETE 清空表,但空间已“锁定”以供将来填充
    • TRUNCATE TABLE 可以解决问题(您需要禁用所有引用该表的外键才能正常工作)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-06
      • 1970-01-01
      • 2011-08-24
      • 1970-01-01
      • 2017-05-02
      • 2014-07-31
      • 1970-01-01
      相关资源
      最近更新 更多