1991年のVSAM論理削除:ON/OFFフラグとモジュール化で会社システムを変えた体験
1991年、私は富士通の汎用機(FACOM Mシリーズ)で稼働する会社システムの開発に携わっていました。
このシステムは、VSAM(Virtual Storage Access Method)のKSDS(キー順編成データセット)でデータを管理。
複数のバッチ処理やオンラインシステム(CICSベース)から参照される基盤でした。
運用数年で課題が浮上。VSAMファイルは頻繁に破損(例:インデックス不整合、制御間隔エラー)し、エンジニアが全国の拠点に出張して手動でリストア・再構築する必要がありました。さらに、物理削除されたレコードがデータ内に残存し、リストア時に意図せず復活。これがデータ不整合を引き起こし、インシデントリスクを高めていました。
課題:物理削除の落とし穴
VSAMの物理削除は、インデックスやポインタを更新するが、データ本体はディスク上に残存する場合があります。
リストア作業(IDCAMSでダンプ取得→VSAM再構築→データインポート)では、削除情報がメタデータ依存のため、削除済みレコードが有効データとして復活。たとえば、削除したはずのマスターデータやトランザクションが処理されてしまい、監査対応(データ履歴保持)にも問題が生じました。この課題は、システムの信頼性と運用効率を大きく損なっていました。
解決策1:論理削除「有効無効フラグ」の導入
私は、物理削除をやめ、論理削除を提案。VSAMレコードに「有効無効フラグ」(キャラクタ型、3バイト)を追加し、ON (有効)またはOFF(無効)で状態を管理しました。レコード構造は以下:
[VSAMレコード構造] KEY-FIELD (10 bytes) | DATA-FIELDS (100 bytes) | VALID-FLAG (3 bytes) ---------------------|-------------------------|-------------------- 001 | データ... | ON 002 | データ... | OFF
なぜON/OFF?
1/0やY/Nでは、リストアダンプ(テキスト/16進数)で削除状態が直感的でない。ONは「システム稼働=有効」、OFFは「停止=削除済み」をスイッチのアナロジーで表現。ダンプを見れば、誰でも状態を即座に理解できます。処理ロジックは、フラグをチェックして有効レコードのみ処理し、削除はフラグをOFFに更新。これで、リストア時の「削除レコード復活」問題を解決。削除済みレコードはOFFとして残り、監査や復元(ONに戻す)も容易に。当時、私の周囲で論理削除を実装している人はおらず、まるで「個人的な発明」のようでした(後で知った1980年代の先行例は、情報が広まっていませんでした)。
解決策2:モジュール化の恩恵
この実装がスムーズだったのは、前の設計者の優秀なアーキテクチャのおかげ。VSAMへのアクセスは、現代のMVCにおけるMODELクラスに相当するモジュールに一元化。すべての参照システム(10以上のバッチ/オンライン処理)がこのモジュールを呼び出し、直接VSAMに触らない設計でした。以下のようなフロー:
[モジュール化フロー] 参照システム → VSAM-ACCESS-MODULE → VSAMファイル
論理削除の導入は、モジュール内のロジック変更(フラグのチェック/更新)に限定。参照システムの改修がほぼ不要で、運用中の大規模システムでのリスクを最小化。このモジュール化は、現代のリポジトリパターンやカプセル化に通じる先進的な設計でした。
解決策3:テンプレートファイルとリモート更新
さらに、VSAMデータの特性に気づきました。データのパターンが限定され、最大構成(例:100レコード)がテンプレート的に決まっている。上司に確認すると、まさにその通り。そこで、すべてのフラグをOFFにした最大構成ファイルを事前に作成・インポートする提案。このテンプレートを初期状態としてVSAMに登録。フラグの更新(ON/OFF)は、CICSオンラインシステムの処理モジュール(現代のストアドプロシジャに相当)で中央拠点からリモート操作。これにより、破損時のリストア作業(テンプレート上書き)とデータ更新が中央で完結。全国出張が不要になり、運用効率が飛躍的に向上しました。ただし、上司の出張の楽しみも無くなってしまいましたが。
オンカロとのつながり
21世紀、テレビでオンカロ(フィンランドの核廃棄物処分場)のドキュメンタリーを見たとき、ON/OFFフラグを思い出しました。オンカロの看板は、10万年後の人類に「危険」を伝えるシンプルな設計を追求。私のON/OFFは、後任者に「有効/無効」を誤解なく伝える工夫でした。テンプレートファイルも、オンカロの「標準化された警告」に通じる運用の標準化を体現。時間や対象は違えど、「直感的な伝達」の思想は同じだと感じました。
現代とのつながり
現代のデータベースでは、is_delete(Boolean)やdelete_at(NULL/日時)が標準。私のON/OFFは、VSAMの制約(SQLなし、キャラクタ型)下での論理削除の先駆けでした。モジュール化はMVCやリポジトリパターンの原型、テンプレートファイルはデータ初期化やマイグレーションの先取り。この経験は、チームの協働と「人間中心の設計」(直感的な命名、保守性)が、システムの信頼性と効率をどう高めるかを教えてくれます。