COBOLコンソーシアム利用技術分科会
清水 真 (東京システムハウス株式会社 ビジネスイノベーション事業部)
移行対象として、データの重要度も高いでしょう。COBOL85規格では、ファイル・システムとして順/相対/索引ファイルの定義、ならびにCOBOLプログラムでのアクセス方法が定められています。オープン系COBOLでもそれは変わりません。ただし、ベンダーごとに細かな機能レベルでは差があります。ここでは前半で一般的なデータの移行方法を、後半ではデータ移行によるプログラムの変更を紹介していきます。
データ移行に当たっては、移行前のプラットフォームですべて順ファイルに変換してからデータを移動(コピー)させるまた、文字コードの変換作業は欠かせません。図に、ホスト・コンピュータのファイルやDBをオープンシステムへ移行する一般的な手順を示しました。
文字コードの変換時には次の4つに注意します。
まずEBCDICコードで外字を使用していた場合、オープン環境で外字を作り直す必要があります。ツールでは変換できません。また、移行前の環境で大量の外字を登録している場合、移行後の外字登録エリアに収まらない場合もあるので可能な限り、不要な外字は削除しておきましょう。
COBOLでは1つのファイルに複数のレコード定義を含める「マルチ・レコード」を利用している場合があります。マルチ・レコードの文字コードを変換する場合は、異なる定義のレコードはいったん別ファイルに分割する必要があります。それぞれのファイルで文字コード変換を行った後、本来の並び順を考慮してマージします。
ファイル仕様書がない場合は、ソースコードに書かれたファイル・レイアウトを基にレコード定義を解析しなければなりません。各プログラムで個別に必要な項目だけコーディングしている場合は当該ファイルを使用しているプログラムをすべて調査して、完全なファイル・レイアウトを再作成する必要があります。
半角カナ文字を利用している場合、文字コードによって1文字を表現するバイト数が異なってしまうことがあります。
また、内部10進数を利用している場合、データの格納先により修正が必要になります。一般のリレーショナル型DBでは、カラムの属性に内部10進数はありません。このようなDBに移行するには、ファイル・レイアウトの変更、データ移行時に内部10進数を外部10進数に変更する、などの作業が発生します。
次に、ホスト・コンピュータ上で索引ファイルを利用していて、引き続きオープンシステムでも利用する場合の修正例を紹介していきます。 ファイル・システムならびにファイル・システムへアクセスしているプログラムを移行先COBOLコンパイラの文法に合わせて変換/修正することになります。ただし、特殊なファイル・アクセスをしていた場合、移行先でも同様に実装可能かどうかを調査する必要がでてきます。
ホスト系COBOLでは、コンパイラの機能を拡張して、リレーショナル型DBやネットワーク型DBをアクセスするための命令をサポートするものがあります。ただしコンパイラ依存のため、移行先のオープン系COBOLでは同じ命令が利用できない場合が多いです。その場合、次の3つの対応方法が考えられます。
DBのスキーマ構造、キー構造を分析して、索引ファイルに置き換えることは不可能ではありません。工夫は必要だが、多くはそのままCOBOL85規格の定める索引ファイルへ置換できます。
既存のCOBOLプログラムの中に、ベンダーが独自にコンパイラを拡張してRDB命令を実装している場合や、埋め込みSQL文を使用している場合は、移行先で提供される埋め込みSQL文へ変更する方法があります。埋め込みSQL製品の選定に当たっては、リレーショナル型DBの機能評価とともに、SQL文の構文の互換性の検討が必要です。
COBOLコンパイラによっては、特殊なシステム・ルーチンをDBにアクセスするインタフェースとして用意している場合があります。各プログラムは、このインタフェース・ルーチンをCALLすることでDBとやり取りをします。
この場合、同じインタフェースを実現するI/Oモジュールを移行先で用意すれば、既存のCOBOLアプリケーションを手直しする必要はありません。物理的なファイル・システムを索引ファイルにするか、リレーショナル型DBで実現するI/Oモジュールの中で実装することで解決できます。
また、データの移行先はリレーショナル型DBでもよいでしょう。ホスト・コンピュータのファイル・システムやDBからオープンシステムのリレーショナル型DBにデータを移行する手順は、前述の順ファイルを用いた移行方法と同じです。ツールによっては、COBOL文法のI/O命令のまま、リレーショナル型DBへアクセスすることができます。