ライセンス管理システムは、Caché 5 で再構築されています。これは、Caché のライセンス付与方法の変更を反映しています。新規のライセンス・システムは、Caché のこれまでの実装より厳しいライセンス管理行なうことを主要な目的としています。
Important:
ライセンス付与された Caché ソフトウェアの使用方法は、使用条件によって定められています。ただし、その実装には、より厳格な条件が適用される場合があります。お客様が記述されたライセンス関連のコードについては、それが該当する使用条件に適合することを必ずご確認ください。
Caché ログインの作動方法
このセクションでは以下の項目について説明します。
ユーザの認識
Caché ライセンス管理システムは、個別のユーザを識別し、1 人のユーザに対して 1 つのライセンスを付与します。1 人のユーザは、1 つのライセンス・ユーザ ID (IP アドレス、ユーザ名、CSP セッション ID、あるいはユーザの接続方法による他の識別条件) によって識別されます。
単独のユーザによって、または単独のユーザに対して開始された複数のプロセスは、1 人のユーザあたり最大限のライセンス・ユニットを共有します。$System.License.MaxConnections() メソッドは、現在の実装に対する最大値 (maxconn) を返します。
 Set maxconn=$System.License.MaxConnections()
 Write "Maximum connections = ",maxconn
プロセス数がこの最大値を超えた場合、移行が開始され、Caché はそのユーザ ID に対してプロセスあたり 1 つのライセンス・ユニットの許可を開始します。maxconn を超える接続が 1 つのユーザ ID に関連付けられている場合、システムは、複数のユーザが媒体経由 (例えばファイア・ウォール・システムなど) で Caché にアクセスしていると推測し、追加のライセンス・ユニットを要求します。したがって、maxconn + 1 のプロセスが開始すると、そのユーザ ID に許可されているライセンス・ユニット数は 1 から (maxconn + 1) に変化します。Job コマンドによって開始されたプロセスは、Job コマンドを呼び出したユーザ ID のプロセス制限に対して許可が与えられます。
インターシステムズは、大半のアプリケーションにおいて名前でユーザを識別できるようにする予定です。これにより、クライアント IP アドレスに基づく既定のユーザ ID、CSP セッション ID、および接続から派生した他のユーザ ID の使用に関連する問題が解決されます。例えば、ファイア・ウォールやターミナル・サーバ・ソフトウェアを使用すると、Caché は接続中のユーザの区別ができず、そのために最大接続移行ルールに依存することになります。同じクライアントから CSP と Caché Direct などの混合接続を使用する場合も、自動 ID 作成を使用して適切にユーザをカウントすることができなくなります。
ユーザ名がライセンス識別子として提供されているとき、問題は発生しません。組織が新規のアクセスや監査要求を導入するにあたり、適切なユーザを識別する重要性が高まりつつあります。ユーザ認識を使用してライセンス規約を制御することは、時代の流れから考えても当然の結果と言えるでしょう。
ライセンス・ログイン
ライセンス・ログインには、自動ログインと明示ログインの 2 つのモードがあります。Caché 5 の既定は、自動ログインです。ライセンス・システムは、クライアントの IP アドレスを識別して、そのアドレスをライセンス・ユーザ ID として使用します。これは、クライアントが IP を使用してサーバに直接接続しているときに、うまく作動します。しかし、ファイアウォールがクライアントとサーバの間にある場合は、すべてのクライアントが同じ IP アドレスを持つように見えるため、うまく作動しません。また、ターミナル・サーバが telnet プロトコルで使用される場合、Caché にはすべてのターミナル・サーバ・ポートが 1 つの IP アドレスに見えるため、自動ログインはユーザ間の区別ができません。すべての接続は同じアドレスから来ているので、同じユーザ ID を持つためです。ユーザがファイアウォールを経由して接続したり、ターミナル・サーバから telnet 転送を使用する場合は、明示ログインを使用してください。
ネットワーク転送として IP を使用していない場合、IP アドレスをライセンス・ユーザ ID として使用することはできません。この場合、ライセンス・システムは、ライセンス・ユーザ ID としてさまざまな他のソースを使用します。接続が LAT プロトコルを使用してターミナル・サーバから来ている場合、ターミナル・サーバ名とポート名 ($ZIO から取得) を結合して、ユーザ ID を形成します。したがって、複数のセッションを持つターミナル・サーバ・ポートからのユーザは、単独のライセンス・ユニットを与えられます。UNIX で at デーモンによって開始されたバッチ・プロセス、または OpenVMS 上のバッチ・キューからのバッチ・プロセスには、また別の問題があります。このようなプロセスは、ユーザと関連していないのでライセンス・ユニットを共有しません。このようなプロセスでは、プロセス ID はライセンス識別子として使用されます。
明示ログインが選択されているときは、ユーザ ID の自動検出は行われません。アプリケーションは $System.License.Login(UserIdentifier) メソッドを明示的に呼び出して、ライセンス・ユーザ ID を提供し、ライセンスを取得する必要があります。
明示ログインは、$System.License.DeferUserIdentification([0 or 1]) 関数を呼び出すことで使用可能になります。これは、システムのスタートアップ時に ^%ZSTART ルーチンから実行することができます。引数値が 1 の場合、ライセンスの取得はログイン時まで延期され、明示ログインを実行できます。引数値が 0 の場合、ライセンスの取得はプロセス開始時に自動で行われます。
ログインが延期されたとき、ユーザは即時にライセンス・ログイン・メソッドを呼び出す必要があります。ライセンスを実行していないプロセスは、Caché ObjectScript コードが 1000 行実行されるごとに 15 秒停止します。
明示ログインは、自動ログインが処理できない場合に使用します。自動ログインが構成されている場合でも、いつでも $System.License.Login(UserIdentifier) を呼び出して、ライセンス許可のために明示的なユーザ識別を使用できることを覚えておいてください。
CSP 接続
CSP 接続でのログインは特殊なケースです。インターシステムズは、CSP アプリケーションが %CSP.Session と同様のメソッド %CSP.Session.Login を使用して、ライセンス許可のためにユーザを識別することを強くお勧めします。そうしない場合、ライセンス・ユーザ ID として CSP セッション ID を使用します。各セッションが 1 つのライセンス・ユニットを消費するので、多くの場合これは不適切なのです。例えば、ユーザは複数のブラウザ・ウィンドウを同時に開くことができます。あるいは、ユーザは複数のパスウェイ (CSP、ターミナル・ウィンドウ、および Visual Basic クライアントからの Caché Direct 接続) を経由して接続することができます。この場合、%CSP.Session クラス・メソッド %CSP.Session.Login(UserId,Password,[0 or 1]) を使用して、セッションに対する明示的なライセンス・ログインを実行することができます。
ユーザのスタート・ルーチン (^%ZSTART または従来の ^ZSTU) により開始するプロセスも、特別なケースです。^%ZSTART を実行中のプロセスには、親プロセスがありません。したがってログインは、^%ZSTART が呼び出される前に、そのユーザ ID User Startup に対して実行されます。^%ZSTART から Job コマンドで開始されたプロセスは、このユーザ ID を持ちます。ご希望の場合は、^%ZSTART から $System.License.Login(UserId) を呼び出して、ユーザ ID を変更することができます。このプロシージャは、^%ZSTARTmaxconn より 1 つ少ないバックグラウンド・プロセスを開始し、1 ライセンスのみ消費することを意味します。これらのプロセスが個別のライセンスを持つ場合 (例えば、個別のライセンスが必要な実験装置の一部を起動してる場合など)、適切なユーザ ID に対するライセンスを取得するために $System.License.Login(UserId) を呼び出す必要があります。
Caché 5 では、バックグラウンド・プロセスを区別したり、そのプロセスを個別にカウントしたりしないことを理解することが重要です。ユーザ・プロセスが他のプロセスを開始する場合、その子プロセスはユーザの最大制限の全プロセスに対し 1 つにカウントされます。
Caché 5 ライセンスの構成
Caché 5 とそれ以前の Caché 間の大きな違いは、各構成がライセンス機能と現在の使用の独立したローカル・ビューを保持していることです。各構成にはアクセス・キーが必要です。したがって、cache.key ファイルを各構成にインストールする必要があります。マルチサーバ・キーは、同じマシン上、または異なるマシン上のいずれかで共同の構成間で共有することができます。従来のバージョンとは異なり、エンタープライズ・キーは自動的に共有可能にはならないことに注意してください。共有は、マルチサーバ・キーでのみ許可されます。
マルチサーバ・キーを共有するには、キーを使用している構成間で調整が必要です。Caché 5 では、ライセンス・マネージャを導入しています。これにより、バージョン 4.1 のライセンス・サーバや、それ以前の Caché のバージョンのライセンス・サーバを置換できます。マルチサーバ・キーが共有されている場合は、ライセンス・マネージャを構成する必要があります。ライセンス・マネージャは、すべての構成でローカルに保持されているライセンス使用のビューを調整します。1 つのライセンス・マネージャは、複数の構成を処理することができます。ライセンス・マネージャは Caché プロセスではないので、Caché 構成を終了しても影響はありません。これは、構成がバックアップ中にシャット・ダウン、または停止した場合に、ライセンス・サーバがアクセス不可能になることにより生じていた問題を回避します。ライセンス・マネージャは、構成可能なポートで UDP メッセージを経由して構成と通信します。既定のポートは 4001 です。
ライセンス・マネージャは [Caché 構成マネージャ] の [ライセンス] セクションの [詳細] タブで定義されます。ここで、複数の冗長ライセンス・マネージャを構成することもできます。これらは、従来の Caché バージョンのものよりは重要ではありません。その理由の 1 つは、構成はライセンス・マネージャなしでも、ログインしたユーザで実行を継続することができるということ、2 つ目は、ライセンス・マネージャが複数の構成をサポートしているときに、構成がシャットダウンした後でも実行を継続するということです。ライセンス・マネージャの構成時に、ライセンス・マネージャをホストしたいサーバを決定します。希望する複数のホストで実行するように構成することができますが、上限は 3 台です。ライセンス・マネージャは構成を実行することで開始するので、ユーザは Caché 構成が一貫して実行するシステムで実行するように構成する必要があります。冗長ライセンス・マネージャを構成する場合は、ライセンス・サーバで必要とされたように、異なるポート番号を使用する必要はありません。
ライセンスのアップグレード
ライセンス・キーは、Caché サーバの適切なディレクトリに配置するか、Caché 構成マネージャ のライセンス・ウィザードを使用することによりアップグレードできます。ウィザードがキーを入力して保存するとき、作動中のキーのバージョンは自動的に更新され、使用可能になります。手動でアップグレードする場合は、%SYS ネームスペースから $System.License.Upgrade メソッドを呼び出します。通常は、構成を再起動する必要はありません。
ライセンス・タイプをアップグレードするときには、いくつかの制約があります。パワー・ユニットから他のタイプにライセンス・タイプを変更した場合、新規のキーの自動アクティベートは使用できません。これは、一般的ではありません。大半のライセンス・アップグレードは、ライセンス・ユニット数の増加や、シングル・サーバからマルチサーバ・ライセンスへの変更などにのみ対応しています。
もう 1 つの制約は、ライセンス・アップグレードのメモリ容量は一般的なメモリ・ヒープ (gmheap) 容量から消費するということです。gmheap 容量を使用できない場合、ライセンス・テーブル・エントリ数は拡張できません。また、ライセンス・アップグレードが消費する gmheap 容量 (10 ページ) にも制限があります。この制限は、最大約 7,000 の追加ライセンス・ユニットのアクティベートを許可します。これは合計ではなく増加分の数なので、ユーザが 30,000 の同時ユーザ・キーを持つ場合、構成を再起動することなく約 37,000 のライセンス・ユニットにアップグレードすることができます。7,000 以上の追加ライセンス・ユニットを購入することでライセンスをアップグレードする場合、約 7,000 の追加ライセンス・ユニットが使用可能になりますが、残りのライセンス・ユニットを使用可能にするには構成を再起動する必要があります。
ライセンス機能の決定
現在いくつのライセンスが使用されていて、誰がそのライセンスを使用するかは、どうやって知ることができるのでしょうか。%SYSTEM.License クラスは、Caché ライセンス・アプリケーション・プログラミング・インタフェース (API) に対するインタフェースを提供し、ライセンス機能および現在の使用状況の問い合わせに使用される多くのメソッドを提供します。このクラス・メソッドを、特別な $System オブジェクトを使用して実行することができます。クラス・メソッドに関する詳細は、Caché クラス・リファレンス を参照してください。以下のクラス・メソッドを呼び出して情報を表示し、ライセンス・データベースをファイルにダンプします。
$System.License.CKEY は、キーを表示します。このサブルーチンは、互換性を保持する ^CKEY プログラムによって呼び出されます。
 Do $System.License.CKEY()
