「10年動いているOracle 11g(あるいはもっと古い版)をAWSに」——これはただのデータ移行ではなく、バージョンアップと文字コード変換が同時に絡む複合作業です。順番を間違えると、テスト移行で初めて文字化けや桁あふれが発覚し、計画が総崩れになります。古いOracle特有の手番を、罠とセットで示します。

01古いOracleは「直接は上がれない」

まず知っておくべき前提です。Oracleには直接アップグレードできる最小バージョンの条件があり、非常に古い版(例:9i・10g)から最新版へは一足飛びにできません。途中のバージョンを経由する「踏み石アップグレード」が必要になります。

現場のコツ:直接アップグレード可能な版の組み合わせは、目標バージョンごとにOracleが公式のアップグレード・マトリクスで定義しています。数値は版・パッチレベルで変わるため、必ず現行版と目標版で公式表を確認してください。「たぶん上がるだろう」で計画を引くと、踏み石が1段増えるだけで工程が数週間ずれます。

022つの道 — In-placeアップグレードか、Data Pumpか

古いOracleをAWSへ運ぶ道は大きく2つです。

Data Pumpにはバージョン互換の考え方があり、エクスポート時にVERSIONパラメータで出力の互換レベルを指定できます。ただし版が離れすぎると直接は渡せず、中間バージョンを経由する必要があるため、ここでも現行版と目標版の組み合わせ確認が先です。

03さらに古い版はexp/imp — Data Pump以前の世界

Data Pump(expdp/impdp)はOracleのある世代以降の機能です。それより前の非常に古いOracleでは、旧来のexp/imp(クラシックエクスポート)を使うことになります。ここで注意なのが、exp/impとData Pumpは別物で互換がないこと、そして「古い版でexpしたダンプを、新しい版のimpで取り込めるか」には版の組み合わせ制約があることです。

実務では、非常に古い版はまず「exp/impやアップグレードで扱える中間バージョンまで持ち上げ、そこからData Pumpで目標版へ」という多段の手番になります。この段数を最初に確定させることが、古いOracle移行の計画づくりの肝です。

04最大の罠 — 文字コード(JA16SJIS → AL32UTF8)

日本の古いOracleは、データベースキャラクタセットがJA16SJISJA16SJISTILDEであることが少なくありません。移行を機にAL32UTF8(Unicode)へ変換するのが今日の標準ですが、この変換には日本語特有の地雷があります。

現場のコツ:文字コード変換は「やってみて確認」では遅すぎます。移行前にサンプルデータで往復変換を試し、波ダッシュ・外字・記号を含むレコードを目視確認する工程を必ず入れてください。金額や氏名の1文字の化けが、本番後に「データ破損」として大問題になります。

05桁あふれの罠 — ORA-12899

文字コード変換とセットで必ず来るのが、これです。多くの古いOracleは列長をバイトで数えています(VARCHAR2(10)=10バイト)。日本語1文字はShift-JISで2バイト、UTF-8では3バイトになるため、AL32UTF8へ変換するとデータのバイト長が膨らみ、「value too large for column(ORA-12899)」でインポートが弾かれる行が出ます。

この桁あふれの洗い出しを飛ばすと、テスト移行のインポートが大量のエラーで止まり、そこから列定義修正→再テストの往復で日程が崩れます。文字コード変換を決めた瞬間に、桁あふれ調査は必須タスクだと考えてください。

06古いOracle移行の手番まとめ

ここまでを、実行順に並べます。この順番自体が古いOracle移行の設計です。

まとめ

古いOracleの移行は、バージョンアップ・文字コード変換・桁あふれという3つの罠が同時に来る複合作業です。だからこそ手番が全てで、アセスメントで版・文字コード・桁あふれを先に確定させ、経路(踏み石の段数とData Pump/exp)を公式マトリクスで決め、事前修正を済ませてからテスト移行に入る。この順番を守れば、古いOracleでも移行は計画どおり終わります。逆に、いきなりテスト移行から始めると、文字化けと桁あふれで必ず出戻ります。全体の位置づけは移行の全体フローのPhaseやDB方式決定の中で捉えてください。

古いOracle(版が離れている・JA16SJIS・桁あふれ懸念)の移行は、経路の確定と事前調査で成否が決まります。EMWのアセスメントで、踏み石の段数・文字コード変換の影響範囲・桁あふれ候補の洗い出しまで一式お引き受けします。

相談する
← ブログ一覧へ戻る