現在、移行中のシステムに、補足レコード付のISAMファイルが複数存在します。
現在、Win環境への移行を開始していますが、補足レコードの取扱について教えてください。
1.データ移行の際、ファイルメンテナンスキットの「日本語ファイル変換」で
補足レコードを移行可能でしょうか?
可能な場合、その手順を教えて下さい。
2.補足レコード付のISAMファイルを、Win環境では、OracleのDBに変換する予定
です。
データベース化した場合、補足レコードの管理はどのように行えばよいので
しょうか?
また、データベースの表定義などは、通常のindexファイルと比べ、どう異なる
のでしょうか?
3.データ移行が可能で、Win環境でも補足レコード付索引ファイルが使用可能な
場合、COBOLプログラムの修正はありますか?
まず、移行手順ですが、以下の手順で移行可能です。
a)Sモデル上で、順編成ファイルに変換する。
(例えば、なんらかのアプリケーションにより全件READ→WRITEで順編成に
出力する。)
b)データベースの表は、主キーに相当するレコードに、重複を許可する索引
を作成する(create index)。
c)ファイルメンテナンスキットで、a)のファイルを移行する。この際、デー
タベース側のレコード定義は不要であるが、入力ファイル側はレコードを
定義する。
「補足レコードの管理」という点についてですが、データベースには「補足レコード」そのものは存在しないので、特に必要な管理はありません。
COBOLプログラムに対しては、Sモデル上で「補足レコード」を意識した処理が必要ではないのと同様に、WindowsNT版COBOL+DBリンクキットについても意識する必要はありません。
したがって、この点についてのアプリケーションを変更する必要はありません。
以上がご質問に対する内容ですが、そのまま移行したのでは、恐らく性能問題になる恐れが十分にあります。
主なポイントは以下の通りですので、アプリケーションの処理目的を確認された上で、予めチューニングのご検討をお願いします。
・二重キーを許可するキー(WITH DUPLICATES)に対しては、いずれかの一意な
項目と組み合わせ、一意インデックスを作成しないと、性能が劣化します。
といいますのが、READ NEXT/PRIORとスクロールする場合に、カレントレコード
を一意的に識別するものが必要でありますが、一意インデックスが作成されて
いないとrowidが使用されます。つまり、rowidをキーにした検索が行われる
ので、TABLE FULL SCANが実行され、パフォーマンスに悪影響を及ぼします。
なお、一意インデックスを作成できない場合には、「SHAREDモード順アクセス
方式」オプションの変更や、SELECT命令の利用を検討する必要があります。
・アプリケーションで、「順リードの'02'ステータス(注)」を期待していないので
あれば、「順リードの'02'ステータス検出」オプションを「行わない」に変更
してください。この検出自身、余計なSQL文を発行していますので、性能が
劣化します。
「順リードの'02'ステータス」を期待している場合は、実際に性能評価を
行わないと判断できないでしょうが、性能に影響がでる様であれば、'02'
ステータスを監視しない方法へアプリケーションを変更する必要があります。
(注)二重キーを許可するキー(WITH DUPLICATES)についてREAD(NEXT/PRIOR)する
場合に、次のレコードが同一キーを持つとREADが 02 というステータスが
返却される、というCOBOL言語仕様を言っています。