2013-10-08 44 views
3

我想删除一个空的分区,但我知道oracle将所有索引设置为不可用,无论何时执行分区DDL语句(如DROP),因此,我应该将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 (用exp/imp克隆),它会成功删除而不标记它们不可用。

是否可以明确地告诉Oracle要保持索引可用,因为在该分区中没有数据(无需重建索引)?

+1

如果您看到不同之处,则可能取决于您的统计信息的构建时间。我使用11.2,并且在截断(或删除)分区时,我总是看到标记为UNUSABLE的索引。现在,如果你截断了一个Oracle知道为空的空分区(你在建立统计信息后是空的),那么PERHAPS Oracle足够聪明地知道你的truncate语句不会影响任何内容,并且简单地将索引保留为VALID。只是猜测虽然 – tbone

回答

1

到目前为止,我无法找出为什么它被标记为无效放置的,但不是在其他人,但有一些东西,以防有人说有同样的问题。

总是以UPDATE GLOBAL INDEXES运行它,因为如果分区为空,则不需要时间来执行删除操作,它可以确保索引不会被标记为无效。因此,没有理由希望oracle不会标记它们

+0

我正在检查数据从不是最新的统计数据。有一行被贬低,并使甲骨文将索引标记为无效。 –

0

可能你可以试试下面,这会在下降过程中保持索引有效性。 ALTER TABLE t1 DROP PARTITION p5 UPDATE GLOBAL INDEXES;