単一のデータポンプエクスポート内で次のことを達成しようとしています。
SCHEMA1=構造体のみ
SCHEMA2=構造のみ
SCHEMA3=構造とデータ
この質問の答えは、テーブルレベルでのみ機能します。
フィルタを使用して特定のテーブルからデータを削除することをお勧めします。
SCHEMA2.table1: WHERE 1=2
同じものが必要ですが、SCHEMA3以外のスキーマのすべてのデータに適用されます。
これはどのように行うことができますか?
Data Pumpのフィルタリングオプションは、まだ改善する必要があります。とにかく、あなたは以下のパラメータを試すことができます:
directory=data_pump_dir
dumpfile=dump.dmp
logfile=export.log
schemas=schema1,schema2,schema3
exclude=TABLE_DATA:" IN (select table_name from dba_tables where owner in ('SCHEMA1', 'SCHEMA2') union select partition_name from dba_tab_partitions where table_owner in ('SCHEMA1', 'SCHEMA2'))"
これは、exclude
部分で名前が提供されたクエリの結果と一致するであるすべてのテーブルとパーティションのTABLE_DATA
を除外します。
そして、それがこれがあなたにとって適切でないかもしれない理由です。 T1
とSCHEMA1
の両方にSCHEMA3
というテーブルがある場合、上記のクエリはSCHEMA3.T1
からT1
を返し、Data PumpはSCHEMA1
というすべてのテーブルのTABLE_DATA
を無視するため、T1
のデータは除外されます。 SCHEMA2
にパーティション化されたテーブルがあり、P1
というパーティションがある場合、テーブルSCHEMA3.P1
のデータは除外されます。上記は、参照されているすべてのスキーマでテーブル名とパーティション名が異なる場合に機能する可能性があります。
または、expdpコマンドを動的に生成するか、DBMS_DATAPUMPを使用してSCHEMA3
からすべてのテーブルデータを除外することもできます。
ただし、SCHEMA1,SCHEMA2
を使用してCONTENT=METADATA_ONLY
に対して2つの個別のエクスポートを実行し、CONTENT=ALL
に対してデフォルトのエクスポート(SCHEMA3
)を実行したいと思います。