$System.License.ShowCounts は、ローカル・システムの共有メモリで記録されているライセンスの使用を要約します。
 Do $System.License.ShowCounts()
$System.License.ShowManager は、起動しているライセンス・マネージャのアドレスとポートを表示します。
 Do $System.License.ShowManager()
ローカル・ライセンス情報を表示するメソッド
以下にリストにされているこのサブルーチンは、構成共有メモリでローカルに含まれているライセンス・テーブルのコンテンツをダンプします。通常は、クライアントを識別します。
$System.License.DumpLocalAll は、現在のディレクトリで all.dmp ファイルに対するすべてのローカル・ライセンス・テーブル・エントリをダンプします。
 Do $System.License.DumpLocalAll()
all.dmp ファイルのコンテンツの例は以下の通りです。
License Capacity = 5, Current use = 2, Units Remaining = 3

   0)  User ID = 127.0.0.1, Connections = 2, CSP Count = 0, Time active = 90
   1)  User ID = 192.9.202.81, Connections = 1, CSP Count = 0, Time active = 49
   2)  free
   3)  free
   4)  free
$System.License.DumpLocalInUse は、現在のディレクトリで inuse.dmp ファイルに対する、使用中のすべてのローカル・ライセンス・テーブル・エントリをダンプします。
 Do $System.License.DumpLocalInUse()
