Как надежно перечислить и удалить все пространственные индексы в Oracle?

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

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

  • Список всех объектов
  • Сгенерируйте операторы перетаскивания для этих объектов

Однако Oracle Spatial Indexes доставляет мне много горя.

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

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

Мое текущее решение выглядит так:

On XE:

  • УДАЛИТЬ ИЗ mdsys.user_sdo_geom_metadata
  • УДАЛИТЬ ИЗ mdsys.sdo_index_metadata_table ГДЕ sdo_index_owner = ПОЛЬЗОВАТЕЛЬ
  • ВЫБЕРИТЕ тип_объекта, имя_объекта FROM user_objects ГДЕ object_type = 'TABLE'
  • DROP * table_name * CASCADE CONSTRAINTS PURGE / * для всех таблиц * /

В Oracle 10g:

  • УДАЛИТЬ ИЗ mdsys.user_sdo_geom_metadata
  • ВЫБЕРИТЕ object_type, object_name FROM user_objects WHERE object_type = 'TABLE' и object_name не как 'MDRT _% $'
  • DROP * table_name * CASCADE CONSTRAINTS PURGE / * для всех таблиц * /

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

XE этого не делает.

И 10g, и XE не каскадно удаляют метаданные в MDSYS. User_sdo_geom_metadata


person Axel Fontaine    schedule 28.12.2010    source источник
comment
как вы их сейчас ищете?   -  person Matt    schedule 31.12.2010
comment
Я расширил свой вопрос, включив в него свое текущее решение (которое, к сожалению, является серьезным взломом).   -  person Axel Fontaine    schedule 31.12.2010


Ответы (2)


Я решил это, перечислив все ПРОСТРАНСТВЕННЫЕ индексы, используя

select INDEX_NAME from USER_SDO_INDEX_INFO

И используя INDEX_NAME для генерации операторов DROP, таких как

DROP INDEX my_index
person Axel Fontaine    schedule 17.03.2011

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

person Matt    schedule 31.12.2010
comment
Индексы не помечены как SPATIAL_INDEX. У них есть object_type INDEX, как и у всех остальных. - person Axel Fontaine; 01.01.2011