Oracleで、ダンプを別スキーマにテーブル指定でインポートしたい!
ひよこSE(@PiyoOct)は、別スキーマにダンプをインポートしたことはあるのですが、テーブル指定は初めてだったので、ハマりました(´▽`*)。
▼とっとと結論教えろよという人向け
impdp ユーザ/パスワード@識別子 remap_schema=元のスキーマ:別のスキーマ tables=(テーブル名をカンマ区切り)
※細かいところは空気を読んでくださいまし(-_-;)
ちょこっとリファレンスさんの説明を見れば、理解できなきゃダメだけどホントにおバカ。
ダンプを別スキーマにテーブル指定でインポートするコマンド
・・・ひよこSEの前置きはどうでもいいと思うので、結論を書きますね。
impdp ユーザ/パスワード@識別子 remap_schema=元のスキーマ:別のスキーマ tables=(テーブル名をカンマ区切り)
※ローカルで実行する前提で書いたので、細かいところは空気を読んでくださいまし(-_-;)
なんでこんなことがわからなかったかって?
Oracleのダンプのインポートは、「スキーマ指定とテーブル指定は併用できない」のですよ。
つまりは、「shemas:なんちゃら」と「tables(A,B,C)」は併用できません。
※メッセージは忘れましたが、「同時に使えない( `ー´)ノ」みたいに、ふつうに怒られます。
テーブル指定で別スキーマにインポートするときは、てっきり、「remap_schemaは指定できない」と勘違いしちゃったわけです。
んで、tables=(別スキーマ.テーブル1, 別スキーマ.テーブル2,・・・)みたいに指定してエラー。
当たり前だけど、ダンプには、元のスキーマの情報しかないので、「そんなもんねぇよ( `ー´)ノ」って怒られます。
控えめに言ってアホですね。はい(´▽`*)。
別スキーマにテーブル指定でインポートするときの使用例
よくわかんないから、雰囲気を書いてよ!
わかりました。
コマンドの使用例を書きますが、前提条件はこんな感じだと思ってください。
- ユーザー:user
- パスワード:password
- 識別子:AA
- 元の(エクスポートした)スキーマー:schema1
- 別の(インポートしたい)スキーマー:schema2
- インポートするテーブル:table1,table2,table3
impdp user/password@AA remap_schema=schema1:schema2 tables=(table1,table2,table3) directory=DATA_PUMP_DIR table_exists_action=replece
※directoryとtable_exists_actionは、ほとんどの人が記述すると思うので勝手につけました。
これで、乗り越えられると思います。
ダンプをスキーマごとインポートするコマンド【おまけ】
ついでですが、ダンプを別スキーマにスキーマごとインポートするコマンドも書いときます。
impdp user/password schemas=権限あればどこでもいい directory=DATA_PUMP_DIR table_exists_action=replece
個人的には、一番よく使う組み合わせのコマンドですね。
schemasは、指定しなくても空気読んでくれる(正確に言えば、元のスキーマになる)けど、書いた方が安心できるし。
というわけで、「schemas」と「remap_schema」のちがいが理解できていなかった、動物のお話でした。
コメント