普通にインポートを試みたところ…
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のバイナリモードで編集することは可能です。
しかし、ダンプファイルは基本巨大なので、重すぎて思うようにいきません。
このコマンドの方法なら一瞬でできます。