В моем проекте миграции базы данных с открытым исходным кодом Flyway у меня есть функция, которая очищает все объекты в текущей схеме базы данных, не удаляя саму схему.
Типичная реализация работает какследует:
- Список всех объектов
- Создание операторов отбрасывания для этих объектов
Пространственные индексы Oracle вызывают у меня многохотя скорби.
Как можно надежно перечислить их , чтобы получить операторы DROP INDEX xyz?
Примечание: Это должно работать на обоих XE, 10gи 11g .Все ссылки в схеме MDSYS должны быть удалены.
Мое текущее решение выглядит следующим образом:
На XE:
- УДАЛИТЬ ИЗ mdsys.user_sdo_geom_metadata
- DELETE FROM mdsys.sdo_index_metadata_table WHERE sdo_index_owner = USER
- SELECT тип_объекта, имя_объекта FROM user_objects WHERE тип_объекта = 'TABLE'
- DROP * имя_таблицы * / CINCAS * CURCADE1036 *
В Oracle 10g:
- УДАЛИТЬ ИЗ mdsys.user_sdo_geom_metadata
- ВЫБРАТЬ object_type, object_name FROM user_objects WHERE object_type = 'TABLE' и object_name_ не похож на 'MDR% $ '
- DROP * table_name * CASCADE CONSTRAINTS PURGE / * для всех таблиц * /
10g, по-видимому, каскадно удаляет метаданные в MDSYS.sdo_index_metadata_table и удаляеттаблицы пространственных индексов (MDRT_1234 $ и т. п.).
XE не.
И 10g, и XE не каскадно удаляют метаданные в MDSYS.USER_SDO_GEOM_METADATA