Pregunta

En mi proyecto de migración de base de datos de código abierto Flyway , tengo una función que limpia todos los objetos en el esquema de base de datos actual, sin dejar caer el esquema en sí.

La aplicación típica es el siguiente:

  • Lista de todos los objetos
  • Generar declaraciones de caída para estos objetos

Índices de Oracle Spatial me han estado causando muchos dolores de cabeza sin embargo.

¿Cómo puedo fiable enumerar con el fin de producir los estados xyz DROP INDEX?

Nota: Este trabajo imprescindible en ambos XE, 10g y 11g . Todas las referencias en el esquema MDSYS deben haber desaparecido.

Mis actuales miradas solución como esta:

En XE:

  • Eliminar de mdsys.user_sdo_geom_metadata
  • BORRAR DE DONDE mdsys.sdo_index_metadata_table sdo_index_owner = USUARIO
  • tipo_objeto SELECT, object_name DE user_objects DONDE tipo_objeto = 'TABLE'
  • DROP * * nombre_tabla CASCADE CONSTRAINTS PURGA / * para todas las tablas * /

En Oracle 10g:

  • Eliminar de mdsys.user_sdo_geom_metadata
  • tipo_objeto SELECT, object_name DE DONDE user_objects tipo_objeto = 'mesa' y no como object_name 'MDRT _% $'
  • DROP * * nombre_tabla CASCADE CONSTRAINTS PURGA / * para todas las tablas * /

10 g parece en cascada la eliminación de los metadatos en MDSYS.sdo_index_metadata_table y la eliminación de las tablas de índices espaciales (MDRT_1234 $ y similares).

XE no lo hace.

Tanto 10g XE y no en cascada la eliminación de los metadatos en MDSYS.user_sdo_geom_metadata

¿Fue útil?

Solución

Lo resuelto mediante la enumeración de todos los índices espaciales utilizando

select INDEX_NAME from USER_SDO_INDEX_INFO

Y el uso de INDEX_NAME para generar instrucciones DROP como

DROP INDEX my_index

Otros consejos

en 10g, probar el xxx_SDO_INDEX_yyy puntos de vista o, alternativamente, buscar objetos con tipo SPATIAL_INDEX. Se podría colocar cada uno de ellos primero y luego eliminar la tabla. No sé si estos existen en XE o no.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top