2013-10-08 47 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;