web-dev-qa-db-ja.com

Oracle EEからOracle XEに単一のスキーマをエクスポートする方法

開発目的(この場合:Java開発者のテストデータベースとして使用するため)にスキーマ(DDLまたはDDL + data)をOracle EE(Enterprise Edition)からOracle XE(Express Edition)にエクスポートしたい)。

ソーススキーマには、Oracle XEで利用できない機能がいくつか含まれていますが、開発に必要な機能はありません。ターゲットスキーマは、XEと互換性を持つように変更できます。

特に:

  • パーティション宣言は省略できます。
  • 省略または簡略化されたストレージ宣言(例:テーブル用に予約されている初期スペースを可能な限り少なくする)、
  • 省略または置換されたテーブルスペース宣言(XEで使用される単一のテーブルスペース)、
  • いくつかの高度な機能を備えたマテリアライズドビューは、単純化することも、単純なビューに置き換えることもできます。
  • ジョブは省略できます
  • Java関数(ほとんど使用されないが、1つのpl/sqlパッケージに存在)は、無効にするか、コンパイルエラーでインポートできます。

これを実現する1つの方法は、ソースDDLをsqlスクリプトにエクスポートし、それを手動で変更することです。しかし、他にもっと効率的な方法があるかどうか知りたいです。

  • Oracleバージョン:11g/12c
  • dDLを含むSQLファイルのサイズ:7MB

注: 同様の質問 はすでに存在しますが、私の場合、ソーススキーマとターゲットスキーマの違いをいくつか受け入れます。

2
user3078523

すでに述べたように、Oracle Express EditionはEnterprise Editionで使用されるすべての機能をサポートしていないため、このようなスキーマの移行を行うコマンドはありません。ただし、_expdp/impdp_の実行中に、必要なオブジェクトや機能を変更または含めたり、除外したりするために使用できるいくつかの有用なパラメーターを収集しようとしました。

  • パーティション宣言は省略できます。

その場合、impdpで_PARTITION_OPTIONS_パラメータを使用できます。

_PARTITION_OPTIONS=[NONE | DEPARTITION | MERGE]_。

PARTITION_OPTIONS

  • ストレージの宣言が省略または簡略化されている(たとえば、テーブル用に予約されている初期スペースが可能な限り少ない)。

TRANSFORMimpdpパラメータを使用すると、インポートされるオブジェクトのオブジェクト作成DDLを変更できます。

_TRANSFORM = transform_name:value[:object_type]_

[〜#〜] trnasform [〜#〜]

  • 省略または置換されたテーブルスペース宣言(XEで使用される単一のテーブルスペース)。

Oracle XEインスタンスでimpdpを実行中に_REMAP_TABLESPACE_パラメーターを使用できます。

_REMAP_TABLESPACE=source_tablespace:target_tablespace_

REMAP_TABLESPACE

  • いくつかの高度な機能を備えたマテリアライズドビューは、単純化するか、単純なビューに置き換えることができます。

そのようなマテリアライズドビューのDDLをSQL FILEにインポートしてから、手動でビューを作成する必要があると思います。

  • ジョブは省略できます。

EXCLUDEパラメータを使用してジョブを除外できますが、現在、Data Pump Export/Importは_DBMS_JOB_で作成されたジョブを除外/含めることができます。

参考

  • Java関数(使用頻度は低いが1つのpl/sqlパッケージに存在)を無効にするか、コンパイルエラーでインポートできます。

EXCLUDEを使用して、このようなJavaクラスを無視できます。

_EXCLUDE=Java_CLASS_

これで、これらのパラメーターを組み合わせて_expdp/impdp_コマンドを作成できます。

注:含まれているすべての参照リンクはOracle 11gバージョンに関連しています。ご使用のバージョンに関連するOracleのドキュメントを参照してください。

2
JSapkota