12.オンライン・システムとデータベース
オンライン・リアルタイム処理システム
バッチ処理系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などが主に使われてきました。
トランザクション処理システムの役割
通信制御
システムに接続される数多くの端末装置を管理し、セッション接続/切断、データ送信/受信などの通信用のI/O処理を行います。現在利用されている多くの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に移したり、その逆を行うことは容易なことではありません。
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を組み合わせた大規模なシステムも構築されています。
TSO
TSOはトランザクション処理システムではありませんが、ISPFを利用すればユーザーの業務処理用パネルを使った対話型のシステムを構築することもできます。トランザクション制御の機能がないため複数の画面パネルにまたがったりするような複雑なトランザクションはむずかしいですが、データベースの内容を照会したり、非定型な処理には向いています。またCLISTやISPFサービスだけでは機能が足りず、プログラミングする場合でもIMSやCICSに比べればはるかに簡単です。REXX execを使えば本格的な処理もCOBOLやPL/Iを使わなくても実現できます。ただし端末1台(1ユーザー)につき1つのアドレス空間を必要としますから小規模なシステムに適用します。