データの作成元とは異なる単一の新しいテーブルスペースまたは異なるテーブルスペースを使用して、スキーマをOracle 11gR2にインポートする便利な方法はありますか?
例として、OLDDBからBLOG_DATAをエクスポートしました。すべてのユーザーデータはUSERSテーブルスペースに保存されています。
NEWDBで、BLOG_DATAスキーマをインポートしますが、このユーザー専用に作成されたBLOG_DATAテーブルスペースにユーザーオブジェクトを保存します。
BLOG_DATAユーザーを作成し、BLOG_DATAテーブルスペースを作成し、そのユーザーのデフォルトのテーブルスペースとして設定し、適切な無制限のクォータを追加しました。
CREATE TABLESPACE blog_data DATAFILE SIZE 1G;
CREATE USER blog_data IDENTIFIED BY secretpassword DEFAULT TABLESPACE blog_data QUOTA UNLIMITED ON blog_data;
GRANT connect,resource TO blog_data
スキーマは次のようなものでOLDDBからエクスポートされました
exp blog_data/secretpassword@OLDDB file=blog_data.dmp
以下のフィルの優れた答えを読んだ後、私は不思議に思いました:
データにはデフォルトの表領域(ユーザーがクォータを持っている唯一の表領域)以外に移動する場所がないため、これによりimpはすべてのユーザーオブジェクトをそのデフォルトの表領域に配置するように強制されますか?
imp blog_data/secretpassword@NEWDB file=blog_data.dmp
これにより、newdbのblog_dataテーブルスペースにblog_dataスキーマ全体が配置されますか?これが機能しない理由や、特定のオブジェクトなどで問題が発生する理由はありますか?
更新:
簡単なテストを行ったところ、これが事実であることがわかりました。Imp
オブジェクトを元のテーブルスペースに配置できない場合(テーブルスペースが存在しないなど)、そのユーザーのデフォルトのテーブルスペースにオブジェクトを配置します。詳細な説明:http : //www.dolicapax.org/?p=57
それでも、Philが示唆しているようにData Pumpを使用することは、好ましい選択肢であると思われます。
exp
ユーティリティを使用してエクスポートされましたか、それともexpdp
(データポンプ)でエクスポートされましたか?