inuse.dmp ファイルのコンテンツの例は以下の通りです。
License Capacity = 5, Current use = 2, Units Remaining = 3
$System.License.DumpLocalPID は、現在のディレクトリで piduse.dmp ファイルに対する、プロセス ID によって使用されるローカル・ライセンス・テーブルをダンプします。
 Do $System.License.DumpLocalPID()
piduse.dmp ファイルのコンテンツの例は以下の通りです。
License Capacity = 5, Current use = 2, Units Remaining = 3
ライセンス・マネージャ情報を表示するメソッド
以下のサブルーチンは、ライセンス・マネージャによって保持されているライセンス・テーブルのコンテンツをダンプします。出力ファイルは、起動中のライセンス・マネージャが実行しているホストの、指示されたディレクトリに存在します。
$System.License.ShowSummary は、ライセンス・マネージャでライセンス情報の要約を表示します。Distributed license use セクションは、ライセンス・マネージャによって現在サポートされている、すべての Caché 構成に対するライセンス使用のコレクティブ・ビューを表示します。Local license use セクションは、プログラムが実行されている 1 つの Caché 構成に対するライセンス使用のビューを表示します。
 Do $System.License.ShowSummary()
$System.License.DumpServer は、ライセンス・マネージャを実行しているホストで、このルーチンをファイル dumpserver.txt に対して実行するサーバに関連するライセンス・マネージャ・データベース情報をダンプします。
 Do $System.License.DumpServer()
$System.License.DumpServers は、ライセンス・マネージャを実行しているホストで、ファイル dumpservers.txt に知られているすべてのサーバに対するライセンス・マネージャ・データベース情報をダンプします。
 Do $System.License.DumpServers()
$System.License.DumpKey は、ライセンス・マネージャを実行しているホストで、この構成またはファイル dumpkey.txt に対して共有する構成が使用するキーをダンプします。
 Do $System.License.DumpKey()
$System.License.DumpKeys は、ライセンス・マネージャを実行しているホストで、ファイル dumpkey.txt に対して使用中の構成とクライアントを示すすべてのキーをダンプします。
 Do $System.License.DumpKeys()
Note:
ローカル・ライセンス・メソッドによって表示された情報は、ライセンス・マネージャ・メソッドによって表示された情報よりも最新であることに注意してください。これは、ライセンス・マネージャの更新が定期的なのに対して、ローカル・データはリアルタイムになるためです。