Oracle — データを別の名前のテーブルにインポートしますか?
質問
Oracle テーブルからエクスポートされた大きな (数 GB) データ ファイルがあります。このデータを別の Oracle インスタンスにインポートしたいのですが、 ただし、テーブル名を別の名前にしたい 元のテーブルから。これは可能でしょうか?どうやって?
インポート システムとエクスポート システムは両方とも Oracle 11g です。これに違いがある場合、テーブルには BLOB 列が含まれます。
ありがとう!
アップデート:
ここでのアイデアは、テーブルを使用しているシステムのダウンタイムを最小限に抑えながら、テーブルを更新することでした。解決策(に基づく) ヴィンセント・マルグラットさんの答えと APCのアップデート)は次のとおりです。
- テーブル名が
A
- 一時スキーマを作成する
TEMP_SCHEMA
- データをインポートする
TEMP_SCHEMA.A
CREATE REAL_SCHEMA.B AS SELECT * FROM TEMP_SCHEMA.A
名前の変更DROP TABLE REAL_SCHEMA.A
REAL_SCHEMA.A
にREAL_SCHEMA.A_OLD
- 名前の変更
REAL_SCHEMA.B
にREAL_SCHEMA.A
DROP REAL_SCHEMA.A_OLD
この方法では、ダウンタイムはステップ 4 と 5 の間のみになり、両方ともデータ サイズに依存しません。これが機能しない場合は、ここに更新を投稿します:-)
解決
私はあなたが名前がすでに使用されているスキーマにテーブルをインポートするとします。私はあなたがインポート時にテーブル名を変更することができるとは思いません。ただし、FROMUSER
とTOUSER
オプションでスキーマを変更することができます。これは、あなたが別の(一時的な)スキーマにテーブルをインポートできるようになります。
CREATE TABLE AS SELECT
とターゲット・スキーマにテーブルをコピーします。それは、テーブルをコピーするのにかかる時間は、そう、これはあまりにも多くの時間を無駄にしません輸入に比べて無視することができるであろう。あなたは運転中にかかわらず、2倍のディスク容量が必要になります。
更新
ゲイリーは賢い方法は、新しいを参照する一時的なスキーマ内のビューまたはシノニムを作成することですにhref="https://stackoverflow.com/users/25714/gary">
他のヒント
あなたはこれを行うことはできません。あなたがテーブルを所有するスキーマを変更することができますが、唯一のオプションは、(同じ名前のテーブルにインポートすることです。
しかし、あなたは11グラムであると言います。なぜ、インポートとエクスポートを置き換える10gで導入されたデータポンプユーティリティを使用していません。そのユーティリティを11gでは正確に何をしたいんREMAP_TABLEオプションを提供していますので。
編集
私はこれを書いていた間、OPは別の応答に追加されたコメントを読んだ、私はREMAP_TABLEオプションは、その場合には動作しないと思います。それだけで新しいオブジェクトの名前を変更します。元の名前を持つテーブルがターゲットスキーマに存在する場合、インポートは、ORA-39151で失敗します。申し訳ありません。
の編集ビスの
OPが最終的に選んだのソリューション(新しいテーブルと交換し、既存のテーブルを削除)TABLE_EXISTS_ACTION={TRUNCATE | REPLACE}
句を使用することで、データ・ポンプ、と解決策があると考えます。 REPLACE
を選択するだけで、えー、それを切り捨てTRUNCATE
のに対し、表を削除します。どちらの場合では、参照整合性制約を心配する必要があり、それはまた、選択したソリューションの問題です。
私はしませんOPのためではなく、将来的には、このページにいくつかの時間を見つけて、他の求職者の利益のために、この補遺を投稿します。
オプションREMAP_TABLE = EXISITNG_TABLE_NAMEを使用してください。これは、11gR2の中で動作します。
ちょうどそのテーブルの名前を変更し、同じ名前のテーブルにインポートします。
エクスポートでテーブルの名前と一致する観点から、にインポートするselect * from ...
テーブルとビューを作成します。インポート時にエラーを無視します。