5

私のオープンソース データベース移行プロジェクトFlywayには、スキーマ自体を削除せずに、現在のデータベース スキーマ内のすべてのオブジェクトをクリーンアップする機能があります。

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

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

しかし、 Oracle Spatial Indexesは私に多くの悲しみをもたらしてきました。

DROP INDEX xyz ステートメントを生成するために、それらを確実に列挙するにはどうすればよいですか?

注: これは、XE、10g および 11g の両方で機能する必要があります。MDSYS スキーマ内のすべての参照を削除する必要があります。

私の現在のソリューションは次のようになります。

XE の場合:

  • mdsys.user_sdo_geom_metadata から削除
  • mdsys.sdo_index_metadata_table から削除 WHERE sdo_index_owner = ユーザー
  • SELECT object_type, object_name FROM user_objects WHERE object_type = 'TABLE'
  • DROP *table_name* CASCADE CONSTRAINTS PURGE /* すべてのテーブル用 */

Oracle 10g の場合:

  • mdsys.user_sdo_geom_metadata から削除
  • SELECT object_type, object_name FROM user_objects WHERE object_type = 'TABLE' and object_name not like 'MDRT_%$'
  • DROP *table_name* CASCADE CONSTRAINTS PURGE /* すべてのテーブル用 */

10g では、MDSYS.sdo_index_metadata_table のメタデータの削除と空間インデックス テーブル (MDRT_1234$ など) の削除がカスケードされているようです。

XE にはありません。

10g と XE のどちらも、MDSYS.user_sdo_geom_metadata のメタデータの削除をカスケードしません。

4

2 に答える 2

5

を使用してすべての SPATIAL インデックスを列挙することで解決しました

select INDEX_NAME from USER_SDO_INDEX_INFO

そして、INDEX_NAME を使用して、次のような DROP ステートメントを生成します

DROP INDEX my_index
于 2011-03-17T21:33:35.163 に答える
0

10g では、xxx_SDO_INDEX_yyyビューを試すか、代わりに type のオブジェクトを探しますSPATIAL_INDEX。これらのそれぞれを最初に削除してから、テーブルを削除できます。これらが XE に存在するかどうかはわかりません。

于 2010-12-31T18:05:16.200 に答える