13.オンライン・システムとデータベース

オンライン・リアルタイム処理システム

バッチ処理系OSとして発展してきたMVSですが、汎用OSでもあるため古くからオンライン・リアルタイム処理システムの構築にも用いられてきました。オンライン・リアルタイム処理システムは、元々中央にあるホスト・コンピューターと数多くの端末装置を通信回線で結び、端末機で入力された要求をホスト側で即座に処理し、その結果も即座に端末機に返す形態のシステムのことです。

1970年代ぐらいまでは、大企業などの業務システムでも、社員であるプログラマーが自らオンラインの制御プログラムと業務処理のアプリケーション・プログラムを開発して運用することも珍しいことではありませんでした。しかしながら、制御の部分は信頼性と応答速度に直結するため、データの量と処理の複雑さが増えるに従い困難なものになってきました。そこで、個々のユーザー業務内容には依存しないが、オンライン・リアルタイム処理システムとして共通に必要とされる制御と管理の部分を提供する「トランザクション処理システム」と呼ばれるソフトウェアが利用されるようになりました。

トランザクション処理システムは、オンライン・リアルタイム処理システムを構築するために必要となる、通信制御、トランザクション管理、データベース管理などを行うシステム・ソフトウェアです。通信とトランザクション管理はDCMS(Data Communication Management System)、データベース管理はDBMS(Data Base Management System)と称され、DC/DBシステムとも略されました。データベース管理機能を持たず、DCMSとして単独であるいは他のDBMSを利用するものは、OLTP(On-Line Transaction Processing)システム、TPモニター(Transaction Processing Monitor)とも呼ばれます。これらは、今日よく使われるミドルウェアと呼ばれるカテゴリーに分類されるソフトウェアでもあります。

DCMSやDBMSにはISV製品もありますが、多くのユーザーはOSメーカーが提供する製品を利用します。IBMからはIMS、CICSとDB2、富士通からはAIM、日立からはADM、DCCM、XDMなどが提供されています。

また、IBMのメインフレームに限って言えば、一部の大規模なトランザクション・システムではTPFと呼ばれるOLTP専用のOSが利用されることもありますが、日本では圧倒的大多数のユーザーが、汎用OSではあるMVSまたはVSEでオンライン・システムを構築します。大企業などの基幹業務でも、すべてがオンライン処理で行われるわけではありません、バッチによる業務処理システムも並行して運用されます。システムが構築しやすく、プログラミングも容易な、汎用OSであるMVSなどが主に使われてきました。

