お問い合わせ

ホーム > COBOLのはなし > 実装工程(2) データの移行

実装工程(2) データの移行

COBOLコンソーシアム利用技術分科会
清水 真 (東京システムハウス株式会社 ビジネスイノベーション事業部)

移行対象として、データの重要度も高いでしょう。COBOL85規格では、ファイル・システムとして順/相対/索引ファイルの定義、ならびにCOBOLプログラムでのアクセス方法が定められています。オープン系COBOLでもそれは変わりません。ただし、ベンダーごとに細かな機能レベルでは差があります。ここでは前半で一般的なデータの移行方法を、後半ではデータ移行によるプログラムの変更を紹介していきます。

1 データの移行方法

1.1 データ移行はいったん順ファイルに変換

データ移行に当たっては、移行前のプラットフォームですべて順ファイルに変換してからデータを移動(コピー)させるまた、文字コードの変換作業は欠かせません。に、ホスト・コンピュータのファイルやDBをオープンシステムへ移行する一般的な手順を示しました。

●データ移行の手順:メインフレーム上のファイル/DBをオープンシステムへ移行する手順を示した。データ転送、文字コード変換、ファイル/DBへのロードなど、ツールを利用しながら作業を進めていく。プラットフォームが変わることで文字コードが変わることには十分注意したい。
〜〜図の解説〜〜
① まず、索引ファイルやDBは、ホスト系COBOL固有のファイル変換ユーティリティ(またはコマンド)を利用して、移行前の環境で順ファイルに変換します。文字コードはまだEBCDICのままでよいでしょう。
② 変換した順ファイルを、ホスト・コンピュータのファイル転送ユーティリティでオープン環境に転送します。ここでも文字コードはEBCDICコードのままでよい。
③ オープンシステムにデータを転送したら、文字コード変換ツールを利用して、EBCDICコードや漢字コードを、UNIXサーバーであればEUCコードに、WindowsサーバーであればSJISコードに変換します。
④ ファイル・システムやDBが備える機能を利用して、コード変換された順ファイルからロードします。

2 データ移行によるプログラムの変更

2.1 データ変換での注意点

文字コードの変換時には次の4つに注意します。

2.1.1 外字の再作成

まずEBCDICコードで外字を使用していた場合、オープン環境で外字を作り直す必要があります。ツールでは変換できません。また、移行前の環境で大量の外字を登録している場合、移行後の外字登録エリアに収まらない場合もあるので可能な限り、不要な外字は削除しておきましょう。

2.1.2 マルチ・レコードの変換

COBOLでは1つのファイルに複数のレコード定義を含める「マルチ・レコード」を利用している場合があります。マルチ・レコードの文字コードを変換する場合は、異なる定義のレコードはいったん別ファイルに分割する必要があります。それぞれのファイルで文字コード変換を行った後、本来の並び順を考慮してマージします。

2.1.3 レコード定義がプログラム上にオン・コーディングされたファイルの変換

ファイル仕様書がない場合は、ソースコードに書かれたファイル・レイアウトを基にレコード定義を解析しなければなりません。各プログラムで個別に必要な項目だけコーディングしている場合は当該ファイルを使用しているプログラムをすべて調査して、完全なファイル・レイアウトを再作成する必要があります。

2.1.4 半角カナや内部10進数を利用しているファイルの変換

半角カナ文字を利用している場合、文字コードによって1文字を表現するバイト数が異なってしまうことがあります。
また、内部10進数を利用している場合、データの格納先により修正が必要になります。一般のリレーショナル型DBでは、カラムの属性に内部10進数はありません。このようなDBに移行するには、ファイル・レイアウトの変更、データ移行時に内部10進数を外部10進数に変更する、などの作業が発生します。

2.2 索引ファイルを移行する

次に、ホスト・コンピュータ上で索引ファイルを利用していて、引き続きオープンシステムでも利用する場合の修正例を紹介していきます。
ファイル・システムならびにファイル・システムへアクセスしているプログラムを移行先COBOLコンパイラの文法に合わせて変換/修正することになります。ただし、特殊なファイル・アクセスをしていた場合、移行先でも同様に実装可能かどうかを調査する必要がでてきます。

2.2.1 ネットワーク型DBを索引ファイルへ移行する

ホスト系COBOLでは、コンパイラの機能を拡張して、リレーショナル型DBやネットワーク型DBをアクセスするための命令をサポートするものがあります。ただしコンパイラ依存のため、移行先のオープン系COBOLでは同じ命令が利用できない場合が多いです。その場合、次の3つの対応方法が考えられます。

(a) 索引ファイルへのI/O命令に置換する

DBのスキーマ構造、キー構造を分析して、索引ファイルに置き換えることは不可能ではありません。工夫は必要だが、多くはそのままCOBOL85規格の定める索引ファイルへ置換できます。

(b) 埋め込みSQL文に変更する

既存のCOBOLプログラムの中に、ベンダーが独自にコンパイラを拡張してRDB命令を実装している場合や、埋め込みSQL文を使用している場合は、移行先で提供される埋め込みSQL文へ変更する方法があります。埋め込みSQL製品の選定に当たっては、リレーショナル型DBの機能評価とともに、SQL文の構文の互換性の検討が必要です。

(c) I/Oモジュールに置き換える

COBOLコンパイラによっては、特殊なシステム・ルーチンをDBにアクセスするインタフェースとして用意している場合があります。各プログラムは、このインタフェース・ルーチンをCALLすることでDBとやり取りをします。
この場合、同じインタフェースを実現するI/Oモジュールを移行先で用意すれば、既存のCOBOLアプリケーションを手直しする必要はありません。物理的なファイル・システムを索引ファイルにするか、リレーショナル型DBで実現するI/Oモジュールの中で実装することで解決できます。
また、データの移行先はリレーショナル型DBでもよいでしょう。ホスト・コンピュータのファイル・システムやDBからオープンシステムのリレーショナル型DBにデータを移行する手順は、前述の順ファイルを用いた移行方法と同じです。ツールによっては、COBOL文法のI/O命令のまま、リレーショナル型DBへアクセスすることができます。