В моем проекте миграции базы данных с открытым исходным кодом 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
как вы ищете для них в данный момент? – Matt
Я расширил свой вопрос, включив мое текущее решение (к сожалению, это большой взлом). –