IMS

IMS （Information Management System、アイエムエス）は、IBMが1968年に発表したメインフレーム用のトランザクション・マネージャーおよび階層データベース・マネージャー。IMSはz/OS上で稼働するミドルウェアで、IMSトランザクション・マネージャー (IMS TM)とIMSデータベース・マネージャー (IMS DB)の2つのコンポーネントが含まれる。

**概要**
IMSは、商用では初めての本格的なデータ管理システム（情報管理システム）であり、特に高い信頼性・可用性・処理速度・容量が求められるデータ処理に使用される。
IMSは以下の2機能から構成される。
*IMS Transaction Server
トランザクション処理システム。IMS Transaction Manager (IMS TM)により実現される。旧称はIMS Data Communication(IMS DC)。
*IMS Database Server
階層型データモデルのデータベース管理システム。IMS Database Manager (IMS DB)により実現される。
上記2機能は、1機能のみの使用もできるため、2機能をまとめてIMS TM/DB（旧称IMS DB/DC）とも呼ぶ。IMS DBを別のトランザクション処理システム（CICSなど）と組み合わせることもできる。関係データベース管理システム(RDBMS) であるDB2も、IMSに搭載されるDBMSとして開発されてきたと言われる。
IMSは、IBMメインフレームの専用オペレーティングシステムである、MVS、OS/390、z/OS上でのみ稼動する。同じIBMメインフレーム専用OSでも、VMやVSEでは稼動しない。（MVS系の基本機能である、複数アドレス空間を使用しているため。）

**特徴**
以下の理由から、非常に大規模な情報システムに使われる。
*データベースが階層型データモデルであり、応答時間(レスポンスタイム)をかなり正確に見積もれる
*特に参照頻度の高いDB（テーブル）はメモリ上に展開できる
*高機能クラスタであるXRF（専用のネットワーク機器と連携し、引継ぎ時の瞬断がほとんど無い）
*（IMSに限らないが）修正プログラム (FIX) 等も単体で取寄せ・適用できる
ただし以下のように専用の知識（スキル）が必要である。
*プログラム開発にはデータ照会言語DL/Iを使用する
*運用管理にはメインフレームの知識、費用が必要
大規模なシステムでは、IMS/ESAに金融機関向けパッケージ「SAIL/ESA」(System Development Aid for IMS/ESA On-Line Applications)  を組み合わせ、SAIL/ESA の提供するAPI(マクロ)でアプリケーションを構築する場合が多い。

**実績**
日本の金融機関での実績は→ 勘定系システム#主な銀行の勘定系システム を参照。

**歴史**
IBMは1966年、ロックウェル・インターナショナル、キャタピラー社とともに、アポロ計画のために IMS の設計を始めた。IMSは、サターンVロケット（サターンロケット）やアポロ宇宙船の膨大なパーツを整理しその目録を作るために開発された。
最初の「IMS READY」というメッセージは、1968年8月14日、カリフォルニア州 Downey のIBM 2740端末に現れた。以来IMSは40年以上に渡って、System/360 で動く重要なミドルウェアの1つとして生まれてから、2000年代初頭の z/OS や System z9 で動く2005年現在に至るまで、稼動し続けている。IMS は2024年現在、Java、JDBC、XML、Webサービスをサポートする。
ヴァーン・ワッツ (Vern Watts) はIMSのチーフ・アーキテクトである。ワッツは1950年代後半に IBM に参加し、2005年現在も IBM のシリコンバレーの研究所で働いている。彼は、1960年代からずっとIMSに関わる仕事をしている。
1987年にはIMSのクラスタリングであるExtended Recovery Facility（XRF、拡張回復機能）が登場した。

**IMS DB**
DEDBはVSAMの上にのみ作成することができる。DL/IデータベースはVSAM、OSAM両方の上に作成することができる。どのアクセス方式にデータベースを作成できるかは、データベースの編成によって決まる。2005年現在ではz/OSのVSAMデータセットのサイズは最大128テラバイトだが、IMSが扱えるVSAMデータセットの大きさは4ギガバイト、OSAMデータセットは8ギガバイトに制限されている。これはIMSのユーザーが、大量のデータを扱う場合はマルチ・データセットを使うことによる。「VSAM」や「OSAM」は通常、アクセス方式の例として言及される言葉である。IMSデータベースの論理的なVIEWとしては、データベースの編成として言及される（HDAM、HIDAM、HISAM、ほか）。内部のデータは、4バイトのポインターまたはアドレスによってリンクされる。データベースが作成されているデータセット上ではRBA (relative byte addresses) として言及される。

**IMSの基本的な3つの階層型データベース**

