2010-12-28 7 views
4

В моем проекте миграции базы данных с открытым исходным кодом Flyway У меня есть функция, которая очищает все объекты в текущей схеме базы данных, не отбрасывая сама схему.Как надежно перечислить и отбросить все пространственные индексы в Oracle?

Типичная реализация работает следующим образом:

  • Список все объекты
  • Генерировать заявление бросания для этих объектов

Oracle Spatial Индексы был вызывающими мне много горя, хотя.

Как я могу надежно перечислить их, чтобы производить инструкции DROP INDEX xyz?

Примечание: Это должно работать как на XE, 10g и 11g. Все ссылки в схеме MDSYS должны исчезнуть.

Мое текущее решение выглядит следующим образом:

На ХЕ:

  • УДАЛИТЬ ИЗ mdsys.user_sdo_geom_metadata
  • DELETE FROM mdsys.sdo_index_metadata_table WHERE sdo_index_owner = USER
  • ВЫБРАТЬ object_type, object_name ОТ USER_OBJECTS WHERE object_type = 'TABLE'
  • DROP * table_name * CASCADE CONSTRAINTS PURGE/* для всех таблиц */

В Oracle 10g:

  • DELETE FROM mdsys.user_sdo_geom_metadata
  • ВЫБРАТЬ object_type, object_name FROM USER_OBJECTS WHERE object_type = 'Таблица' и object_name не нравится 'MDRT _% $'
  • DROP * table_name * CASCADE ТРУДНОСТИ PURGE/* для всех таблиц */

10г, кажется, каскадное удаление метаданных в MDSYS.sdo_index_metadata_tab le и удаление таблиц пространственных индексов (MDRT_1234 $ и т.п.).

XE нет.

Оба 10г и ХЕ не каскадное удаление метаданных в MDSYS.user_sdo_geom_metadata

+0

как вы ищете для них в данный момент? – Matt

+0

Я расширил свой вопрос, включив мое текущее решение (к сожалению, это большой взлом). –

ответ

4

Я решил это путем перечисления всех пространственных индексов с использованием

select INDEX_NAME from USER_SDO_INDEX_INFO 

И используя ИМЯ_ИНДЕКСА генерировать операторы DROP как

DROP INDEX my_index 
0

на 10г, попробуйте xxx_SDO_INDEX_yyy взгляды или же искать объекты с типом SPATIAL_INDEX. Сначала вы можете удалить каждый из них, а затем отбросить стол. Я не знаю, существуют ли они на XE или нет.

+0

Индексы не обозначены как SPATIAL_INDEX. У них есть object_type INDEX, как и все остальные. –

+0

Просто уточнить: этот ответ не решает мою проблему. –