テスト用データを Oracle DB にセットアップする必要があったんで、本番DBのバックアップファイルから impdb コマンドでインポートをしようかと。
全部のテーブルではなく、必要なのは3つだけなので、以下のようなコマンドを実行。
impdb HOGE/HOGEPW@HOGEDB directory=backup_dir dumpfile=backup.dmp table_exists_action=replace tables=(ロケーション,IPアドレスリスト,ユーザーマスタ)
そしたら、こんなエラーが出て失敗しちゃう。
ORA-39002: 操作が無効です
ORA-39166: オブジェクトHOGE.IPアドレスリストが見つかりません。
これ、エラーになるタイミングは毎回バラバラで、
ORA-39002: 操作が無効です
ORA-39166: オブジェクトHOGE.IPアドレスリストが見つかりません。
ORA-39166: オブジェクトHOGE.ユーザーマスタが見つかりません。
こういうときもある。
別にテーブル名が問題なわけではなく、
impdb HOGE/HOGEPW@HOGEDB directory=backup_dir dumpfile=backup.dmp table_exists_action=replace tables=(IPアドレスリスト)
こんな感じで、エラーになったテーブル単体でインポートすると、
. . "HOGE"."IPアドレスリスト" 12.3MB 12034行がインポートされました
こんな具合に成功する。カンマ区切りで複数テーブルを指定したときだけ問題。
でも、英語名のテーブルではエラーにならないんで、やっぱ日本語名なのが問題なんだろうなあと思って、
impdb HOGE/HOGEPW@HOGEDB directory=backup_dir dumpfile=backup.dmp table_exists_action=replace tables=("ロケーション","IPアドレスリスト","ユーザーマスタ")
こんな風に、テーブル名をダブルクォーテーションで括ってみた。
. . "HOGE"."ロケーション" 28.5MB 9800行がインポートされました. . "HOGE"."IPアドレスリスト" 12.3MB 12034行がインポートされました. . "HOGE"."ユーザーマスタ" 1.3MB 109行がインポートされました
ああ、やっぱり成功。
俺はそもそもテーブル名や項目名などに日本語を使うのが嫌い(プログラムでも、(日本語対応されているかどうかは関係なく)日本語の変数名を使うのとか大嫌い(読みづらいは!!)なんだけど、まあ、それはおいといて、日本語使えるんなら、英語名と同じ動きをしっかりしてほしいわ!!
Oracle は金に汚いだけの会社じゃのお。