**フル・ファンクション・データベース**
DL/Iデータベースと同様に、アポロ計画のために開発された。フル・ファンクション・データベースは、プライマリ/セカンダリ インデックスを持つことができ、業務アプリケーションプログラムからは DL/Iコール でアクセスする。DB2やOracle DatabaseのようなSQLコールとは異なっている。
フル・ファンクション・テータベースは複数のアクセス方式 (access method) を持つ。HDAM (Hierarchical Direct)、HIDAM (Hierarchical Indexed Direct) が主要なアクセス方式である。他に、SHISAM (Simple Hierarchical Indexed Sequential)、HSAM (Hierarchical Sequential)、HISAM (Hierarchical Indexed Sequential) がある。
フル・ファンクション・テータベースのデータはz/OSネイティブなアクセス方式VSAMか、OSAM (Overflow Sequential) を使ってストアされる。これらはIMSのアクセスパターン用の I/Oチャネルプログラムに最適なものである。とりわけOSAMはIMSデータベースへのシーケンシャルなアクセスにパフォーマンス上の大きな利益をもたらす (OSAM Sequential Buffering)。

**ファスト・パス・データベース**
ファスト・パス・データベースは、トランザクションを高速に処理することを目的として開発されたデータベースのタイプである。ファスト・パス・データベースとしては、DEDB (Data Entry Databases) およびMSDB (Main Storage Databases) の2つの種類の編成方式が存在する。どちらの編成もインデックスを持つことは出来ないが、DEDBはインデックスの替わりにランダマイザと呼ばれるプログラムを用いて、キーからレコードの位置を特定する。MSDBはレコードを全てメモリ上に展開するDBであり、小規模で特にアクセス頻度の高いDBに向いている。IMSの最新のバージョンでは、DEDBにおいてもVSO (Virtual Storage Option) 機能によりDBをメモリ上に展開することが可能となっている。またそれに加え、MSDBはSYSPLEX環境での共用が不可能なため、MSDBは徐々に姿を消しつつある。

**High Availability Large Databases (HALDB)**
IMS V7から実装された。フル・ファンクション・データベースの可用性を高め、巨大なデータベースを扱うことを可能にしたものである。IMS V9からオンライン再編をサポートするようになった（サードパーティーによる製品ではIMS V9より前からオンライン再編を実施するツールは在った）。

**IMS TM (IMS DC)**
IMSはまた、強力なトランザクション処理ソフトウェアとして知られる（IMS TMまたはIMS DC）。CICS (Customer Information Control System)、Jakarta EE（特にWebSphere Application Server上で稼動する）と並んで、3大トランザクション処理ソフトウェアの1つといわれている。トランザクションマネージャーは、エンドユーザーと業務処理を行う業務アプリケーション（たとえば銀行の預金引き出しシステム）との間に立ち（VTAMやTCP/IP、3270やWebユーザインタフェースを通して）、業務アプリケーションがレコードを処理し、正しくデータストアに格納し、プロセスが終了するまでその状態を維持する。IMS TM (IMS DC) はデータベースに問い合わせ、更新するインタフェースを提供するという点において、たとえばCGIプログラムで稼動するウェブアプリケーションに似ている。IMS TM (IMS DC) のバックエンドデータベースとしてはIMS DBかDB2が置かれるのが典型的なパターンである。
IMS TM (IMS DC) はメッセージングとキューイングのパラダイムを用いる。IMSのコントロールプログラムは端末から入力された（打鍵された）トランザクションを受け取り、メモリまたはデータセットに用意されたメッセージキューにストアする。次にIMSはメッセージ・キューに格納されたトランザクションに対するスケジューラーを呼び出し、メッセージ・プロセッシング・リージョンに展開されている業務処理アプリケーションを起動させる。メッセージ・プロセッシング・リージョンはIMSのメッセージ・キューに格納したそのトランザクションを検索しこれを処理し、IMSまたはDB2のデータベースを読み、更新し、そのトランザクションの正しいレコーディングを保証する。そして、もし要求があれば、IMS は、応答メッセージを IMS メッセージ・キューに格納する。そのメッセージはメッセージ・キューから取り出され、IMS のコントロールプログラムはトランザクションが入力された（打鍵された）最初の端末へ、そのメッセージを送り返す。IMS TM (IMS DC) は、1秒間に何千、何万という単位で、このプロセス全体をハンドリングする。
ビジネスや行政は、そのトランザクションを処理する環境を必要とした。IMS TM (IMS DC) は、簡単に、使いやすい形で、信頼性高く、効率的なトランザクション処理を行うスタンダードな環境を提供する。実際、世界中の銀行業界はこのIMSに頼っている。アメリカ合衆国の連邦準備制度もそうである。現金自動預け払い機 (ATM) からの預金引き出し要求は、IMSトランザクションのトリガーである。最近（2005年から見て）、急速に発展する国の金融業を支えるため、中国の数行の銀行がIMSを購入した。報道によれば、そのときのIMS単体の価格は、1年間で10億USドルだそうである。

**関連項目**
データ管理システム
*トランザクションモニター
*データベース管理システム
*メインフレーム
*COBOL
*PL/I
*w:Datacom
*w:IDMS
*w:IMS/DB

**脚注**

**外部リンク**
 IMS - 日本IBM- IMS - IBM- IMS - IBM Knowledge Center