4

Oracle テーブルからエクスポートされた大きな (数 GB) データ ファイルがあります。このデータを別の Oracle インスタンスにインポートしたいのですが、元のテーブルとは異なるテーブル名を使用したいと考えています。これは可能ですか?どのように?

インポート システムとエクスポート システムの両方が Oracle 11g です。これにより違いが生じる場合、テーブルには BLOB 列が含まれます。

ありがとう!

更新:

ここでのアイデアは、テーブルを使用しているシステムのダウンタイムを最小限に抑えながら、テーブルを更新することでした。解決策 ( Vincent Malgratの回答とAPCの更新に基づく) は次のとおりです。

  1. テーブル名がA
  2. 一時スキーマを作成するTEMP_SCHEMA
  3. 私たちのデータをにインポートしますTEMP_SCHEMA.A
  4. CREATE REAL_SCHEMA.B AS SELECT * FROM TEMP_SCHEMA.A
  5. DROP TABLE REAL_SCHEMA.AREAL_SCHEMA.Aに名前を変更REAL_SCHEMA.A_OLD
  6. REAL_SCHEMA.Bに名前を変更REAL_SCHEMA.A
  7. DROP REAL_SCHEMA.A_OLD

このように、ダウンタイムはステップ 4 と 5 の間のみであり、どちらもデータ サイズとは関係ありません。これが機能しない場合は、ここに更新を投稿します:-)

4

5 に答える 5

5

古い EXP および IMP ユーティリティを使用している場合、これを行うことはできません。唯一のオプションは、同じ名前のテーブルにインポートすることです (ただし、テーブルを所有するスキーマを変更することはできます。

ただし、あなたは11gを使用していると言います。10g で導入された DataPump ユーティリティを使用しない理由はありません。これは、インポートとエクスポートを置き換えるものです。11g では、そのユーティリティが REMAP_TABLE オプションを提供するため、まさに必要なことを実行できます。

編集

私がこれを書いている間にOPが別の応答に追加したコメントを読んだので、REMAP_TABLEオプションは彼らの場合には機能しないと思います。新しいオブジェクトの名前のみを変更します。元の名前のテーブルがターゲット スキーマに存在する場合、インポートは ORA-39151 で失敗します。ごめん。

編集ビス

OPが最終的に選択したソリューション(既存のテーブルを削除し、新しいテーブルに置き換える)を考えると、TABLE_EXISTS_ACTION={TRUNCATE | REPLACE}句を使用するData Pumpを使用したソリューションがあります。を選択REPLACEするとテーブルが削除されますがTRUNCATE、切り捨てられるだけです。どちらの場合も、参照整合性の制約について心配する必要がありますが、それは選択したソリューションの問題でもあります。

この補遺は、OP のためではなく、将来このページを見つけた他のシーカーのために投稿します。

于 2009-12-14T17:14:58.157 に答える
2

impdp でオプション REMAP_TABLE=EXISITNG_TABLE_NAME:NEW_TABLE_NAME を使用します。これは 11gR2 で機能します。

于 2014-08-13T20:22:07.580 に答える
2

名前が既に使用されているスキーマにテーブルをインポートするとします。インポート中にテーブル名を変更できないと思います。ただし、FROMUSERandTOUSERオプションを使用してスキーマを変更できます。これにより、テーブルを別の (一時的な) スキーマにインポートできます。

完了したら、. を使用してテーブルをターゲット スキーマにコピーしますCREATE TABLE AS SELECT。テーブルのコピーにかかる時間は、インポートに比べてごくわずかなので、あまり時間を無駄にすることはありません。ただし、操作中は 2 倍のディスク容量が必要になります。

アップデート

Garyが提案したように、より賢い方法は、ターゲット スキーマの新しいテーブルを参照するビューまたはシノニムを一時スキーマに作成することです。データはターゲット テーブルに直接送信されるため、インポート後にデータをコピーする必要はありません。

于 2009-12-14T17:07:37.657 に答える
1

同じ名前のテーブルにインポートしてから、テーブルの名前を変更してください。

于 2009-12-14T16:58:36.597 に答える
1

インポート先のテーブルとしてビューを作成し、ビューselect * from ...はエクスポート内のテーブルの名前と一致します。インポート時のエラーを無視します。

于 2009-12-14T17:28:12.357 に答える