Удалить пустой раздел. Индексы помечены как недействительные?

Я хочу удалить пустой раздел, но я знаю, что оракул устанавливает все индексы как непригодные для использования всякий раз, когда вы выполняете оператор DDL раздела, такой как DROP, поэтому я должен добавить UPDATE GLOBAL INDEXES к оператору, хотя это выглядит ненужным.

Затем я придумал этот пост где написано, что он не будет помечать его как непригодный для использования, поэтому я решил проверить его. Дело в том, что я тестировал его в двух версиях оракула, и он работал по-разному!

Наличие двух экземпляров:

  • Дба(Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production)
  • ДБб(Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production)

В DBa он пометил их как недействительные, а в DBb, который содержал те же данные, что и в другой базе данных (клонированной с помощью exp/imp), удалось удалить их, не помечая их как непригодные для использования.

Можно ли явно указать Oracle, что вы хотите сохранить индексы пригодными для использования, поскольку в разделе нет данных (без перестроения индексов)?


person Mario Corchero    schedule 08.10.2013    source источник
comment
Если вы видите разницу, это, вероятно, зависит от того, когда была построена ваша статистика. Я использую 11.2, и я всегда видел, что индексы помечены как НЕИСПОЛЬЗУЕМЫЕ при усечении (или удалении) раздела. Теперь, если вы усекаете пустой раздел, о котором Oracle знает, что он пуст (вы построили статистику после того, как он был пуст), тогда, ВОЗМОЖНО, Oracle достаточно умен, чтобы знать, что ваш оператор truncate ни на что не повлияет, и просто оставляет индексы как ДЕЙСТВИТЕЛЬНЫЕ. Просто предположение, хотя   -  person tbone    schedule 08.10.2013


Ответы (3)


Пока я не могу понять, почему он был помечен как недействительный в размещенном, но не в другом, но есть что сказать, если у кого-то возникнет такая же проблема.

Запускайте его всегда с UPDATE GLOBAL INDEXES, поскольку, если раздел пуст, удаление не займет много времени, и это гарантирует, что индексы не будут помечены как недействительные. Поэтому нет оснований надеяться, что оракул их не пометит

person Mario Corchero    schedule 17.10.2013
comment
Я проверял данные из статистики, которые не были актуальными. Была одна строка, которая была удалена и заставила оракул помечать индексы как недействительные. - person Mario Corchero; 11.06.2014

Может быть, вы можете попробовать ниже, это поддерживает достоверность индекса во время падения. ALTER TABLE t1 DROP PARTITION p5 UPDATE GLOBAL INDEXES;

person Amit Arora    schedule 08.10.2013

да .. использовать ЛОКАЛЬНЫЕ индексы при создании индексов над многораздельной таблицей

person Mr.P    schedule 15.04.2018