トランザクション処理システムの役割

    通信制御

    システムに接続される数多くの端末装置を管理し、セッション接続/切断、データ送信/受信などの通信用の入出処理を行います。現在利用されている多くのDCMSは、VTAM(VOS3ではXNFを含む)を使用して行われます。TCP/IP接続されたクライアントをサポートするものもあります。

    トランザクション管理

    オンライン・リアルタイム処理システムでは、「トランザクション」と言う概念は重要です。トランザクションは、1つもしくは関連する複数の処理を1つの単位としてまとめたものです。

    TSOでは、コマンドを入力するとコマンド処理の結果が返ります。このコマンドの入力が、1つのトランザクションとなります。もっとも単純な例です。業務システムでは1件の取引を、トランザクションに対応させることが多いです。

    銀行口座からの預金引き出しの場合、単独の出金処理であれば残高の更新が成功した時点でトランザクション処理は完了です。しかし、振込の処理などではもう少し複雑です。振込の処理では、依頼人の口座から出金処理を行い、成功すれば宛先人の口座へ入金します。2つの処理で、トランザクションが構成されます。

    出金処理の直後にシステムに障害が発生し入金処理ができない状況に陥ったら、回復後に依頼人口座の出金を取り消さなければなりません。複数の処理で構成されるトランザクションでは、その中のどれか1つでも失敗したらすべてをチャラにしなければなりません。ATMなどで預金を引き出し中に機械が止まってしまったような場合、別のATMで引き出しをやり直そうと思ったら現金をもらっていないのにすでに残高が減っていた、なんてことになったら大騒ぎです。

    トランザクションの基本は、すべての処理が成功なら成功(完結あるいは完了)、ひとつでも失敗したら全部を無しにする、です。これを保証しなければなりません。失敗した時にチャラにする仕組みを、トランザクション・リカバリーなどと言います。複数の処理で構成されるトランザクションや、複数のプロセスやノードにまたがって処理されるトランザクションでは、リカバリー制御は複雑でかつ正確な制御処理を求められます。

    トランザクション管理には、まだ重要な機能があります。大量にかつ同時にトランザクション要求が入ってきても、一定の応答時間を保つように、それぞれのトランザクション要求が処理されるようにスケジュールしなければなりませんし、特別な理由がない限りは到着順に公平に処理する必要もあります。これがトランザクション・キューイングとかディスパッチングと呼ばれる制御です。また、処理が終わったトランザクションは、その結果が端末装置へ遅滞なく通知されるようにしなければなりません。その他、個々のトランザクションに関するログを記録することも、トランザクション管理の重要な機能の1つです。

    データベース管理

    初期のオンラインシステムでは、トランザクションの対象となる処理データはBDAMデータセットやVSAMデータセットに格納され、業務処理用のマスター・ファイルを構成したりしていました。現在でもVSAMはよく使われていますが、これらにとって替わったのがデータベースです。トランザクション・データ量が増えてくると、単純なレコードの集合では処理がむずかしくなったり、応答時間に影響が出てきます。このような問題を解決するために、データを種類やカテゴリーに沿って集めて、検索、抽出、更新、追加、削除などの再利用を容易にできるようにしたものがデータベース管理システムです。

    トランザクション処理で使用されるデータベースには、トランザクション・リカバリーに連動した機能が実装されます。一般的にデータベースでは、レコードはダイレクトに更新されるわけでなく、一旦中間状態で記録しておき、関連するレコードはトランザクション完了時に更新を確定させます。これがコミットです。反対にトランザクションの処理に失敗したら更新前の状態に戻します。これがロールバック(バックアウト)です。また、更新されたレコードのログ情報(ジャーナル)を記録して、バックアップセットから最新の状態を復元できるようにするしたり、データベース全体や個々のレコードの整合性を保つための排他制御、レコードへアクセスするための言語サポートなどさまざな機能も実装されます。

    オープン系システムでは、リレーショナル型データベースがよく使われていますが、メインフレームでは階層型データベースやネットワーク型データベースも使われています。

    階層型は、データを親子関係のツリー構造で管理し、子データへのアクセスには1つのルートしか持ちません。このため、同じ内容のデータが複数存在してしまう「データの冗長(重複)」という構造的な問題が発生しやすくなります。ネットワーク型は、横方向や斜め方向の階層を持てるようにしたもので、データは網の目のように繋げられ、子データへのアクセスルートは複数持てるようになりました。冗長データが排除しやすい構造になっています。

    階層型やネットワーク型では、プログラムはデータ構造に依存されるため、メンテナンスの負荷が高いと言う特性もあったりしますが、より少ないリソースで実現できる、レスポンスの見積もりがし易い、と言った面もあります。

    今日ではメインフレームでもリレーショナル型データベースが使われていますが、初期のDBMSでは、リレーショナル・データベースを実用にするには当時のハードウェア性能が追いつかない、と言うこともあって階層型やネットワーク型データベースが利用されました。メインフレームのデータベースには企業の生命線とも言える非常に重要な基幹データが格納されていますから、古くからトランザクション処理システムを運用してきた企業では、今でもそのまま階層型やネットワーク型のデータベースを運用しているところが少なくありません。

    システムの安定性・信頼性

    ハードウェアやOSを組み合わせたコンピューターシステムの総合評価基準として、RASISと呼ばれる安定性や信頼性の指標が用いられます。トランザクション処理システムもOSとして独立はしていないものの、位置づけ的にはOSに近いものがありますので、DCMS/DBMS製品もハードウェアやOS同様の安定性・信頼性が求められます。その上で処理性能が追求されます。ユーザー・アプリケーションの異常終了やバグによる誤動作などに引きずられることなく、安定した動作を連続して行う必要があります。大規模なコンピューター・システムなどでは、ハードウェア等の障害時などにも可用性を維持するため、システムを多重化して万一の際に即座に待機系システムに切替えられるホットスタンバイ構成を持ちますが、DCMS/DBMS製品の中にもホットスタンバイのような高度な障害回復機能に対応されているものもあります。

    一方で大規模なトランザクション処理システムは、システムの管理も複雑になりがちです。端末定義やプログラム管理、運用管理などなど、システムの管理にはOS以上の規模を持つほどのものもあります。品質と性能を引き出すには十分な知識と経験が求められます。

各々のトランザクション処理ソフトウェアによって、管理や制御の方式、提供される機能、プログラミング・インターフェースなどはさまざまです。しかし、いずれのトランザクション処理システムも、ユーザーがオンライン・リアルタイム処理システムを構築する際、ユーザーが自分のビジネスロジックに徹することができるように、ビジネスロジックに直接関係ないシステム全体の制御や管理をアプリケーションから切り離している点では共通しています。

