web-dev-qa-db-ja.com

スキーマレベルでの選択的データ抽出

単一のデータポンプエクスポート内で次のことを達成しようとしています。

  • SCHEMA1=構造体のみ

  • SCHEMA2=構造のみ

  • SCHEMA3=構造とデータ

この質問の答えは、テーブルレベルでのみ機能します。

フィルタを使用して特定のテーブルからデータを削除することをお勧めします。

SCHEMA2.table1: WHERE 1=2

同じものが必要ですが、SCHEMA3以外のスキーマのすべてのデータに適用されます。

これはどのように行うことができますか?

1
Chris Finlayson

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を除外します。

そして、それがこれがあなたにとって適切でないかもしれない理由です。 T1SCHEMA1の両方に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)を実行したいと思います。

1
Balazs Papp