Oracle 12cのダンプファイルをOracle 11g にインポートする

普通にインポートを試みたところ…

IMP-00010: 有効なエクスポート・ファイルではありません。ヘッダーは検証に失敗しました。
IMP-00000: エラーが発生したためインポートを終了します。

案の定、ダメなんですね。
そこでいろいろ調べてみました。

ダメな理由

ダンプファイルの上部に、expを行った環境のバージョンが書かれています。
どうもこのバージョンが、impを行おうとしている環境のバージョンよりも高いと、初期チェックではじかれてしまうようです。

> hexdump -C export.dmp | less
00000000  03 03 69 45 58 50 4f 52  54 3a 56 31 31 2e 30 32  |..iEXPORT:V12.02|

対策

ダンプファイルのV12.02の部分をV11.02に書き換えちゃえばいいのではないかと思い、試してみました。
つまり先頭から13バイト目の”2″を”1″に変えちゃいます。

> echo -n "1" | dd of=export.dmp bs=1 seek=12 conv=notrunc
1+0 records in
1+0 records out
1 byte (1 B) copied, 3.0354e-05 s, 32.9 kB/s

13バイト目、つまり12バイト読み飛ばした後なので、seek=12を指定します。

確認

一応確認してみます。

> hexdump -C export.dmp | less
00000000  03 03 69 45 58 50 4f 52  54 3a 56 31 31 2e 30 32  |..iEXPORT:V11.02|

ちゃんと変わりました。

インポートしてみる

では早速インポート。

インポートは正常に終了しましたが、警告が発生しました。

なんか、うまく行っちゃいました。

ちなみに…

これは、Oracle 12.2→11.2(V12.02→V11.02)の例です。
その他の場合は、汎用的にこうすればいいと思います。(未検証)

> echo -n “XX.YY.ZZ” | dd of=export.dmp bs=1 seek=11 conv=notrunc

xx.YY.ZZ には、11.00.00などバージョンを入れてください。
低めにしておけば大丈夫です。

ファイルを壊してしまうと悲しいので、バックアップを取ってからやってください!

テキストエディタで編集可能か?

viやemacsのバイナリモードで編集することは可能です。
しかし、ダンプファイルは基本巨大なので、重すぎて思うようにいきません。

このコマンドの方法なら一瞬でできます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です