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

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

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

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

Пространственные индексы Oracle вызывают у меня много горя.

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

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

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

На XE:

  • УДАЛИТЬ ИЗ mdsys.user_sdo_geom_metadata
  • УДАЛИТЬ ИЗ mdsys.sdo_index_metadata_table WHERE sdo_index [SELECT_METADATA_TABLE WHERE sdo_index] object_type, object_name FROM user_objects WHERE object_type = 'TABLE'
  • DROP * table_name * CASCADE CONSTRAINTS PURGE / * для всех таблиц * /

В Oracle 10g:

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

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

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

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

5
задан Axel Fontaine 31 December 2010 в 16:20
поделиться