Oracleにダンプを入れてもらおうと頼んだら思いのほか大変だったはなし。
後輩に、コマンドを調べながら新規ユーザー(スキーマ)を作成してそこにダンプを入れてみて、と依頼したらいろいろ引っかかったのでその時のメモ。
環境:Windows10、Oracle11g
接続識別子が認識できないといわれる。
環境変数「ORACLE_SID」が設定されていなかった。
というか「ORACLE_HOME」もなかったので設定することに。
ORACLE_HOMEの設定パスが分からない
ORACLEの本体がどこにあるか、について自分の記憶ベースで
「c:\app\ユーザー\product\オラクルのバージョン\dbhome_1」
にないですか?、と確認してもらったらなぜか無い。
どうやら場所が違って「c:\oracleexe」というフォルダに入っていた。
まあ、とりあえず現状優先で設定。
コマンド「impdp」を実行したが「ORA-39002: 操作が無効です」と言われる。
とりあえず、新規ユーザーは作成しているらしいが、
インポートしようとしているユーザと別のユーザでインポートしてたので、ユーザがちゃうんでない?と指摘。
(つまり権限がなかったもよう)
正しいユーザーでログインしようとしたら新規ユーザでログインができないことが発覚。
パスワードが間違っていたらしい。Create文を確認(コピペそのままで気が付かなかったらしい)。
CREATE USER [ユーザー名] IDENTIFIED BY [パスワード];
パスワードを確認して再度ログインができることを確認
まだ同じエラーが出る
ダンプがどうも認識できていないようだったので、指定したパスにちゃんとファイルがあるかどうか確認。
新規にディレクトリを作成したのでパスとファイルの確認したら合ってる…。
試しにデフォルトのパス「DATA_PUMP_DIR」でやってみたら、エラーが変わった。
create or replace directory [ディレクトリオブジェクト] AS [ディレクトリオブジェクトのパス];
expコマンドでエクスポートしたダンプはimpdpじゃなくてimpでインポートする
(内部の引継ぎミスで)エクスポートコマンドがexpdpじゃなくてexpだったらしく、impdpからimpへ書き換え。
バージョンが違うんでないの?というエラーがでた
思い込みなのかなんなのか、開発環境は11gだって聞いていたのにダンプは12cからエクスポートしてきたらしい。
ダンプはバージョンの小さい方へは入れられないので、Oracle12cを入れなおすか、ダンプ情報を書き換えるしかない。
実は勉強用に用意しているのでダンプの情報を書き換えよう、ということになり、フリーのバイナリエディタをダウンロードしてバージョンを12→11へ書き換えてどうにかインポート成功。
結果
環境変数と権限の確認は大事。
Oracleのバージョンが違うとかちょっと酷い目にあった…そんな基本的なところでミスするとは思わなかった。