Domanda

Nel mio progetto di migrazione di database open-source Flyway , ho una caratteristica che pulisce tutti gli oggetti nello schema del database corrente, senza far cadere lo schema stesso.

La tipica implementazione funziona nel seguente modo:

  • Elenco di tutti gli oggetti
  • generare istruzioni goccia per questi oggetti

Indici Oracle Spatial sono state mi ha causato un sacco di dolore però.

Come posso in modo affidabile enumerate di loro al fine di produrre dichiarazioni XYZ DROP INDEX?

Nota: Questo lavoro deve sia su XE, 10g e 11g . Tutti i riferimenti nello schema MDSYS deve essere andato.

Il mio attuale aspetto soluzione di questo tipo:

In XE:

  • DELETE FROM mdsys.user_sdo_geom_metadata
  • DELETE FROM WHERE mdsys.sdo_index_metadata_table sdo_index_owner = USER
  • Seleziona object_type, nome_oggetto FROM WHERE user_objects tipo_oggetto = 'TABLE'
  • GOCCIA * * table_name VINCOLI CASCADE PURGE / * per tutte le tabelle * /

In Oracle 10g:

  • DELETE FROM mdsys.user_sdo_geom_metadata
  • Seleziona object_type, nome_oggetto FROM WHERE user_objects tipo_oggetto = 'table' e object_name non come 'MDRT _% $'
  • GOCCIA * * table_name VINCOLI CASCADE PURGE / * per tutte le tabelle * /

10g sembra a cascata la rimozione dei metadati in MDSYS.sdo_index_metadata_table e la rimozione delle tabelle indice spaziali (MDRT_1234 $ e simili).

XE non è così.

Sia 10g XE e non cascata la rimozione dei metadati in MDSYS.user_sdo_geom_metadata

È stato utile?

Soluzione

ho risolto enumerando tutti gli indici spaziali utilizzando

select INDEX_NAME from USER_SDO_INDEX_INFO

E l'utilizzo INDEX_NAME per generare dichiarazioni cadere come

DROP INDEX my_index

Altri suggerimenti

sulle 10g, provare il xxx_SDO_INDEX_yyy viste o in alternativa cercare oggetti con tipo SPATIAL_INDEX. Si potrebbe cadere ognuno di questi prima poi eliminare la tabella. Non so se queste esistono sul XE o meno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top