Oracleのすべての空間インデックスを確実にリストしてドロップする方法は?

StackOverflow https://stackoverflow.com/questions/4545190

質問

私のオープンソースデータベース移行プロジェクトで フライウェイ, 、スキーマ自体を削除することなく、現在のデータベーススキーマ内のすべてのオブジェクトをクリーニングする機能があります。

典型的な実装は次のように機能します。

  • すべてのオブジェクトをリストします
  • これらのオブジェクトのドロップステートメントを生成します

Oracle Spatial Indexes しかし、私に多くの悲しみを引き起こしてきました。

どうやって 確実に列挙します ドロップインデックスXYZステートメントを作成するために?

注:これは両方で動作する必要があります Xe、10gおよび11g. 。 MDSYSスキーマのすべての参照はなくてなければなりません。

私の現在の解決策は次のようになります:

xe:

  • mdsys.user_sdo_geom_metadataから削除します
  • mdsys.sdo_index_metadata_tableからdelete where sdo_index_owner = user
  • object_type、object_type = 'table' from user_objectsを選択します
  • ドロップ * table_name *すべてのテーブルのcascade constraints purge / *

Oracle 10G:

  • mdsys.user_sdo_geom_metadataから削除します
  • object_type、object_name from user_objects from where where object_type = 'table'およびobject_name 'like' mdrt _%$ '
  • ドロップ * table_name *すべてのテーブルのcascade constraints purge / *

10Gは、MDSYS.SDO_INDEX_METADATA_TABLEのメタデータの除去と、空間インデックステーブル(MDRT_1234 $など)の除去をカスケードしているようです。

xeはしません。

10GとXEの両方は、MDSYS.USER_SDO_GEOM_METADATAでメタデータを除去することをカスケードしません

役に立ちましたか?

解決

すべての空間インデックスを使用して列挙して解決しました

select INDEX_NAME from USER_SDO_INDEX_INFO

index_nameを使用して、次のようなドロップステートメントを生成します

DROP INDEX my_index

他のヒント

10gで、試してみてください xxx_sdo_index_yyy 視聴または型を持つオブジェクトを見るか、または探してください SPATIAL_INDEX. 。これらのそれぞれを最初に落とし、テーブルをドロップできます。これらがXEに存在するかどうかはわかりません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top