質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.98%

expコマンド でエクスポートしたDMPファイルが破損する原因と、それを調査する方法

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 8,109

cha-ra

score 38

 経緯

この度Oracleを最新版に移行する作業があり、
移行後のデータベースから exp コマンドでエクスポートしたファイルを、
移行後のデータベースへ imp コマンドでインポートしようとすると、
表が作成されない等のエラーが発生し正常にリストアできませんでした。

exp user/pass@HOGE owner=HOGE direct=y file=HOGE.dmp

--ユーザDROP & CREATE 処理--

imp user/pass@HOGE fromuser=HOGE touser=HOGE file=HOGE.dmp ignore=y

そこで、【RP Dump Browser Free for Oracle】というソフトでエクスポートしたDMPファイルを解析したところ、
「failed in parsing」「failed in analyzing dumpfile」等と、ファイルが破損している可能性が高いことがわかりました。

また、direct=yオプションを利用した場合に、
エクスポートしたDMPファイルが破損する場合もあるらしい。。。というのもわかりました。
スレッド: exp結果のファイルが壊れている

そこでdirect=yオプションを外したDMPファイルをインポートすると、
正常にインポート出来てしまいました。

 実現したいこと

ここからが本題なのですが、
なぜDMPファイルが破損してしまうのかを調べる方法はあるのでしょうか?

たまたま破損したというわけではなく、
何度エクスポートを行っても必ず破損したDMPファイルが作成されるため、
データベースの状態に問題があるのだろうと推測するのですが、
どこをどう調査したら良いのか入口すらわからない状態です。

 環境

[新環境]
Oracle Database 12.2.0.1.0 Enterprise Edition

[旧環境]
Oracle Database 12.1.0.2.0 Standard Edition

[旧環境] exp direct=y でエクスポートしたファイルを、
[新環境] impコマンドで正常にインポートが完了した状態。

 試したこと

  • [新環境]で [exp direct=y -> imp]はエラーが発生し、中途半端にリストアされる。(表が抜け落
    ちる)
  • [新環境]で [exp direct=n -> imp]にてリストアは出来た。
  • [新環境]で [expdp -> impdp]にてリストアは出来た。
  • [旧環境]で「exp direct=y -> imp」の処理を行ってもエラーとはならない。
  • [旧環境]のどの時点のDMPファイルを[新環境]へインポートしても、[新環境]から[exp direct=y]でエクスポートされたDMPファイルは破損する。

 追記

  • [新環境]の12EEをアンインストールし12SE(12.2.0.1.0)をインストール、
    [旧環境]データをimp 後に、[exp direct=y -> imp]するとリストアは出来た。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

0

一部だけですが、
exp/impは過去のバージョンとの互換の為に残っています。expdp/impdpが使えるバージョンなら処理時間が短いはずなので、expdp/impdpを使いましょう。
exp/expdpのバージョンで作られたdmpファイルは、それより古いバージョンのimp/impdpでは動作しません。

両バージョンのユーティリティ マニュアルを確認されては?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/04 13:15

    exp/imp は今後無くなると考えてますので、
    ご指摘の通りゆくゆくは expdp/impdp に置き換えることになります。
    出来ることなら exp/imp のままで行きたいのが現状ですが。
    (セキュリティ的な面で仕方ないのでしょうが、運用上DMPファイルを取得するのに移動や手続き等で1時間以上かかったりすることまるので。。。expでローカルに直接バックアップをしたいというのが本音です)

    ただ、それとは別になぜDMPファイルが破損するのか?
    DMPファイルが破損する場合、どこをどう調査したら良いのか?
    ということが気になった次第です。

    キャンセル

  • 2018/04/04 19:24 編集

    dmpが壊れるのはバグかもしれません。Oracle製品のバグは良くあることです。サポート契約して必要なパッチがないか、オラクル社カスタマ・サポート・センターに問合せては?オラクル・サポートからの回答はサポートの了解を得ない限り公開することは禁止されていますのでご注意ください。

    キャンセル

0

以下あたりは参照されていますか?
リリースが異なるエクスポート・ユーティリティおよびインポート・ユーティリティの使用
異なるデータベース・リリース間のエクスポートとインポート

インポート先のバージョンのユーティリティで、インポートもエクスポートも行う必要がありそうです。
内部的にはDUMPファイル中にバージョン情報を保持していて、それでチェックなどの制御を行っている模様。

荒業で対処した人もいるみたい。
バージョンの高いexpで作成したダンプファイルを取り込む方法

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/04 16:36

    同じユーティリティを使用して、direct=yで行ってエラーになるというのはバージョンの違いをユーティリティが吸収できていないと推測されます。
    従来型(direct=yを指定しない)であれば、selectでデータを取得するということなので、ある意味CSVのようなデータとなっていて、エラーが発生しないのでは無いかと推測。

    キャンセル

  • 2018/04/04 17:02 編集

    データ破損していると「思われる」という状況です。
    【新環境】内で exp/imp するとインポートエラーが発生します。

    >同じユーティリティを使用して、direct=yで行ってエラーになるというのはバージョンの違いをユーティリティが吸収できていないと推測されます。
    【新環境】が「Standard Edition 12.2.0.1」の場合は移行後のexp/impでエラーが発生しませんでしたので、
    【Edition】が異なると同一の【Version】でもインポート時の内部状態も異なるということが、今回の原因ということですね。

    その原因を特定するために、内部の状態をどう調査すれば良いか、
    そもそもそんなことが出来るのかというのを知りたいのです。

    キャンセル

  • 2018/04/04 17:15 編集

    少なくとも私にできるのは、起きている事象から原因を推測し、回避策になりそうなことを伝えるのみで、
    原因特定についてアドバイスできるとしたら、早めにサポートに問い合わせした方がいいということ位です。
    何れにせよ回避策を講じる必要があるので、それも合わせて問い合わせですね。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.98%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる