Oracleのすべての空間インデックスを確実にリストしてドロップする方法は?
-
13-10-2019 - |
質問
私のオープンソースデータベース移行プロジェクトで フライウェイ, 、スキーマ自体を削除することなく、現在のデータベーススキーマ内のすべてのオブジェクトをクリーニングする機能があります。
典型的な実装は次のように機能します。
- すべてのオブジェクトをリストします
- これらのオブジェクトのドロップステートメントを生成します
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に存在するかどうかはわかりません。
所属していません StackOverflow