Comment fiable liste et supprimer tous les index spatiaux dans Oracle?
-
13-10-2019 - |
Question
Dans mon projet de migration de base de données open-source des voies de migration, je dispose d'une fonctionnalité qui nettoie tous les objets dans le schéma de base de données en cours, sans laisser tomber le schéma lui-même.
La mise en œuvre typique fonctionne comme suit:
- Liste tous les objets
- Générer instructions de suppression de ces objets
Oracle Spatial Index ont été me cause beaucoup de chagrin si.
Comment fiable Énumérer eux afin de produire des déclarations de xyz DROP INDEX?
Note: Ce travail doit à la fois XE, 10g et 11g . Toutes les références dans le schéma MDSYS doivent être franchies.
Mon apparence actuelle de solution comme ceci:
Le XE:
- SUPPRIMER DE mdsys.user_sdo_geom_metadata ??li>
- SUPPRIMER DE mdsys.sdo_index_metadata_table OU sdo_index_owner = USER
- SELECT object_type, nom_objet DE user_objects OU object_type = 'TABLE'
- DROP * nom_table * CASCADE CONTRAINTES PURGE / * pour toutes les tables * /
Oracle 10g:
- SUPPRIMER DE mdsys.user_sdo_geom_metadata ??li>
- SELECT object_type, nom_objet DE user_objects OU object_type = 'TABLE' et object_name pas comme 'TRDM _% $'
- DROP * nom_table * CASCADE CONTRAINTES PURGE / * pour toutes les tables * /
10g semble en cascade l'élimination des métadonnées dans MDSYS.sdo_index_metadata_table et la suppression des tables d'index spatial (MDRT_1234 $ et analogues).
XE ne fonctionne pas.
Les deux 10g et XE ne cascade pas la suppression des métadonnées dans MDSYS.user_sdo_geom_metadata ??p>
La solution
Je l'ai résolu tous les index en dénombrant SPATIAL en utilisant
select INDEX_NAME from USER_SDO_INDEX_INFO
Et en utilisant INDEX_NAME pour générer DROP comme
DROP INDEX my_index
Autres conseils
sur 10g, essayez xxx_SDO_INDEX_yyy vues ou encore chercher des objets avec le type SPATIAL_INDEX
. Vous pouvez déposer chacun d'entre eux d'abord, puis déposer la table. Je ne sais pas si ceux-ci existent sur XE ou non.