【问题标题】:Drop Empty Partition. Are indexes marked as invalid?删除空分区。索引是否标记为无效?
【发布时间】:2013-10-08 14:30:28
【问题描述】:

我想删除一个空的分区,但我知道每当您执行像 DROP 这样的分区 DDL 语句时,oracle 会将所有索引设置为不可用,因此,我应该在语句中添加UPDATE GLOBAL INDEXES,尽管它看起来没有必要。

然后我想出了this post,它说它不会将其标记为不可用,所以我决定对其进行测试。问题是我在两个 oracle 版本中对其进行了测试,但效果不同!

有两个实例:

  • DBa(Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production)
  • DBb(Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production)

在 DBa 中,它将它们标记为无效,而在 DBb 中,它包含与其他 db(用 exp/imp 克隆)相同的数据,它成功删除而不将它们标记为不可用。

是否可以明确告诉 Oracle 您希望保持索引可用,因为分区中没有数据(不重建索引)?

【问题讨论】:

  • 如果您发现差异,这可能取决于您的统计数据是何时建立的。我使用 11.2,并且在截断(或删除)分区时总是看到标记为 UNUSABLE 的索引。现在,如果您要截断 Oracle 知道为空的空分区(您在它为空后构建统计信息),那么也许 Oracle 足够聪明,知道您的 truncate 语句不会影响任何内容,并且只是将索引保留为 VALID。只是猜测

标签: oracle oracle11g database-partitioning drop-table


【解决方案1】:

到目前为止,我无法找出为什么它在一个放置中被标记为无效,而在另一个放置中却没有,但如果有人遇到同样的问题,有话要说。

始终使用UPDATE GLOBAL INDEXES 运行它,因为如果分区为空,则不会花费任何时间来执行删除,并确保索引不会被标记为无效。因此,没有理由希望 oracle 不会标记它们

【讨论】:

  • 我正在检查不是最新的统计数据。有一行被删除并让 oracle 将索引标记为无效。
【解决方案2】:

也许你可以在下面尝试,这在下降期间保持索引有效性。 ALTER TABLE t1 DROP PARTITION p5 UPDATE GLOBAL INDEXES;

【讨论】:

    【解决方案3】:

    是的 .. 在分区表上创建索引时使用 LOCAL 索引

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-06
      • 1970-01-01
      • 1970-01-01
      • 2021-11-22
      • 1970-01-01
      • 2010-11-24
      相关资源
      最近更新 更多