В моем проекте миграции базы данных с открытым исходным кодом 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