私のオープンソース データベース移行プロジェクト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 のメタデータの削除をカスケードしません。