代表的なトランザクション処理ソフトウェア

    IMS(Information Management System)

    IMSは、IBM社が提供するトランザクションとデータベース管理システムです。DCMSであるIMS/TM(Transaction Manager)、DBMSであるIMS/DB(Database Manager)から構成されています。トランザクションは、メッセージ・キューイングでコントロールされ、アプリケーション・プログラムと端末は切り離されて処理が行われます。大量のトランザクションを処理するデータ処理システムに向いているとされ、特に高い信頼性、可用性、処理速度、容量が求められるシステムで採用されることが多いです。IMSのDCMSとDBMSは、必ずしも組み合わせて使わなければならないわけでなく、IMS/TMとDB2を組み合わせたり、CICSとIMS/DBを組み合わせる運用もなされています。

    IMSではトランザクション処理を行うそれぞれのコンポーネントを、複数のアドレス空間に配置しています。それぞれのコンポーネントは、独立したプロセス(アドレス空間)としてMVSに管理され、それぞれの機能は並行して動作します。

    オンライン業務用アプリケーション・プログラムは、MPPと呼ばれるアドレス空間で実行され、端末との入出力はメッセージ・キューを介してIMSによって行われます。独立したアドレス空間で構成されるため、アプリケーションの異常動作によるIMSへの影響がありません。

    IMSのデータベースは階層型になっており、DL/Iと呼ばれる専用の言語APIでアクセスされます。データは階層によって定義されますが、データ構造やアクセス方法の柔軟性を高めるためのさまざま機能が追加されています。データベース・ファイルの実体には、VSAMデータセットが利用されます。

    IMSと似た構成を取っているのは、富士通のAIMです。同じようにメッセージ・キューイングで制御される点、アプリケーション空間が独立している点、独自のデータベースを採用している点などです。しかし、データベースとプログラミングに互換はありませんから、IMSアプリケーションやデータベースをAIMに移したり、その逆を行うことは容易なことではありません。

    IMSによるトランザクション処理

    CICS(Customer Information Control System)

    CICSもIBM社が提供するトランザクション処理システムです。IMSと異なり、DCMSに相当する部分でのみ構成されるTPモニターです。CICSの制御を受けるものの、端末とアプリケーション・プログラムは、直接端末と接続されているイメージになります。TSOのように対話型によるトランザクション処理に適しています。

    DBMSを持たないため、データベースを必要としないインタラクティブ・システムの開発などに利用されています。データベースを必要とする場合はDB2、IMS/DBなどを利用するかISV製のDBMSを利用します。VSAMデータセットであれば、CICSのプログラミング・インタフェースでアクセスすることができます。現在は、製品名がCICS/TS(Transaction Server)となりました。

    CICSでは、端末通信やトランザクションの制御も、ユーザー・アプリケーションの処理も、単一のアドレス空間で行われ、空間内のプロセッシング・タスクを複数生成することで、トランザクション処理の並行動作を実現しています。同じアドレス空間の中で制御が行われるため、空間をまたがる制御を行うIMSに比べコンポーネント間の通信オーバーヘッドがありません。ただし、アプリケーションとCICSは同じ空間に同居するので、アプリケーションの異常動作によっては、CICS自身のプログラムや制御エリアが破壊されるなどがあり得ます(ストレージキーによってガードを掛けるような機能はある)。なお、CICSはTPモニターなので、外部データベース利用時のデータ更新の排他制御、ロギング、ロールバックなどの機能は、利用するデータベース・システムに委ねます(VSAMファイルに関してはCICSが行う)。

    CICSでは、インタラクティブ型のトランザクション処理を行うので、IMSと違いメッセージではなくスクリーン・データが基本となります。画面を構成するデータは、マップと呼ばれ、プログラムとは別に作成されます。プログラムは、マップを使って端末に画面データを送り、その画面で入力されたデータを読み取ります。入力データは、CICSによってプログラムが読み取りできる形に変換され渡されます。マップによらず3270データ・ストリームを直接扱うこともできます。

    CICSは、単一のアドレス空間で運用できるOLTPですが、システム規模や構成に合わせて複数のCICS空間を運用することもできます。これは、CICS/MRO(Multi Region Operation)と言う機能によって行われ、同一MVS内の複数CICS、複数のMVSシステムに渡るCICSを連携されることができます。また、端末の入出力を担当するCICS(TOR:Terminal Owning Region)とユーザー・アプリケーションの処理を行うCICS(AOR:Application Owning Region)を分けて連携させることもできます。CICS/MROとDB2を組み合わせた大規模なシステムも構築されています。

    CICSによるトランザクション処理

    TSO

    TSOは、トランザクション処理システムではありませんが、ISPFを利用すれば、ユーザーの業務処理用パネルを使った対話型のシステムを構築することもできます。トランザクション制御の機能がないため、複数の画面パネルにまたがったりするような複雑なトランザクションはむずかしいですが、データベースの内容を照会したり、非定型な処理には向いています。また、CLISTやISPFサービスだけでは機能が足りず、プログラミングする場合でもIMSやCICSに比べればはるかに簡単です。REXX execを使えば、本格的な処理であってもCOBOLやPL/Iを使わずに実現できます。ただし、端末1台(1ユーザー)につき1つのアドレス空間を必要としますから、小規模なシステムに適用します。