Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

Caché 5.1

この章では、Caché 5.1 の以下の項目について説明します。

Caché 5.1 の新機能と強化機能

Caché をご利用いただきありがとうございます。

この章では、Caché 5.1 の新規機能および機能強化の概要について説明します。

今回のリリースでの重要な新機能、または強化された機能に関する詳細は、"主な新機能" のセクションを参照してください。

Caché をはじめて使用される方は、"はじめに" を参照してください。このページには、トピックごとにさまざまなドキュメントへのリンクが掲載されています。

アップグレードとインストール

既存のアプリケーションとデータベースを旧バージョンからアップグレードする場合は、"Caché 5.1 アップグレード・チェックリスト"、および "Caché インストール・ガイド" の "アップグレード" の章を参照してください。

Caché のインストールに関する詳細は、以下を参照してください。

主な新機能

Caché 5.1 は、既存の機能の拡張および多くの重要な新機能を導入しています。この機能は、以下に重点を置いています。

  • 高度なセキュリティ

  • スケーラビリティの向上

  • 開発期間の短縮

  • サポート負担の低減

ここでは新しい機能をまとめて紹介します。詳細は、各箇所で引用されている章やガイドを参照してください。

あらゆるメインストリーム・データベースの中でも最も高度なセキュリティを Caché で実現するために、多数の新機能が追加されました。

CSP で構築された新しい統合システム管理インタフェースは、コントロール・パネル、エクスプローラ、およびSQL マネージャに代わるものです。これにより、Caché を管理するための Windows PC が不要になり、Caché クライアント・ソフトウェアも必要とされないので、クライアントとサーバでバージョンが異なるために発生する問題もなくなります。さらに、単一のデバイスから複数のバージョンの Caché を簡単に管理できるようになります。

Caché システムの改善内容には、多数の新規または拡張されたクラスとメソッドに加えて、入れ子になったロールバックやクラス・パッケージをネームスペースにマップする機能など、大幅な拡張機能があります。

  • 入れ子になったロールバック — TSTART を入れ子にして使用している場合、この拡張機能を利用すると、開いているトランザクション全体をロールバックすることなく、最も内側の TSTART をロールバックできるようになります。

  • クラス・パッケージのネームスペース・マッピング — ネームスペース・マッピングは、ルーチンやグローバルをマップするのと同様に、クラス・パッケージを名前でマップする機能を追加して拡張されています。

ObjectScript 言語によって、実行時エラー報告機能が大幅に強化されました。その他にも、以下の項目を含む多数の機能拡張が導入されています。

  • 新規の関数 $FACTOR

  • 新規の関数 $LISTNEXT$LISTTOSTRING、および $LISTFROMSTRING

  • 新規の特殊変数 $ROLES および $USERNAME

  • 新規のエラー・トラップ構文

  • さらに効率的なコード生成

  • Unicode 対応のパターン・マッチング “E”

  • 高速化された MERGE コマンド

新規の言語バインディング

今回のリリースでは、改良バージョンの Caché ActiveX バインディングに加えて、新しく Perl バインディングと Python バインディングを導入しました。

Caché 5.1 クラス・ライブラリは、多数の新規機能および主要な拡張機能を提供します。

  • 計算フィールド上のインデックス — インデックス定義は、CALCULATED および SQLCOMPUTED と定義されたプロパティを参照できるようになりました。

  • オブジェクト同期化 — Caché では、ジャーナリングされたクラスに対するすべてのオブジェクト・ファイル・イベント (挿入、更新および削除) のレコードの追跡、ジャーナリングされたオブジェクト・データのエクスポート、およびそのオブジェクト・データと他のデータベースとの同期化が可能になりました。元のデータベースにアクセスしないアプリケーションは、同期化したオブジェクトへの参照を解決できます。

  • スタジオの新機能 — 新しい %Studio.Extension クラスは、カスタム・メニューおよびユーザ定義のデータ・エントリに対応するメカニズムを提供します。%Studio.SourceControl クラスは機能拡張されたソース・コントロール・フックを提供して、ソース・コントロール・システムに対するカスタマイズされたチェックインおよびチェックアウトを可能にします。

  • パフォーマンスの改善 — リレーションシップのメモリ内パフォーマンスが大幅に改善されました。

  • ストリームおよびコレクション・プロパティを定義する構文が改良され、ストリームおよびコレクションの動作が強化されています。

Caché の SQL サポートには、以下の項目を含む多数の新規または拡張機能が含まれています。

  • 新規の SQL/XML サポート関数

  • JDBC 3.0 のサポート

  • SAVEPOINT : 新規のトランザクション処理機能

  • CREATE TABLE : 新規の IDENTITY キーワード

  • DROP VIEW : 新規の CASCADE キーワード

  • INSERT : 新規の DEFAULT VALUES 節

  • 新規の RowId Counter Validation オプション

  • 新規のクエリ・オプティマイザ・プランの検証

  • サブクエリの平坦化

  • 外部キー参照に対する拡張されたロック動作

  • READONLY テーブルおよびフィールド

  • %%CLASSNAMEQ および %%TABLENAME のサポート

  • Oracle とのインポート互換性を実現する CREATE BITMAP INDEX のサポート

Caché 5.1 では、ネットワーク接続性に関する新規オプションが多数導入されています。

  • ECP の新機能 — Caché エンタープライズ・キャッシュ・プロトコル (ECP) に多数の機能拡張が追加されました。ECP は、OpenVMS および Tru64 UNIX® における共有ディスク・クラスタ構成でもサポートされるようになりました。

  • SNMP のサポート — 簡易ネットワーク管理プロトコル (SNMP) のサポートが追加され、さまざまなシステム管理ツールおよびフレームワークによって、Caché の監視が可能になりました。

  • LDAP クライアント — LDAP サーバへのプログラムによるアクセスが可能になりました。

  • Mac OS X サーバのサポート — サーバとしての Mac OS X、さらにクライアント・コンポーネントの ODBC、JDBC、オブジェクト、Apache の CSP ゲートウェイに対するサポートが追加されました。

Caché の高度なセキュリティ

インターシステムズは、バージョン 5.1 で Caché の高度なセキュリティを導入しています。今回リリースする Caché には、あらゆるメインストリーム・データベースの中でも最も高度なセキュリティを可能にする多数の新機能が含まれています。Caché の高度なセキュリティによって、以下の特長を持つシンプルで統合されたセキュリティ・アーキテクチャを利用することが可能になります。

  • アプリケーションに対して、強固で一貫性のある高性能なセキュリティ・インフラストラクチャを提供します。

  • 認証基準を満たしています。

  • 開発者がアプリケーションにセキュリティ機能を容易に組み込むことができます。

  • パフォーマンスと動作に対する負荷が最小限となります。

  • Caché が、セキュリティで保護された環境の構成要素として効果的に機能し、他のアプリケーションと高度に連係して動作します。

Caché の高度なセキュリティの詳細は、"Caché セキュリティ管理ガイド" を参照してください。

主要な機能

Cache 5.1 で提供される新規セキュリティ機能の中でも、より重要な機能を以下に示します。

  • Kerberos ベースのセキュリティ・インフラストラクチャ

    2 つの認証モデルが利用可能になりました。Caché 認証 (ユーザ名/パスワード) に加えて、Cache では Kerberos ベースのセキュリティ・インフラストラクチャを利用できるようになりました。 Kerberos ライブラリはすべてのサポート対象プラットフォーム上で利用可能です (Microsoft は認証モデルの心臓部で Kerberos を使用しているため、アクティブ・ディレクトリ・ドメインでの Win32/64 プラットフォームに対する Windows シングル・サインオンは Kerberos レルムとなります)。

  • セキュリティ管理インタフェース

    管理ポータルにおける Web ベースのセキュリティ管理機能を使用すると、Caché セキュリティ管理におけるユーザ、ロール、サービス、リソース (スキーマを含む)、監査、およびその他の要素に完全にアクセスすることが可能になります。

  • セキュリティ・アドバイザ・ユーティリティ

    新しいセキュリティ・アドバイザ・ユーティリティは、Caché DBMS を保護するための提案 (セキュリティ設定、アプリケーションおよび監査) を行います。

  • ODBC/JDBC での認証

    ODBC ドライバおよび JDBC ドライバは、Caché 認証と Kerberos 認証の両方に対応できるようになりました。Kerberos モードでは、クリア、保全 (ソースおよびコンテンツの検証)、暗号化 (完全なエンド・ツー・エンドの AES 暗号化) の 3 つのレベルで暗号化を実施します。

  • 監査機能

    Caché では、特別に保護された監査データベースに監査情報を格納する精密な監査機能が用意されています。監査機能は、自動化/管理およびプログラム的/API の視点から利用できます。

  • 暗号化データベース管理機能

    新しい暗号化データベース機能を利用すると、完全に暗号化された (AES、最大 256 ビット) CACHE.DAT ファイルを作成できます。このファイルは常にディスク上で暗号化された状態で維持されます。入出力は、その場で暗号化および解読され、パフォーマンス上の影響は最低限に保たれます。データベースは特殊キーで暗号化されます。この特殊キーは、リムーバブル・デバイス (USB フラッシュ・デバイスなど) に格納され、DB をマウントして使用するときに指定する必要があります。

セキュリティ・アドバイザ

Caché システムの保護においてシステム・マネージャを支援するために、Caché にはセキュリティ・アドバイザが用意されています。 このユーティリティは、Web ページとして利用します。この Web ページには、セキュリティ関連の現在のシステム構成情報や、推奨される変更または領域が表示されます。また、他のシステム管理用 Web ページへのリンクを利用して、推奨される変更を実行することもできます。

Caché 5.1 に組み込まれているのは、セキュリティ・アドバイザの初版です。今後のバージョンで、機能と範囲が拡張される予定です。セキュリティ・アドバイザには、システム管理ポータルの ホーム, セキュリティ管理, セキュリティアドバイザ からアクセスします。

保護されたシステムをプロダクション・ステータスに移行する前に、セキュリティ・アドバイザで提示される問題とその解決方法を確認しておくことを強くお勧めします。

低レベル・セキュリティ・インタフェース

システム管理者は、以下の 2 つの文字指向インタフェースを介して Caché システムのセキュリティを低レベルで制御できます。

  • ^SECURITY では、ユーザ、ロール、ドメイン、サービス、アプリケーション、および監査に関するセキュリティ・データの検査および編集が可能です。^SECURITY の概要は、"CHUI ベースの管理ルーチン" に記載されています。

  • ^DATABASE では、Caché データベースに関連する低レベルの管理機能が利用できます。^DATABASE の概要は、"CHUI ベースの管理ルーチン" に記載されています。

Common Criteria セキュリティ認定

セキュリティ認定は、政府の購買において必須項目とされるケースが急速に増加しつつあり、また民間部門の購買においても要求されることが多くなっています。このことから、インターシステムズでは、Common Criteria 基準による Caché の認定を取得しています。具体的には、2007 年 2 月 15 日、Caché は Common Criteria 基準 (EAL 3) による認定を受けました。

Common Criteria は、北米、ヨーロッパ、および極東の多数の国を対象とした共通のセキュリティ基準を提供します。この基準では、製品に対する評価の厳格さでその製品の格付けを規定し、それを 1 ~ 4 の保証スケールで示します。市販対象の製品は、1 (厳格さが最も低い評価) から 4 (厳格さが最も高い評価) の範囲で格付けされます。Caché は、現在レベル 3 の格付けが検討されています。この格付けは、高度な安全性を備えた運用環境で、Caché が効果的に機能することを示すものです。

Caché の高度なセキュリティの概念

Caché の高度なセキュリティは、以下の認証、承認、および監査に基づいています。

  • 認証では、すべてのユーザの身元が確実に確認されます。

  • 承認によって、ユーザがアクセスできるリソースを、そのユーザが必要とするもののみに制限できます。

  • 監査では、事前定義したシステム・イベントとアプリケーション固有のイベントのログが記録され、データベース動作に関する捜査情報が提供されます。

認証 : 身元の確認

認証とは、自分が自身で主張するとおりの人物であることを Caché に対して証明する手段です。信頼できる認証がないと、あるユーザが他人になりすまして不正に入手した特権を利用できるため、承認機能の重要性が損なわれることになります。

利用できる認証メカニズムは、Caché にアクセスする方法によって異なります。Caché には、以下のようなさまざまな認証メカニズムが用意されています。

  • Kerberos — 最も高いセキュリティで保護された認証方法です。Kerberos 認証システムは MIT によって開発され、数学的に証明された強力な認証を、セキュリティ保護されていないネットワークで実現します。

  • オペレーティング・システム・ベース — UNIX® および OpenVMS で利用可能。OS ベースの認証では、オペレーティング・システムのユーザの身元情報を使用して、Caché 向けにユーザを識別します。

  • Caché ログイン — Caché ログインを使用した認証。Caché では、各ユーザ・アカウントのパスワードのハッシュ計算値を格納するテーブルが保持されます。ログイン時に、Caché は、テーブルにある値と、ユーザによって入力されたパスワードのハッシュ値を比較することで、ユーザの身元を確認できます。

承認 : ユーザ・アクセスの制御

ユーザが認証された後、セキュリティに関連する次の手順は、そのユーザに使用、閲覧、または変更が認められているリソースが何であるかを確認することです。承認では、データベース、ODBC アクセスのような Caché サービス、ユーザが作成したアプリケーションなどのアセットとユーザの関係を管理します。

大部分の基本的な承認モデルでは、使用可能なすべてのアセット、ユーザのリスト、および第 1 グループと第 2 グループの間のすべてのリレーションシップが存在します。

監査 : 動作状況の確認

監査では、システムに関連するアクションについて、検証可能で信頼できる追跡が得られます。監査では、以下のセキュリティ機能が提供されます。

  • Cach およびそのアプリケーションの認証システムと承認システムで発生したアクションを記録した証明を提供します。これは、一般に認められている “書面による証跡” です。

  • セキュリティに関連するどのような問題が発生した後でも、イベントのシーケンスを再構築するための基盤を提供します。

  • 監査機能の存在を示すことが、攻撃者に対する抑止力として機能します (これは、攻撃を加えている間に自身の身元を知られてしまうことを、攻撃者が知っているからです)。

監査機能では、特定のシステム・イベントが自動的に記録されます。それ以外のシステム・イベントやサイト定義のアプリケーション・イベントが記録されるようにすることもできます。監査対象のイベントはすべて、改ざんから保護されたログ・ファイルに記録されます。それによって、承認されたユーザは、Caché に付属するツールを使用し、この監査ログに基づくレポートを作成できます。監査ログには機密性の高い情報が含まれていることがあるので (例えば、医療検診の陽性値や陰性値)、監査レポートを実行すること自体で監査ログのエントリが生成されます。付属の Caché ツールは、レポートの生成、監査ログのアーカイブ、およびその他のタスクをサポートしています。

システム管理ポータル

Caché 5.1 では、ブラウザベースのインタフェースであるシステム管理ポータルを使用してシステムを管理します。以前は Windows Caché キューブのエクスプローラ、SQL マネージャ、構成マネージャ、およびコントロール・パネルに分散していた機能が、この新しいインタフェースにまとめられています。5.1 では、これらの機能はキューブから削除されています。

この方法の利点は、インストール管理に使用するシステム上に Caché をインストールする必要がなくなったことです。サイトに対するアクセス制御を確立する必要はありますが、Web を介したリモートのシステム管理が大幅に容易になりました。Caché クライアント・ソフトウェアは不要なため、複数のバージョンの Caché を単一のデバイスから簡単に管理することが可能です。データとそのフォーマット情報の両方が、管理対象のシステムから直接取得されるので、リリース間の互換性の問題も最小限になりました。

新しいインタフェースの詳細は、"システム管理ポータルの使用" を参照してください。

システムの改善

新規の Caché 5.1 システム機能および強化機能 :

新機能 :

  • 入れ子になったロールバック

  • クラス・パッケージのネームスペース・マッピング

  • 新規メソッド $SYSTEM.Util.CleanDeadJobs()

  • 新規クラス $SYSTEM.Monitor.Line

  • 新規メソッド $System.Device.GetNullDevice()

  • $ZF(-2) の新規オプション引数

強化機能 :

  • シャドウにおけるデジャーナリング前にレコードをフィルタするオプション

  • コールインの機能強化

  • 64K ルーチン・バッファのサポート

  • CVENDIAN の機能強化

入れ子になったロールバック

このバージョンの Caché には、複数のトランザクション・レベルが導入されています。このトランザクション・レベルを利用すれば、その時点までで完了した作業をまったく失うことなく、トランザクションの一部をロールバックできます。入れ子になった TSTARTs が使用されている場合、この拡張機能を利用すると、開いているトランザクション全体をロールバックすることなく、最も内側の TSTART をロールバックすることが可能になります。COMMIT または TROLLBACK が介在することなく 2 つの TSTARTs が発行された場合、トランザクション・レベル ($TLEVEL) は 1 つインクリメントされます (最大は 255 に制限)。TCOMMIT または TROLLBACK 1 が発行された場合、トランザクション・レベルは 1 つデクリメントされます。修飾されていない TROLLBACK が発行された場合、トランザクション・レベルは 0 にデクリメントされ、トランザクション全体がロールバックされます。

トランザクション・コマンドは、以下のように動作します。

  • 引数なしの TROLLBACK コマンドは従来どおり動作し、最上位レベルのトランザクションにロールバックしてトランザクションを閉じます。

  • TROLLBACK 1 コマンドは、現在開いているトランザクションを 1 レベル分ロールバックします。このトランザクション内で変更されたグローバルはすべてリストアされ、$TLEVEL が 1 つデクリメントされます。開いているトランザクションが存在しない場合 ($TLEVEL がゼロ) は、何のアクションも実行されません。TROLLBACK 1 は、$TLEVEL が 1 である場合を除き、入れ子になったトランザクションをサポートしないリモート・システムにマップされたグローバルをロールバックすることはありません。

  • TCOMMIT コマンドは従来どおり動作します。入れ子になったトランザクションでは、$TLEVEL をデクリメントし、PTL (Pending commit with Transaction Level) ジャーナル・レコードをジャーナル・ファイルに書き込みます。

  • TSTART コマンドも従来どおり動作します。入れ子になったトランザクションでは、$TLEVEL をインクリメントし、BT (Begin Transaction) レコードをジャーナル・ファイルに書き込みます。新しい $TLEVEL が 1 よりも大きい場合には、'BT’ ではなく 'BTL' (Begin Transaction with level) を書き込みます。

Caché SQL には、入れ子になったロールバック ("SAVEPOINT の新機能" を参照) を利用した標準 SQL コマンドが新たに装備されています。

クラス・パッケージのネームスペース・マッピング

ネームスペース・マッピングが拡張され、ルーチンおよびグローバルのマッピングと同様に、データベースから 1 つまたは複数のネームスペースにクラス・パッケージをマップする機能が追加されました。システム・クラスに対しては、自動ネームスペース・マッピングが用意されています。%sys から '%' で始まるすべてのスキーマは、すべてのネームスペースに自動的にマップされます。これらのマッピングによって、ユーザは複数のネームスペース間で SQL テーブル、ビュー、プロシージャ、およびクラスにアクセスできるようになります。例えば、以下のクエリを指定するクラス %Test を考えます。

Select field1 From %Test

マッピングを使用せずにユーザ・ネームスペース内のこのクラスから継承しようとすると、"テーブル %Test が見つかりません" というエラーが発生します。マッピングすれば、クラスはどのネームスペースででも正常にコンパイルされます。

詳細は、"Caché システム管理ガイド" の "データの構成" を参照してください。

新規メソッド $SYSTEM.Util.CleanDeadJobs()

新しいクラス・メソッド $SYSTEM.Util.CleanDeadJobs() は、停止したジョブで開いているトランザクションがあればそれをロールバックし、停止したジョブのプロセス・テーブル (pidtab) スロットを削除して再使用できるようにします。

新規クラス $SYSTEM.Monitor.Line

新しいクラス $SYSTEM.Monitor.Line は、行ごとの監視 (^%MONLBL) に対応するプログラマ API です。この API は、スタジオとの統合を可能にし、通常は ^%MONLBL に代わるプログラム可能な手段としても使用できます。詳細は、"Caché 監視ガイド" の MONLBL の章の "プログラミング・インタフェース" のセクションを参照してください。

新規メソッド $System.Device.GetNullDevice()

新しいクラス・メソッド $System.Device.GetNullDevice() は、現在のオペレーティング・システムのタイプに適した NULL デバイスの名前を返します (UNIX® の場合は /dev/null、OpenVMS の場合は _NLA0、Windows の場合は //./nul)。これによって、NULL デバイスを参照するアプリケーションの開発が容易になり、OS に依存することなく NULL デバイス名を取得する方法が実現します。

$ZF(-2) の新規オプション引数

関数 $ZF(-2) にはオプションの 5 番目の引数が用意されています。この引数では、生成されたプロセス ID を $ZCHILD に格納するかどうかを指定します。例えば、以下のようにすることができます。

s rc=$zf(-2,"program","","",1) 
s childpid=$ZCHILD 

新しい引数がゼロであるか、または指定されていない場合、$ZCHILD は変更されません。それ以外の場合、$ZCHILD は、プロセス ID が正しく生成されたときに、その生成されたプロセス ID に設定されます。

シャドウにおけるデジャーナリング前にレコードをフィルタするオプション

シャドウでデジャーナルされる前にジャーナル・レコードをフィルタ処理するには、グローバル・ノード ^SYS("shdwcli",shdw_id,"filter") をフィルタ・ルーチンの名前に設定します。フィルタの入力パラメータは以下のとおりです。

  • pid : レコードのプロセス ID

  • dir : ソース (シャドウではなく) データベース・ディレクトリ

  • glo : グローバル (添え字) 形式のグローバル参照 (先頭の "^" なし)

  • addr : ジャーナル・ファイルでのレコードのオフセット

  • type : レコードのタイプ ("S" = SET、"s" = BITSET、"K" = KILL、"k" = ZKILL)

  • time : レコードのタイムスタンプ

互換モードのシャドウイングでは、フィルタ・ルーチンに渡される pid パラメータおよび timestamp パラメータは必ず値 "" を持ちます。レコードをスキップする場合、フィルタ・ルーチンは 0 を返します。その他の場合、レコードはシャドウによりデジャーナルされます。例えば、以下のようにすることができます。

^SYS("shdwcli","MyShadow","filter")="MyShadowFilter"
MyShadowFilter(pid, dir, glo, type, addr, time) ; 
;skip X* globals 
If $EXTRACT($qs(glo,0))="X" q 0 
Set Msg = pid
Set Msg = Msg _ "," _ dir
Set Msg = Msg _ "," _ glo
Set Msg = Msg _ "," _ type
Set Msg = Msg _ "," _ addr
Set Msg = Msg _ "," _ time
Do ##class(%Library.Device).Broadcast("",Msg) 

q 1

コールインの機能強化

コールインのインクルード・ファイル ccallin.h および mcallin.h は、共通する機能を統合すると共に、ユーザ定義の C および C++ コールイン・モジュールの柔軟性を大幅に向上させるように機能拡張されています。インタフェースの詳細から可能な限り独立して、ユーザのコールイン・モジュールを構築するための定義が追加されています。以下の 2 つの機能によって、インタフェースの選択を管理します。

#define ZF_DLL

ZF_DLL が定義されていない場合、コールイン・モジュールは、Caché エンジンとリンクするように構築されます。定義されている場合、モジュールは、コールバックを使用するダイナミック共有ライブラリとして構築され、コールアウト機能を介して起動されます。これは、cdzf.h で採用されている定義と同じです。

#define CACHE_UNICODE

CACHE_UNICODE が定義されていない場合、関数および引数を処理する文字列は 8 ビット文字として扱われます。定義されている場合、文字列は 16 ビットの Unicode として扱われます。文字列処理関数では、8 ビット (または ASCII) を意味する A 接尾語、または 16 ビット Unicode (またはワイド) を意味するW 接尾語を指定できます。これらの接尾語を指定せずに関数を使用することもできます。接尾語を指定しない場合は、関数が CACHE_UNICODE の定義に従って、"A" 接尾語か"W" 接尾語のいずれかに決定します。

8 ビット Caché へ Unicode コールインする CacheCvtInW() 関数および CacheCvtOutW() 関数を使用して、NLS 変換を可能にする新しい機能が追加されています。これらの関数は、"未実装" エラーを報告する代わりに、Caché エンジンの 8 ビット文字セット範囲内でデータを変換するようになりました。CacheCvtInA() 関数および CacheCvtOutA() 関数 (Unicode Caché へ 8 ビット・コールインするための関数) は、現在は実装されていません。

新しいマクロ USE_CALLIN_CHAR を使用すれば、8 ビット引数のプロトタイプ をさらに改良できます。このマクロでは、これらのプロトタイプを (unsigned char *) ではなく、(char *) として宣言します。

64K ルーチン・バッファのサポート

管理ポータルの ホーム, 構成, 詳細設定 ページで Memory/RoutineBufSize の値を 32 から 64 に変更することで、最大 64K のサイズのルーチンを実行できるようになりました。現在でも既定値および最小値は 32 (32K) ですが、33 から 64 の範囲で値を指定できるようになりました (値は 2K 単位で丸められます)。32 K を超えるルーチンまたはクラス記述子は、2 つのグローバル値として、1 番目のチャンクが現在の ^rOBJ(<routine name>) に、2 番目のチャンクが ^rOBJ(<routine name>,0) に格納されます。

CVENDIAN の機能強化

cvendian データベース・エンディアン変換ユーティリティは、目的のエンディアン・タイプを確立できるように、またはオプションで現在のエンディアン・タイプを変換せずに単に通知するように機能拡張されています。コマンド構文は、以下のとおりです。

cvendian [-option] file1 [file2 ... file8]

option は以下のいずれかになります。

  • -big — データベースをビッグ・エンディアンに変換

  • -little — データベースをリトル・エンディアンに変換

  • -report — データベースのエンディアン・タイプを報告

オプションは短縮して頭文字で表わせます。変換が要求された場合、データベースが既に指定されたエンディアン・タイプであれば、警告メッセージが表示され、それ以上の処理は実行されません。従来の cvendian の呼び出し形式もサポートされています。

オブジェクトの改善

新規の Caché 5.1 オブジェクト機能および強化機能 :

オブジェクトの機能強化

  • 計算フィールドでインデックス指定する新規のオプション

  • 新規のオブジェクト同期化

  • 新規のスタジオ拡張クラスおよびソース・コントロール・フック

  • 新規のストリーム構文

  • 新規の %SwizzleObject クラス

  • 拡張 POPSPEC 構文

  • リレーションシップのパフォーマンスの改善

  • 拡張 VisM OCX

計算フィールドでインデックス指定する新規のオプション

インデックス定義は、CALCULATED および SQLCOMPUTED と定義されたプロパティを参照できるようになりました。プロパティ値の計算には一義性があり、指定されたパラメータのセットに対して必ず同じ値を返すことが必要です。例えば、$Horolog などのように、呼び出されたときに応じて異なる値を返す関数を使用するのは誤りです。計算結果が一義的に決まらないプロパティに対してインデックス指定すると、そのインデックスは正しく維持されません。

このオプションをサポートするために、SQLCOMPUTED として定義されたプロパティが Caché オブジェクトで計算されるようになりました。新しいクラス・メソッドの Compute は、プロパティの Get メソッドによって呼び出されます。Compute メソッドは、フィールド参照用の SQLCOMPUTECODE を走査し、これらの参照をプロパティまたはリテラル値に変換することにより、返り値を生成します。また、プロパティが SQLCOMPUTEONCHANGE も持つ場合、Compute メソッドはプロパティが変更されるたびに呼び出されます。

新規のオブジェクト同期化

この新しい機能によって、Caché ではデータベース間でオブジェクトを同期化することが可能になります。ジャーナリングされたクラスに対するオブジェクト・ファイル・イベント (挿入、更新および削除) はすべて、自動的に記録されます。オブジェクト同期化ユーティリティを利用すると、ジャーナルされたオブジェクト・データをエクスポートし、他のデータベースと同期化することが可能になります。元のデータベースにアクセスしないアプリケーションは、同期化したオブジェクトへの参照を解決できます。

新しいクラスの %SYNC.SyncSetObjectOpens in a new tab によって、オブジェクトを外部化し、ターゲット・データベースに適用することが可能になります。外部化されたオブジェクトから永続オブジェクトへのすべての参照は、GUID (Globally Unique Identifier) 値に変換されます。GUID 値はインポート時に対応するオブジェクトを検索するために使用されます。

もう 1 つのクラスである %SYNC.SyncSetOpens in a new tab には、同期化されているオブジェクトのセットを管理するメソッドが実装されています。同期化セット とは、すべてのオブジェクト参照を解決できることが保証される、外部化されたオブジェクト値のセットです。参照されるオブジェクトが同じ同期化設定状態にあるか、またはターゲット・データベースに既に存在することにより、このオブジェクト参照の解決が保証されます。

新規のスタジオ拡張クラスおよびソース・コントロール・フック

今回のリリースでは、カスタム・メニューおよびユーザ定義のデータ・エントリに対応するメカニズムを搭載した %Studio.Extension クラスを導入することにより、スタジオの柔軟性が向上しています。%Studio.SourceControl クラスは機能拡張されたソース・コントロール・フックを提供して、ソース・コントロール・システムに対するカスタマイズされたチェックインおよびチェックアウトを可能にします。

スタジオで、サーバとの対話を必要とする操作をユーザが実行しようとすると、UserAction メソッドが呼び出されるようになりました (例えば、ソース・コントロール内のドキュメントをチェックアウトせずに編集しようとした場合など)。

UserAction (Type, Name, InternalName, SelectedText, .Action, .Target, .Msg)

Type オプションは以下のとおりです。

  • 選択されたサーバ定義のメニュー項目

  • スタジオでのその他のアクション

Name は、Type がメニュー項目である場合はメニュー項目名となり、そうでない場合は以下のオプションのいずれかを示します。

  • ユーザが、ソース・コントロール内でロックされたドキュメントを変更しようとした

  • ユーザが新規ドキュメントを作成した

  • ユーザがドキュメントを削除した

InternalName は、このアクションの対象となるドキュメントの名前です。

SelectedText には、フォーカスのあるドキュメント内で選択されたテキストが格納されます。

Action は、スタジオが実行する以下のアクションを返します。

  • 何もしない (ソース・コントロールから項目をチェック・アウトするなど、このメソッドによって何らかのアクションが実行される場合もありますが、スタジオはユーザ入力を要求しません)。

  • [はい]、[いいえ]、[キャンセル] の各ボタンで構成される既定のスタジオ・ダイアログを表示する。このダイアログ用のテキストは、Target 返り引数に格納されます。

  • CSP テンプレートを実行する。Target はテンプレートの開始ページの名前です。テンプレートには、現在のドキュメント名、選択されたテキスト、プロジェクト名、およびネームスペースが渡されます。

  • クライアント上で EXE を実行する。Target はクライアント・マシン上の実行可能ファイルの名前です。

  • Target 内のテキストを、現在のドキュメントの現在の選択位置に挿入します。

  • スタジオは Target にリストされたドキュメントを開きます。

スタジオで表示するカスタム・メニューを定義できます。スタジオは、MainMenus および MenuItems の 2 つのクエリを実行して、初めてネームスペースに接続したときにメニューを取得します。MainMenus はトップ・レベルのメニュー名のリストを返します。このトップ・レベル・メニューを選択した後に、MenuItems を使用して、特定のメニュー上にある項目のリストを取得します。MainMenus は、通常のメニュー、またはすべてのコンテキスト・メニューに追加されるコンテキスト・サブメニューのいずれかです。クエリでは、これらの引数に基づいてメニューを変更する場合、現在のドキュメント名および選択されたテキストが渡されます。

既定では、ソース・コントロール・クラスはこれらのクエリを %Studio.Extension.BaseOpens in a new tab から継承し、ここでこれらのクエリは事前に作成されたテーブルに対する SQL クエリとして定義されます。これらのテーブルにデータをロードするには、Menu という名前の XData ブロックをソース・コントロール・クラス内に定義します。ソース・コントロール・クラスをコンパイルすると、このデータが自動的にロードおよび使用されます。ソース・コントロール・サブクラス内で定義されたクエリは、変更することも、完全にカスタマイズすることもできます。MenuItems クエリからデータが返されるとき、各メニュー名によってソース・コントロール・クラス内の OnMenuItem メソッドへの呼び出しが生成されます。このソース・コントロール・クラス内で、ユーザはこのメニュー項目を有効化および無効化できます。このようにして、カスタム・クエリを記述することなく、メニューを簡単に修正することが可能になります。

新規のストリーム構文

現在のストリーム・クラスに対するクラス階層は、%Stream.ObjectOpens in a new tab が最上位クラスとなるように変更されています。この変更によって、ストリームの実行時動作が変化することはありません。

旧バージョンの Caché では、binarystream または characterstream のコレクション値を使用して、ストリーム・プロパティを type = %Stream として定義することが必要でした。ストリーム・プロパティは、実際のストリーム・クラスをタイプとして指定することで定義できるようになり、binarystream および characterstream のコレクション・キーワード値は使用されなくなりました。ストリーム・クラスは、classtype = stream として宣言されます。この宣言は、新しいクラス %Stream.ObjectOpens in a new tab を拡張するクラスに対しては自動的に行われます。下位互換性を確保するために、%Library.GlobalCharacterStreamOpens in a new tab%Library.GlobalBinaryStreamOpens in a new tab%Library.FileCharacterStreamOpens in a new tab、および %Library.FileBinaryStreamOpens in a new tab の各クラスは、新しい表記を使用するように変更され、すべての既存のストリーム・データに対して使用されます。

詳細は、"Caché オブジェクトの使用法" の "ストリーム" の章を参照してください。

新規の %SwizzleObject クラス

新しいクラスの %SwizzleObjectOpens in a new tab は、%PersistentOpens in a new tab%SerialObjectOpens in a new tab の両方の唯一のプライマリ・スーパークラスとなりました。この新規クラスの目的は、スウィズリング・インタフェースを定義し、%PersistentOpens in a new tab%SerialObjectOpens in a new tab に共通するインタフェースの部分を実装することです。

詳細は、%Library.SwizzleObjectOpens in a new tab クラスのドキュメントを参照してください。

拡張 POPSPEC 構文

POPSPEC の構文は、SQL テーブル名および SQL 列名を指定できるように拡張されました。これらを指定すると、Populate() メソッドはダイナミック・クエリを構築して、テーブルから列の重複しない値を返します。要求された個数の値が列の重複しない値の群からランダムに選択され、値のセットに配置されます。すると、結果的に得られた値のセットからプロパティに、ランダムに値が割り当てられます。

詳細は、"Caché データ生成ユーティリティ" を参照してください。

リレーションシップのパフォーマンスの改善

新しいメモリ内インデックスを使用し、リレーションシップの既存の項目の oref と oid を追跡することにより、リレーションシップのメモリ内パフォーマンスが大幅に改善されました。従来、新しい項目が ( Insert メソッドを使用するか、Relate メソッドを介して間接的に) リレーションシップに挿入されたときには、重複項目の挿入を避けるためにリレーションシップ全体がスキャンされていました。リレーションシップにおける oref と oid のインデックスを保持することで、多数の項目に対しても重複項目をチェックする負荷は極めて低く維持されます。

使用するパーティション・メモリの容量は少なくなり、速度は大幅に高速化 (1000 項目の 2 度目の挿入で 94 倍) し、%Save に要する時間も短縮化されます。リレーションシップ内の項目が少ない場合、追加のメモリ内インデックスを維持することによるパフォーマンスの低下はそれほど大きくありませんでした。

拡張 VisM OCX

今回のリリースでは、セキュリティ・アップグレード、マルチスレッドのサポート、改善されたエラー処理などの機能拡張を特徴とする新バージョンの Caché ダイレクト・コントロール (VISM.OCX) が装備されています。

言語の改善

Caché 5.1 ObjectScript の新機能と強化機能

  • 実行時エラー報告の改善

  • 新規の関数 $FACTOR

  • 新規の関数 $LISTNEXT$LISTTOSTRING、および $LISTFROMSTRING

  • 新規の特殊変数 $ROLES および $USERNAME

  • 新規の関数 $ZUTIL(62,1)

  • 新規のシステム構成関数 $ZUTIL(69)

  • 新規の関数 $ZUTIL(158)

  • 新規の関数 $ZUTIL(186)

  • 新規の関数 $ZUTIL(193)

  • 新規のエラー・トラップ構文

  • さらに効率的なコード生成

  • Unicode 対応のパターン・マッチング “E”

  • 高速化された MERGE コマンド

以下の新規の言語バインディング

  • 新規の Perl バインディング

  • 新規の Python バインディング

  • 新規の ActiveX バインディング

実行時エラー報告の改善

多くの実行時エラーで追加情報が報告されるようになりました。例えば、"<UNDEFINED>" エラーでは、未定義変数の名前が報告されるようになりました。

エラー情報はシステム変数 $ZERROR に格納されますが、このときに従来よりも詳細な情報が返されるようになりました。例えば、定義されていない変数をルーチンで使用しようとすると、$ZERROR には未定義変数の名前が格納されます。以前のバージョンの Caché では、$ZERROR には以下のような値が格納されている場合がありました。

<UNDEFINED>zMethodName^Pkg.Class.1

バージョン 5.1 では、以下のような値が格納されます (" *someinfo" を追加)。

<ERRCODE>Tag^Routine+line *someinfo

この変更の結果、エラー処理ルーチンにおいて、$ZERROR の文字列の形式に関する何らかの暗黙の想定を行っていた場合は、以前と同様に動作させるために再設計が必要となることがあります。詳細は、"Cache 移行ガイド" および "Caché ObjectScript リファレンス" の "$ZERROR" 特殊変数を参照してください。

新規の関数 $FACTOR

$FACTOR は、数値をビット文字列に変換する、バージョン 5.1 の新規 ObjectScript 関数です。主にビットスライス・インデックスの作成に使用します。詳細は、"Caché ObjectScript リファレンス" の "$FACTOR" 関数を参照してください。

新規の関数 $LISTNEXT、$LISTTOSTRING および $LISTFROMSTRING

Caché 5.1 では、リスト構造を処理するための新しい 3 つの関数 $ListNext$ListToString$ListFromString が追加されました。

$ListNext(list, ptr, val) を利用すると、リスト構造を極めて高速に ($LIST を使用したループ実行の最大 400 倍) 検索することが可能になります。

$ListNext を初めて呼び出す前に、ptr を 0 に初期化する必要があります。呼び出しを行うたびに、ptr には list における次の要素の位置 (リストの末尾に到達した場合は 0) が格納され、val にはその位置にある要素の値 (その位置に値が存在しない場合は未定義) が格納されます。$ListNext は、他のリスト要素を検出した場合には 1 を返し、リストの末尾に存在する場合は 0 を返します。

$ListToString(list[,delim])list を受け取り、要素を delim (既定では ",") で区切られた文字列として返します。

$ListFromString(string[,delim]) は、delim (既定では ",") で区切られた string を受け取り、各部分をリストとして返します。

詳細は、"Caché ObjectScript リファレンス" の "$LISTNEXT"、"$LISTTOSTRING"、および "$LISTFROMSTRING" の各関数を参照してください。

新規の特殊変数 $ROLES および $USERNAME

Caché 5.1 では、$ROLES 特殊変数には、ユーザに現在割り当てられているセキュリティ・ロールがリストされます。$USERNAME 特殊変数には、現在のプロセスのユーザ名がリストされます。詳細は、"Caché ObjectScript リファレンス" の "$ROLES" および "$USERNAME" の各特殊変数を参照してください。

新規の関数 $ZUTIL(62,1)

$ZUTIL(62,1) 関数は、ObjectScript コードの行に対する構文チェックを実行します。エラーの文字位置およびエラー・メッセージのテキストを返します。詳細は、"Caché ObjectScript リファレンス" の $ZUTIL(62.1) 関数を参照してください。

新規のシステム構成関数 $ZUTIL(69)

Caché 5.1 では、システム全体の構成関数 $ZUTIL(69,19)$ZUTIL(69,21)$ZUTIL(69,31)$ZUTIL(69,35)$ZUTIL(69,37)$ZUTIL(69,44)$ZUTIL(69,49)$ZUTIL(69,60) が追加されました。

また Caché 5.1 では、小文字の “e” を指数記号として解釈するかどうかを制御する、新しい $ZUTIL(69,63) 関数および $ZUTIL(68,63) 関数がサポートされています。

詳細は、"Caché ObjectScript リファレンス" の $ZUTIL(69) 関数を参照してください。

新規の関数 $ZUTIL(158)

$ZUTIL(158) 関数を使用すると、インストールされたプリンタの数および指定したプリンタのパス名が取得できます。詳細は、"Caché ObjectScript リファレンス" の $ZUTIL(158) 関数を参照してください。

新規の関数 $ZUTIL(186)

$ZUTIL(186) 関数を使用すると、ターミナル・プロンプトの一部として表示される情報を指定できます。詳細は、"Caché ObjectScript リファレンス" の $ZUTIL(186) 関数を参照してください。

新規の関数 $ZUTIL(193)

$ZUTIL(193) 関数は UTC 値およびローカル時刻値を相互変換します。詳細は、"Caché ObjectScript リファレンス" の $ZUTIL(193) 関数を参照してください。

新規のエラー・トラップ構文

このバージョンの Caché には特殊な構文が実装されています。この構文を使用すると、エラー・トラップでプログラム・スタックから以前に構築されたエラー・トラップに制御を移すことが可能になります。この構文は、ZTRAP $ZERROR のようになります。このコマンドは、エラー・トラップでレベルが検出されるまでプログラム・スタックからエントリをポップ・オフします。次にそのエラー・トラップは、$ZERROR および $ECODE を変更せずに実行されます。

このコマンドは、新しい形式のプロシージャでは動作しなくなった 2 つのコマンド ZQUIT 1 GOTO @$ZTRAP に代わるものです。この新しいコマンド構文は、プロシージャにも従来の形式のサブルーチンにも使用できます。以前のエラー・トラップに制御を渡す従来の形式は、従来の形式のサブルーチンでは引き続き動作します。ZQUIT コマンドがプロシージャ内で発行された場合には、<COMMAND> エラーが発生するようになりました。

ZQUIT コマンドは 5.1 の時点で旧式のものなので、新規のプログラミングでは使用しないようにします。

さらに効率的なコード生成

CacheBasic コンパイラには、非常に軽量で高速なコードを生成する改良アルゴリズムが採用されました。

Unicode 対応のパターン・マッチング “E”

従来バージョンの Caché では、パターン・マッチ演算子に使用するオプションは 8 ビット文字と仮定されていました。文字列に $CHAR(255) を超える Unicode 文字が存在する場合には、このような仮定は “E” パターン (すべての文字に一致) が失敗する原因となっていました。

Caché 5.1 では、“E” パターンはすべての文字に一致します。

高速化された MERGE コマンド

MERGE コマンドは、2 つのローカル変数をマージするときに、より高速で効率的になりました。

新規の Perl および Python バインディング

Caché の Perl および Python のバインディングでは、Perl アプリケーションまたは Python アプリケーションの内部から Caché オブジェクトを簡単に直接操作することが可能になります。これらのバインディングを使用することで、バインディング・アプリケーションで、Caché 上のデータベースへの接続の確立、データベース内のオブジェクトの作成とオープン、オブジェクト・プロパティの操作、オブジェクトの保存、オブジェクト上のメソッドの実行、およびクエリの実行が可能になります。Caché のすべてのデータ型がサポートされています。

詳細は、"Caché での Perl の使用" および "Caché での Python の使用" を参照してください。

ActiveX バインディングの改善

Caché 5.1 では、新しいバージョンの Caché ActiveX バインディング、つまり CacheActiveX.dll が用意されています。内部的には、この新しいバージョンは Caché C++ バインディングを使用して、Caché サーバにオブジェクト・レベルでアクセスします。この新しいバインディングには、以下の利点があります。

  • クライアント/サーバ・セキュリティ・モデルへのアクセスが Caché 5.1 の内部で利用可能になります (Kerberos 認証を使用する機能など)。

  • さらに高度なオブジェクト・キャッシュにより、場合によってパフォーマンスが向上します。

この新しい DLL は、従来の CacheObject.dll と機能的に互換性を実現するように最大限の努力がなされましたが、100% バイナリ互換ではありません。

Caché では、既存のアプリケーションとの完全な互換性を維持するため、従来の CacheObject.dll と新しい CacheActiveX.dll という 2 種類の ActiveX バインディングがインストールされます。既定では、既存のアプリケーションは引き続き従来の CacheObject.dll を使用します。新しいバインディングを使用するには、この新しい DLL を参照するように既存のアプリケーションを変更し、アプリケーションが想定どおり動作することを確認する必要があります。

SQL の改善

新規の Caché 5.1 SQL 機能および強化機能 :

新機能

  • 新規の SQL/XML サポート関数

  • SAVEPOINT : 新規のトランザクション処理機能

  • CREATE TABLE : 新規の IDENTITY キーワード

  • DROP VIEW : 新規の CASCADE キーワード

  • INSERT : 新規の DEFAULT VALUES 節

  • 新規の RowId Counter Validation オプション

  • 新規のクエリ・オプティマイザ・プランの検証

SQL の機能強化

  • JDBC 3.0 のサポート

  • GRANT コマンドおよび REVOKE コマンドの変更

  • CREATE USER コマンドの変更

  • サブクエリの平坦化

  • 外部キー参照に対する拡張されたロック動作

  • READONLY テーブルおよびフィールド

  • SQLCODE の変更

  • %%CLASSNAMEQ および %%TABLENAME のサポート

  • Oracle とのインポート互換性を実現する CREATE BITMAP INDEX のサポート

  • ミリ秒単位の拡張されたサポート

  • 日付/時刻関数の機能強化

新規の SQL/XML サポート関数

5.1 では、“flat” リレーショナル・クエリを階層型 XML ドキュメントに変換する新規の組み込み SQL 関数のコレクションが実装されています。HTML の生成を必要とするアプリケーション・プログラムや、XML 形式でのデータのエクスポートを必要とするアプリケーション・プログラムでは、業界で広範にサポートされる (ANSI/ISO SQL-2003 標準) 汎用性と移植性に優れたインタフェースを新たに使用できます。

以下の SQL/XML 関数が利用可能です。

  • XmlElement – オプションの属性を指定して、<tagName>body</tagName> の形式で XML 要素を作成します。XmlElement は、連結された複数の値を格納できる、タグ付けされた要素を作成します。

  • XmlAttributes – XML 要素の属性を指定します。XmlAttributesXmlElement 関数の内部でのみ使用できます。

  • XmlConcat – 2 つ以上の XML 要素を連結します。

  • XmlAgg – 列のデータ値を連結する集約関数です。

  • XmlForest – 指定した項目ごとに個別の XML 要素を作成します。XmlForest では、他の要素の内部で入れ子にされた複数の要素を指定するための便利な省略表現が利用できます。ただし、NULL である要素のインスタンスは省略されます。

詳細は、"Caché SQL リファレンス" の "XMLELEMENT"、"XMLAGG"、"XMLCONCAT"、および "XMLFOREST" を参照してください。

SAVEPOINT の新機能

バージョン 5.1 の Caché には、複数のトランザクション・レベル ("入れ子になったロールバック" を参照) が導入され、このトランザクション・レベルを利用すれば、その時点までで完了した作業をまったく失うことなく、トランザクションの一部をロールバックできます。Caché SQL では、この機能を利用する次の標準 SQL コマンドが新たに用意されています。

  • SAVEPOINT <savepointName> — トランザクション内部にセーブポイントを設定します。

  • ROLLBACK TO SAVEPOINT — 最新のセーブポイントにロールバックします。

  • ROLLBACK TO SAVEPOINT <savepointName> — 指定したセーブポイントにロールバックします。

  • COMMIT – $TLEVEL > 1 のときに、現在のサブ・トランザクションのみをコミットします。

詳細は、"Caché SQL リファレンス" の "SAVEPOINT" を参照してください。

CREATE TABLE : 新規の IDENTITY キーワード

Caché SQL では、システム生成の数値を含んだ列を CREATE TABLE 文で定義する機能がサポートされるようになりました。IDENTITY 列では負でない整数が列の値となります。この値はシステムで生成されるので、INSERT 文や UPDATE 文でユーザが割り当てることはできません。ただし、SELECT * を使用して表示することはできます。構文は以下のとおりです。

CREATE TABLE <tablename> ( 
   [ other-table-elements , ] 
   <columnname> [ <datatype> ] IDENTITY
   [ UNIQUE | NULL | NOT NULL | 
      DEFAULT [(]<default-spec>[)] | 
      [COLLATE] <sqlcollation> | 
      %DESCRIPTION <literal> 
   ] 
[ , other-table-elements ] 
) 

IDENTITY 列は常に、NULL でない固有の値を持つ INTEGER データ型です。データ型および制約を指定することはできますが、Caché ではそれらは無視されます。

この構文は、Microsoft SQL Server および Sybase の構文と互換性が確保されています。

詳細は、"Caché SQL リファレンス" の "CREATE TABLE" を参照してください。

DROP VIEW : 新規の CASCADE キーワード

Caché SQL では、あるビューを参照する他の任意のビューも削除することができる、ビューのカスケード削除機能がサポートされるようになりました。新規のキーワードは、CASCADE および RESTRICT です。RESTRICT キーワードが既定となり、動作は従来の DROP VIEW と同じです。

詳細は、"Caché SQL リファレンス" の "DROP VIEW" を参照してください。

INSERT : 新規の DEFAULT VALUES 節

Caché SQL では、テーブルに行を挿入するときに既定のフィールド値を使用できるようになりました。構文は以下のとおりです。

INSERT INTO <tablename> DEFAULT VALUES 

この文は、1 つの行をテーブルに挿入します。各フィールドが既定値を持つ場合、その値が列に割り当てられます。既定値を持たないフィールドは、その行では NULL になります。

詳細は、"Caché SQL リファレンス" の "INSERT" を参照してください。

新規の RowId Counter Validation オプション

新しい構成オプションによって、システムが割り当てた新しい ID 値を検証できるようになりました。このオプションは、^%SYS("dbms","validate system-assigned id") を 1 に設定すると有効になります。通常、このような検証は必要ありませんが、ユーザが値を手動で変更した場合、あるいはオブジェクト・ファイラまたは SQL ファイラを使用せずにオブジェクトをテーブルに挿入した場合には、ID が無効になっている可能性があります。また、その他のシステム・リカバリ・エラーによって、このような状態が発生することもあります (ジャーナル・ファイルの不正なリカバリ、ディスク障害など)。

このオプションを有効にすると、テーブル・コンパイラは、ID 値の挿入に関する一意性チェックを生成します。検証で問題が検出されると、SQLCODE=-119 が呼び出し元に返され、メッセージがコンソール・ログに書き込まれます。Console.log ファイルにメッセージが書き込まれ、ファイラから返される前に、ユーザ定義のルーチン ^%ZOIDERROR が呼び出されます。このエラーが発見された場合は、コンソール・ログを確認することが重要です。

このエラーが報告された場合は、ID カウンタをデータとの同期状態に戻すことが必要になります。障害が発生するたびにシステム ID カウンタがインクリメントされるため、時間が経過すれば問題が自然に解決する可能性があります。エラーが報告された時点では、データ自体が正しくない場合があるため、カウンタが間違っているとは限りません。カウンタがどのようにして不正になったかに関しては、ユーザ自身で判断します。

新規のクエリ・オプティマイザ・プランの検証

TestSQLScript に基づいた回帰テストにおいて、クエリ・プランの安定性を容易に検証することが可能になりました。%UnitTest.TestSQLScript でクラス・パラメータ SHOWPLAN=1 を定義すると、クエリ・オプティマイザ・プランが出力ファイルに書き込まれます。

JDBC 3.0 のサポート

Cache 5.1 は JDK 1.4 および JDBC 3.0 をサポートしています。すべての必須機能および大部分のオプション機能がサポートされています。

GRANT コマンドおよび REVOKE コマンドの変更

Caché のセキュリティはバージョン 5.1 で大幅に改善されているため、SQL GRANT コマンドおよび REVOKE コマンドは現在、以下の構文形式をサポートしていません。

  • GRANT ACCESS ON namespace

  • GRANT %THRESHOLD number

  • %GRANT_ANY_PRIVILEGE、%CREATE_USER、%ALTER_USER、%DROP_USER、%CREATE_ROLE、%GRANT_ANY_ROLE、および %DROP_ANY_ROLE の各特権

GRANT コマンドおよび REVOKE コマンドは、次の追加オプションをサポートしています。

  • ロールにロールを付与することによる、ロールの階層構造の作成

  • EXECUTE オブジェクト特権

  • テーブルおよびビューに加えてストアド・プロシージャも対象とした、オブジェクト特権の付与

  • アスタリスク (*) を使用することによる、すべてのストアド・プロシージャへの EXECUTE オブジェクト特権の付与

詳細は、"Caché SQL リファレンス" の "GRANT" および "REVOKE" を参照してください。

CREATE USER コマンドの変更

5.1 では、CREATE USER を発行しても、作成者が保持する特権にかかわらず、ユーザにロールや特権が動的に付与されることはありません。特権およびロールは、GRANT コマンドを使用して新規ユーザに割り当てる必要があります。

詳細は、"Caché SQL リファレンス" の "CREATE USER" を参照してください。

サブクエリの平坦化

多くの場合、SQL エンジンは特定のタイプの SQL クエリに対して “平坦化” を試行するようになりました。つまり、クエリはサブクエリを含まない等価な形式に内部で変換されます。多くの場合、SQL オプティマイザではこの等価形式の方がより容易に認識され、より優れた実行プランが生成されます。

外部キー参照に対する拡張されたロック動作

テーブル・ファイルの処理中のロック動作は、以下のように変更されています。

  • SQL DELETE の実行では、すべての外部キー参照について、参照されるテーブルの行に対する長期間の共有ロックが取得されます。この行は、トランザクションの終了までロックされています。これにより、参照される行は、SQL DELETE のロールバックより前に変更されることがなくなります。

  • SQL INSERT の実行では、すべての外部キー参照について、参照されるテーブルの参照される行に対する長期間の共有ロックが取得されます。この行は、トランザクションの終了までロックされています。これにより、参照一貫性をチェックしてから INSERT トランザクションが終了するまでの間に、参照されている行が変更されないようになります。

  • SQL UPDATE の実行では、更新中のフィールド値を持つすべての外部キー参照について、参照されるテーブルの参照されていた古い行に対する長期間の共有ロックが取得されます。この行は、トランザクションの終了までロックされています。これにより、参照される行は、SQL UPDATE のロールバックより前に変更されることがなくなります。

  • SQL UPDATE の実行では、変更中のすべての外部キー参照について、参照されるテーブルの参照される新しい行に対する長期間の共有ロックが取得されます。この行は、トランザクションの終了までロックされています。これにより、参照一貫性をチェックしてから UPDATE トランザクションが終了するまでの間に、参照されている行が変更されないようになります。

READONLY テーブルおよびフィールド

このバージョンより前の Caché では、読み取り専用テーブルに対して INSERT、UPDATE、または DELETE を実行しようとしても、その文を実行するまではエラーが発生することはありませんでした。このバージョンでは、コンパイル中に SQLCODE=-115 エラーが発生します。

プロパティが読み取り専用に定義されている場合、対応する SQL テーブル内のフィールドも読み取り専用に定義されるようになりました。READONLY フィールドは、InitialExpression または SQL 計算コードでのみ定義でき、SQL 文で明示的に挿入または更新することはできません。フィールドの値 (NULL 値でも) に対して INSERT または UPDATE を実行しようとすると、SQLCODE=-138 エラー ("読み取り専用フィールドに値を INSERT および UPDATE できません") が発生します。

SQLCODE の変更

以下の SQLCODE エラー・コードが 5.1 で追加されています。

  • -129 : このエラーは、Caché のロケール設定を無効な値に設定しようとすると発生します。詳細は、"Caché SQL リファレンス" の "SET OPTION" を参照してください。

    SQLCODE = -129 : SET OPTION ロケール・プロパティの値が不正です。

  • -138 : このエラーは、読み取り専用フィールドを参照する INSERT または UPDATE をコンパイルしようとすると発生します。詳細は、"Caché SQL リファレンス" の "INSERT" を参照してください。

    SQLCODE = -138 : 読み取り専用フィールドのため、値を INSERT または UPDATE できません

  • -142 : このエラーは、ビュー定義での列数とクエリでの列数の不一致が CREATE VIEW コマンドに存在する場合に発生します。詳細は、"Caché SQL リファレンス" の "CREATE VIEW" を参照してください。

    SQLCODE = -142 : View-Column リストと View Query の SELECT 節の要素数が一致しません。

  • -308 : このエラーは、1 つのテーブルに対して複数の IDENTITY フィールドを定義しようとすると発生します。詳細は、"Caché SQL リファレンス" の "CREATE TABLE" を参照してください。

    SQLCODE = -308 このテーブルには既に ID 列が定義されています

  • -316 : このエラーは、外部キーが存在しない列を参照すると発生します。

    SQLCODE = -316 外部キーが参照しているキー/列の集合は存在しません

  • -321 : このエラーは、他のビューから参照されているビューを削除しようとすると発生します。詳細は、"Caché SQL リファレンス" の "DROP VIEW" を参照してください。

    SQLCODE = -321 ビューを DROP できません - 1 つ以上のビューがこのビューを参照しています

  • -356 および 357 : これら 2 つのエラーは、ユーザ定義の SQL 関数を使用しようとすると発生する可能性があります。

    SQLCODE = -356 : SQL 関数 (ストアド・プロシージャ関数) が値を返すように定義されていません

    SQLCODE = -357 : SQL 関数 (ストアド・プロシージャ関数) が関数プロシージャとして定義されていません

  • -375 : このエラーは、確立されていないセーブポイント、または既にロールバックされているセーブポイントにロールバックしようすると発生します。

    SQLCODE = -375 確立されていないセーブポイントに ROLLBACK できません

  • -417 : このエラーは、ログインに失敗したときに発生します。通常、ユーザ名およびパスワードのチェックで失敗したことが原因です。ユーザ名に特権がない場合にも発生することがあります。

    SQLCODE = -417 Cache セキュリティ・エラー

  • -431 : このエラーは、基本となる引数タイプがオブジェクト・タイプである場合に、リテラルをストアド・プロシージャのパラメータとして渡そうとすると発生します。

    SQLCODE = -431 ストアド・プロシージャのパラメータのタイプが一致しません

  • -459 : このエラーは、Kerberos を使用して接続しようとして、セキュリティ認証に失敗すると発生します。考えられる理由には、Kerberos セキュリティの実行可能ファイルである cconnect.dll が見つからないか、ロードできないこと、または入力した Kerberos 認証が原因で接続が拒否されたことなどがあります。

    SQLCODE = -459 Kerberos 認証に失敗しました

以下の旧式の SQLCODE 値は削除されています。

SQLCODE -340、-341、-342、-343、-344、-345、-346、-347

SQLCODE 値の完全なリストは、"Caché エラー・リファレンス" の “SQLCODE 値とエラー・メッセージ” の章を参照してください。

%%CLASSNAMEQ および %%TABLENAME のサポート

Caché SQL では、以下の位置において、SQL 固有の COS コードのクラス定義で {%%CLASSNAMEQ} および {%%TABLENAME} 参照を新たにサポートしています。

  • SQL 計算フィールド・コード

  • SQL トリガ・コード

  • %CacheSQLStorage 条件付きマップの条件式

{%%CLASSNAMEQ} (大文字と小文字の区別なし) は、SQL テーブル定義を投影するクラスの名前を引用符で囲んだ文字列に変換されます。

{%%TABLENAME} (大文字と小文字の区別なし) は、テーブルの修飾名を引用符で囲んだ文字列に変換されます。

例えば、User.PersonOpens in a new tab クラス内に以下のトリガがあるとします。

Trigger AfterInsert1 [ Event = INSERT, Order = 1, Time = AFTER ] 
{ 
Set ^Audit("table",{%%TABLENAME},$j,"AFTER INSERT TRIGGER")=1 
Set ^Audit("class",{%%CLASSNAMEQ},$j,"AFTER INSERT TRIGGER")=1 
} 

User.EmployeeUser.PersonOpens in a new tab を拡張すると、次の SQL トリガ・コードが SQLUSER.EMPLOYEE テーブルの AFTER INSERT トリガとして引き出されます。

Set ^Audit("table","SQLUser.Employee",$j,"AFTER INSERT TRIGGER")=1 
Set ^Audit("class","User.Employee",$j,"AFTER INSERT TRIGGER")=1 

Oracle とのインポート互換性を実現する CREATE BITMAP INDEX のサポート

$SYSTEM.SQL.DDLImport() または $SYSTEM.SQL.Oracle() を使用して Oracle SQL スクリプト・ファイルをロードする場合、Caché SQL では CREATE BITMAP INDEX 文を認識できるようになりました。

ミリ秒単位の拡張されたサポート

Caché SQL は、すべての日付/時刻関数において秒の小数部をサポートするようになりました。DATEADDDATEDIFFDATENAME、および DATEPART の各関数は、"ms" または "ミリ秒" の datepart をサポートします。ODBC スカラ関数の {fn TIMESTAMPADD()} および {fn TIMESTAMPDIFF()} は、SQL_TSI_FRAC_SECOND を新たにサポートしています。

詳細は、"Caché SQL リファレンス" の "DATEPART" を参照してください。

日付/時刻関数の機能強化

  • SQL スカラ関数の TO_DATE および TO_CHAR は、%Library.TimeStamp 論理値を入力として受け取るようになりました。さらに、TimeStamp 値をサポートするために、次の形式のコードが追加されています。

    • HH – 時間 (1 ~ 12)

    • HH12 – 時間 (1 ~ 12)

    • HH24 – 時間 (0 ~ 23)

    • MI – 分 (0 ~ 59)

    • SS – 秒 (0 ~ 59)

    • SSSSS – 午前 0 時から経過した秒数 (0 ~ 86388)

    • AM – 午前/午後の指定子

    • PM – 午前/午後の指定子

  • TO_DATE() 関数の既定形式値の構成を設定する機能が新たに用意されています。既定の形式は従来どおりの "DD MON YYYY" ですが、以下のコマンドを使用すると変更できます。

    Do $SYSTEM.SQL.SetToDateDefaultFormat(<value>)

    または

    Do SetToDateDefaultFormat^%apiSQL(<value>)

    例えば、以下のようにすることができます。

    Do $SYSTEM.SQL.SetToDateDefaultFormat("YYYY-MM-DD HH24:MI:SS")

    TO_DATE() の既定形式に対する現在の設定は、以下のようにして表示できます。

    Do CurrentSettings^%apiSQL

    または

    Do $SYSTEM.SQL.CurrentSettings()

  • 次の CAST 操作および CONVERT CONVERT 操作が、%FilemanDate および %FilemanTimestamp に対してサポートされるようになりました。

    • CAST (<%FilemanDate value> AS CHAR)

    • CAST (<%FilemanDate value> as DATE)

    • CAST (<%FilemanDate value> as TIMESTAMP)

    • CAST (<%FilemanDate value> as VARCHAR)

    • {fn CONVERT(<%FilemanDate value>, SQL_DATE)}

    • {fn CONVERT(<%FilemanDate value>, SQL_TIMESTAMP)}

    • {fn CONVERT(<%FilemanDate value>, SQL_VARCHAR)}

    • CAST (<%FilemanTimeStamp value> AS CHAR)

    • CAST (<%FilemanTimeStamp value> as DATE)

    • CAST (<%FilemanTimeStamp value> as TIME)

    • CAST (<%FilemanTimeStamp value> as TIMESTAMP)

    • CAST (<%FilemanTimeStamp value> as VARCHAR)

    • {fn CONVERT(<%FilemanTimeStamp value>, SQL_DATE)}

    • {fn CONVERT(<%FilemanTimeStamp value>, SQL_TIME)}

    • {fn CONVERT(<%FilemanTimeStamp value>, SQL_TIMESTAMP)}

    • {fn CONVERT(<%FilemanTimeStamp value>, SQL_VACHAR)}

接続性の改善

新規の Caché 5.1 接続性機能および強化機能 :

  • 新規の ECP クラスタ・サポート

  • 新規の SNMP サポート

  • 新規の LDAP クライアント

  • 新規の Mac OS X サーバ・サポート

新規の ECP クラスタ・サポート

エンタープライズ・キャッシュ・プロトコル (ECP) は、OpenVMS および Tru64 UNIX® における共有ディスク・クラスタ構成でもサポートされるようになりました。

ECP クラスタのフェイルオーバー・クラスタとの違いは、以下のとおりです。

  • フェイルオーバーがより高速

  • 共有ディスクが有効

  • ネットワーク再構成が不要

  • 修復、アップグレード、メンテナンスなどに対応するクラスタ・メンバのロール・インおよびロール・アウト

  • すべてのクラスタ・メンバが稼動

特徴

  • ECP クラスタ・サーバは、以下のように、より高水準な可用性を実現します。

  • フェイルオーバー間に、ロックおよびトランザクションが保存されます。

  • クラスタ・マスタのみが ECP クライアントにサービスを提供します。

  • クラスタ・メンバは他のアプリケーションにも使用できます。

クラスタ化されたシステムには、ECP を使用することを強くお勧めします。ECP は、DCP などの従来のネットワーキング手法よりも大幅に進歩したプロトコルです。クラスタ・メンバ間の通信に現在 DCP を使用している場合、ECP に変更することで、パフォーマンス、信頼性、可用性、およびエラー・リカバリが向上します。

新規の SNMP サポート

さまざまなシステム管理ツールおよびフレームワークで、Caché の監視を可能にするために、簡易ネットワーク管理プロトコル (SNMP) のサポートが追加されました。%SYSTEM.MonitorTools.SNMP クラスによって、SNMP エージェントおよび SNMP 関数の制御が可能になります。このクラスには、Monitor Framework で記述した用途に基づいてカスタム MIB ファイルを生成する CreateMIB() メソッドに加えて、Caché SNMP エージェントを開始および停止するメソッドが含まれています。

詳細は、"Caché 監視ガイド" の "SNMP を使用した Caché の監視" を参照してください。

新規の LDAP クライアント

LDAP (Lightweight Directory Access Protocol) サーバへの、プログラムによるアクセスが追加されました。詳細は、%Net.LDAP.Client.SessionOpens in a new tab クラス・ドキュメントを参照してください。

新規の Mac OS X サーバ・サポート

このバージョンの Caché は、Mac OS X 10.3 上でネイティブにインストールおよび実行できます。インストール・キットは、PackageMaker で作成された標準の ".dmg" ディストリビューションです。

サーバとしてだけでなく、以下のクライアント・コンポーネントとしての Mac OS X に対してサポートが追加されました。

  • ODBC

  • JDBC

  • オブジェクト

  • Apache の CSP ゲートウェイ

またネイティブな Objective-C バインディングも利用できます。

Caché 5.1 アップグレードのチェックリスト

目的

この章では、Caché 5.1 の機能のうち、このバージョンで変更されたために既存のシステムの管理、運用、または開発の作業に影響を及ぼすものを取り上げます。

背景

Caché バージョン 5.1 では、以前のバージョンに比べて、機能性およびセキュリティの点で大幅な改善がなされています。このような改善を実現するにあたって、可能な限り互換性を維持して改善を進めるという目標が設定されていました。ただし、システム管理ポータルなどの多くの機能において、以前のリリースでの機能に置き換わる新たなメカニズムが採用されています。さらに、新しいセキュリティ機能が追加されたことで、基盤となるシステムの一部を再設計して再編成する必要がありました。その結果、以前のバージョンの Caché との間に互換性がない部分があります。

その他の資料

この他にも、Caché 5.1 の機能について詳しく説明しているドキュメントがあります。以下はその例です。

管理者

このセクションでは、以前のバージョンの Caché の管理作業を熟知しているユーザを対象に、バージョン 5.1 の管理に関する新機能と変更点を説明します。ここでは、各項目について簡単に説明します。ほとんどの場合は、ドキュメントの別の箇所に詳しい説明があります。

新しいライセンス・キーが必要

Note:

Caché バージョン 5.1 では、新しい機能および新しいキー・フォーマットが採用されています。以前のリリースのライセンス・サーバと Caché 5.1 のライセンス・サーバとの間では、互いのキー・フォーマットが認識されません。既存のユーザが Caché バージョン 5.1 を実行するには、インターシステムズから新しいライセンスを取得する必要があります。営業担当者にお問い合わせのうえ、既存のライセンスに対応する新しいキーを入手するか、新しいライセンス・オプションについてご相談ください。

1 つのサイトで 5.1 インストール実行システムと 5.0.x システムを同時に稼動させる場合、それらのシステムがそれぞれのサーバから適切なライセンス・キーを取得する必要があります。このようにするには、各システムで個別にライセンス・サーバに対するポートを設定します。Caché 5.0.x システムの既定の設定では、ライセンス・サーバのポートは 4001 です。バージョン 5.1 システムでは、ライセンス・サーバ・ポートに別のポート番号を使用して、ライセンス・サーバにアクセスする必要があります。

複数の Caché インスタンスがキーを共有する場合は、すべてのインスタンスをバージョン 5.1 にアップグレードする必要があります。

アップグレード後のリコンパイル

"リリース・ノート" およびこのドキュメントの他の部分に記載されているように、このバージョンでは Caché の変更は広範囲に及びます。

Important:

バージョン 5.1 へのアップグレード後に、すべてのユーザ・アプリケーション・クラスをリコンパイルする必要があります。また、埋め込み SQL 文のあるユーザ・ルーチンも、すべてリコンパイルする必要があります。

Caution:

アップグレード後にリコンパイルしないと、アプリケーションの実行時に原因不明のエラーが発生することがあり、データが消失する場合があります。

システム管理ポータル

以前のバージョンでは、Caché を管理する方法は Caché が実行されるプラットフォームに大きく依存していました。バージョン 5.1 では、すべてのプラットフォームに共通の新しい管理用インタフェースが導入されています。Caché 5.1 では、ブラウザベースのインタフェースであるシステム管理ポータルを使用してシステムを管理します。

この方法の利点は、いくつかの例外はあるものの、管理に使用するシステム上に Caché のコンポーネントをインストールする必要がなくなったことです。サイトに対して確立されるアクセス制御を条件としますが、Web を介したリモートのシステム管理を簡単に実行できるようになりました。データとそのフォーマット情報の両方が、管理対象のシステムから直接取得されるので、リリース間の互換性の問題も解決されています。

以前は Windows Caché キューブのエクスプローラ、SQL マネージャ、構成マネージャ、およびコントロール・パネルに分散していた機能が、この新しいインタフェースにまとめられています。これらの機能が統合されているので、オペレータや開発者もポータルを使用して各自の作業を遂行できるようになります。

Important:

バージョン 5.1 の管理ポータルを使用して、以前のバージョンの Caché の管理を行うことはできません。その逆も同様で、以前のバージョンの管理機能を使用して Caché バージョン 5.1 の構成を管理することはできません。

システム管理ポータルの詳細は、"システム管理者" ドキュメントに記載されています。

ポータルとアプリケーション名の競合

Caché 5.1 では、システム管理ポータルを実行する CSP アプリケーションの名前は、インストール時に選択されたインスタンス名を使用して作成します。例えば、Caché システムに “/appserver” という名前の CSP アプリケーションがあると想定します。このシステム用に選択されたインストール名が “APPSERVER” の場合、アップグレード手順では、システム管理ポータルを実行するための CSP アプリケーション名は “/appserver/csp/sys” となります。このため、以前使用されていた CSP アプリケーションへのアクセスは、アップグレード後は実質的にブロックされます。

Note:

以前のバージョンからアップグレードするときは、インストール名と同じ名前 (大文字と小文字は区別しない) の CSP アプリケーションが存在しないことを必ず確認してください。

セキュリティ・アドバイザ

Caché システムの保護においてシステム・マネージャを支援するために、バージョン 5.1 にはセキュリティ・アドバイザが組み込まれています。 このユーティリティでは、現在のセキュリティ関連システム構成情報が表示され、確認を要する領域や変更の推奨が行われます。また、他のシステム管理用 Web ページへのリンクが用意されており、推奨される変更をこれにより行います。

Caché 5.1 に組み込まれているのは、セキュリティ・アドバイザの初版です。今後のバージョンで、機能と範囲が拡張される予定です。セキュリティ・アドバイザには、システム管理ポータルの ホーム, セキュリティ管理, セキュリティアドバイザ からアクセスします。

保護されたシステムをプロダクション・ステータスに移行する前に、セキュリティ・アドバイザで提示される問題とその解決方法を確認しておくことを強くお勧めします。

インストール時のセキュリティ設定の既定値

Caché のセキュリティ機能の利用は、バージョン 5.1 のインストール (またはアップグレード) の時点から始まります。Caché をインストールするときに、以下の 3 つのセキュリティ初期設定のいずれかを選択します。

  • 最小

  • 通常

  • ロック・ダウン

ここでの選択に応じて、Caché のサービスの初期構成設定が以下のように決まります。

セキュリティ設定 最小 通常 ロック・ダウン
ユーザ認証が必要 いいえ はい はい
パスワード・パターンの既定値 3.32ANP 3.32ANP 8.32ANP
_SYSTEM ユーザを使用可能 はい はい いいえ
UnknownUser に割り当てられるロール %All <なし> <なし>
インストールのユーザ名を作成してパスワードの入力を要求する いいえ はい はい

既定の設定で有効化されるサービスを以下のテーブルに示します。

サービス名 最小 通常 ロック・ダウン
%Service_Bindings はい はい いいえ
%Service_CSP はい はい はい
%Service_CacheDirect はい いいえ いいえ
%Service_CallIn はい いいえ いいえ
%Service_ComPort いいえ いいえ いいえ
%Service_Console はい はい はい
%Service_DCP いいえ いいえ いいえ
%Service_DDP いいえ いいえ いいえ
%Service_ECP いいえ いいえ いいえ
%Service_LAT いいえ いいえ いいえ
%Service_MSMActivate いいえ いいえ いいえ
%Service_Monitor いいえ いいえ いいえ
%Service_Shadow いいえ いいえ いいえ
%Service_Telnet いいえ いいえ いいえ
%Service_Weblink いいえ いいえ いいえ

緊急アクセス

不測の事態に備えて、Caché には特別な緊急アクセス・モードが用意されています。このモードを一定の緊急時に使用できるのは、例えば、セキュリティ構成情報が深刻な損傷を受けた場合や、%Admin_Manage:U 特権または %Admin_Security:U 特権のユーザがまったく利用できない場合です (Caché には、このような事態を回避するために %All ロールを付与されたユーザを常に 1 人以上確保する仕組みがありますが、そのユーザが利用できないか、パスワードを忘れてしまう場合もあります)。

Caché が緊急アクセス・モードで動作しているとき、アクセスが許可されるユーザは 1 人のみです (このユーザを “緊急ユーザ” といいます)。 Caché を緊急アクセス・モードでコマンドライン・スイッチにより起動しますが、これによって緊急ユーザのユーザ名とパスワードを指定します。 このユーザ名は、Caché 内であらかじめ定義されていなくてもかまいません (実際には、ユーザ名が Caché 内で定義されていても、緊急ユーザは概念的には別のユーザです)。 緊急ユーザの名前とパスワードは、緊急モードでの 1 回の起動のみに対して有効です。

Caché を緊急アクセス・モードで起動するユーザには、オペレーティング・システム・レベルのシステム管理特権が付与されている必要があります (Windows システムでは、このユーザは Administrators グループのメンバであることが必要です。 UNIX® システムでは、このユーザは root でなければなりません。 OpenVMS システムでは、このユーザにはシステム UIC が必要です)。 Caché によって、このユーザのオペレーティング・システム・レベルの特性が検査され、認証が行われます。 Caché が緊急アクセス・モードで起動されたときの動作は以下のようになります。

  • 緊急ユーザのみにアクセスが許可されます。 他のユーザはログインできません。

  • 緊急ユーザには、自動的に %All ロールが付与されます。

  • Console サービスおよび CSP サービスが有効化されます。 それ以外のサービスはすべて無効化されます。 これは、構成内でサービスの有効な状態または無効な状態には影響しません。影響を受けるのは、サービスに関して現在メモリ内にある情報のみです。

  • Caché のパスワード認証が使用され、認証を受けていないアクセスはすべてのサービスに対して禁止されます。

  • 可能な場合、すべてのイベントに対する監査が有効化されます。 これができない場合でも、Caché の起動は続行します。

構成ファイルの変更

バージョン 5.1 において新機能が追加された結果、Caché の起動時の初期化用の値を指定する構成ファイルの形式および内容が大きく変更されました。このセクションでは、構成ファイルにおけるすべての変更について詳しく説明せずに、主要な変更のみを説明します。

Note:

このバージョンの時点では、パラメータ・ファイルには cache.cpf という名前を付ける必要があります。

新しいパラメータ・リファレンス

.cpf を編集してサイトの運用を制御している場合は、個々の制御内容を調べて、このバージョンでも適用可能かどうかを確認する必要があります。管理者は "Caché パラメータ・ファイル・リファレンス" を参照して、最新の構成、および有効なパラメータと指定可能な設定を再確認することを強くお勧めします。

起動時の構成変更の検出

Caché の構成情報は、Caché の外部に保存されており、Caché が実行されていないときに構成情報を修正できます。そのため、このバージョンでは特別な保護オプションが追加されています。構成ファイルの内容を保護するのではなく、システムを起動する機能や実行中のシステムの構成を変更する機能を Caché は制御しています。この保護を有効にするには、構成セキュリティをオンにします(もちろん、ユーザがこのファイルを編集できるのをオペレーティング・システム・レベルで厳格に制限することにより、この構成ファイルを Caché の外部で保護できるし、そうする必要があります)。

Caché の起動時に、構成 (.cpf) ファイルがこの Caché インスタンスの前回の起動時以降に変更されたことが検出されると、起動を実行したユーザにユーザ名とパスワードの入力を求めるプロンプトが表示されます。このデータは、変更された構成パラメータを使用して Caché を起動することを認可されたユーザであるかどうかを検証するために使用されます。 ユーザの認証に成功した場合に、このユーザに %Admin_Manage:Use が付与されていれば、新しい構成パラメータを使用して Caché が起動します。

それ以外の場合は、前回の既知の構成を使用して Caché が起動します。この場合、指定された構成ファイルは cache.cpf_rejected にコピーされ (その名前のファイルがある場合には上書きされます)、構成ファイルとして指定されたファイルには、Caché の起動に実際に使用された構成パラメータが書き込まれます。

低レベル管理インタフェース

新しい管理ポータル以外に、システム管理者はキャラクタ・ベースのユーティリティにより Caché システムを低レベルで制御することができます。使用可能なルーチンは、"CHUI ベースの管理ルーチン" に記載されています。

Web サーバの変更

Caché 5.1 では、セキュリティ機能が強化され、ブラウザにハイパーテキスト情報を渡す方法にも影響が及んでいます。

Caché のプライベート Web サーバは Apache

Caché 5.1 をインストールすると、そのプライベート Web サーバとして Apache のインスタンスもインストールされます。別の Web サーバを使用するようにサイトで構成を変更できますが、Caché のプライベート・サーバのインストールは必ず行われます。

既定のポートの変更

既定では、Caché のスーパーサーバ・ポート番号として、1972 以降で最初の未使用の番号が選択されるようになりました。この値 1972 に依存しているアプリケーションは、スーパーサーバに接続できない場合があります。さらに、Caché のプライベート Web サーバ用に別のポート番号が使用されるようになりました。選択される値は、8972 以降の最初の未使用ポートです。どちらも下 2 桁が 72 ですが、2 つのポート番号では関係はありません。スーパーサーバ・ポートが 1973 で、Web サーバのポート番号が 8977 となる場合もあります。

カスタム・インストールの実行時に、スーパーサーバのポート番号とプライベート Web サーバのポート番号の両方を明示的に設定することも可能です。

CSP ゲートウェイの変更

Caché バージョン 5.1 では、2 つのプラットフォームにおいて CSP ゲートウェイの実装が変更されています。

  • OpenVMS に対するサポートの終了

    今後 OpenVMS で CSP ゲートウェイはサポートされません。これを参照している部分は OpenVMS のインストール・スクリプトから削除されており、コードは OpenVMS 向けの製品から除外されています。

    Note:

    既存の CSP ゲートウェイ・ファイルがある場合は、以前のバージョンからアップグレード時に削除されます。

  • OpenVMS 用の WebServer パラメータ

    OpenVMS の .cpf ファイルには、再び WebServer パラメータが含まれるようになりました。形式は以下のとおりです。

    WebServer=[ON|OFF],<server>:<port>
    

    .cpf ファイル内でこのパラメータが指定されていない場合は、既定値として “OFF”、“”、および 8972 以降の最初の使用可能ポートが選択されます。

既定のユーザ名およびパスワード

CSP ゲートウェイが Caché に接続するときに、最初に送信されるメッセージはログイン・メッセージですが、この中には、CSP ゲートウェイ管理ページで定義されたユーザ名とハッシュ化パスワードが含まれることがあります。サーバの $username が "" の場合は、CSP ゲートウェイが Kerberos を使用して接続しなかったことを示し、既定のユーザ名およびパスワードを使用してこのサービスへのログインが試行されます。

ログインに失敗した場合は、監査ログにエントリを記録してから (監査が有効化されている場合)、CSP ゲートウェイが停止します。成功した場合、$username は NULL にはならず、CSP ページを表示するための関数など、他の関数を CSP サーバから呼び出せるようになります。$username ="" の間は、CSP サーバによって呼び出されるのはログイン・メソッドのみです。

UNIX®/Linux 上での Caché の権限はインストール実行者の権限と同じ

以前のバージョンの Caché では、Caché のインストールを行うときにユーザ名 root を使用する必要がありました。Caché の通常の動作には root 権限は必要ないので、これは好ましいことではありませんでした。バージョン 5.1 では、この要件が撤廃されています。

Caché の起動時に設定されるユーザ ID はインストールを行ったユーザの ID で、グループ ID は “cacheusr” となります。この結果、インストールを行ったユーザがアクセスできないデバイスには、Caché からもアクセスができないことになります。root のみがアクセス可能なデバイスに、このインストールからアクセスできるようにするには、root を使用して Caché をインストールする必要があります。

例えば、多くの UNIX® システムでは root がイーサネット・デバイスの所有者となっています。root 以外のユーザがインストールしたバージョンの Caché では、既定ではイーサネットを使用した通信ができません。

Caution:

“cacheusr” というグループ ID には、Caché が動作するために必要なファイル (例えば Journal ディレクトリ内のファイルやディレクトリ自体) に対する書き込み権限が付与されていなければなりません。この要件を満たしていない場合は、動作が不安定になり、システム障害が発生する場合があります。

これには、Caché で使用するために管理者によって Caché の外部に作成されるファイルやディレクトリも含まれます。例えば、スループットとシステム信頼性の向上のためにジャーナル・ファイルが別のディスクに割り当てられている場合は、root のアクセス権限を持つユーザによってジャーナル・ファイルを作成するだけでは不十分です。cacheusr グループによる書き込みが可能でなければなりません。

新しいパスワード・ハッシュ関数

Caché によって保存されるユーザ用パスワード・データは必ず、パスワードの文字に対してハッシュ関数を実行した結果のデータです。ユーザがログインしようとすると、ユーザが入力した文字のハッシュが計算され、保存されているハッシュ値と内部的に比較されます。計算された 2 つの値が一致すれば、パスワードは一致していると見なされます。

このバージョンの Caché では、計算がより強力な関数を使用してパスワード・ハッシュが計算されます。計算されるハッシュ値は、以前のバージョンでのハッシュ値とは異なり、“解読” されにくくなっています。

パスワード文字列が異なっていてもハッシュ値が同一になることもあるので、ハッシュ値から実際のユーザのパスワードを計算することは不可能です。つまり、古いハッシュ値から新しいパスワード・ハッシュ値を計算することは不可能です。したがって、バージョン 5.1 にアップグレードするときは、システム上のすべてのユーザ ID に新しいパスワード・ハッシュ値を付与する必要があります。

以前のバージョンの Caché によってエクスポートされたユーザ・データ (例えば $SYSTEM.SQL.Export(...) によって生成されたデータ) には、そのバージョンで使用されるパスワード・ハッシュ値が含まれています。このようなデータをバージョン 5.1 にインポートするときは、注意が必要です。すべてのユーザに、新しいパスワードを割り当てる必要があります。ユーザの ID をインポートすると、そのユーザのパスワード・ハッシュはリセットされ、バージョン 5.1 の環境で再度割り当てられるまでは、ログインできなくなります。

パスワードが NULL (割り当てられていない) のユーザは例外です。このようなユーザは自動的に処理されます。

Note:

アップグレード後は、Caché 5.1 では新しいパスワード・ハッシュ値の計算を支援します。ユーザが初めてログインしようとしたときに、以前のアルゴリズムを使用してパスワード・ハッシュが計算されます。この値が、保存されている値と比較されます。これらが一致するときは、新しいアルゴリズムを使用してパスワード・ハッシュが再計算され、この新しい値がデータベースに保存されます。パスワードの変換はこのように、既存のユーザが初めてログインするときに行われます。

読み取り専用データベース

データ表現

読み取り専用データベースの処理で一貫性を向上させるために、このバージョンの Caché では、データベースを識別する方法が変更されています。データベースのプロパティにおいて読み取り専用が指定されているか、^MOUNT で読み取り専用が宣言されているデータベースは、読み取り専用であると認識されます。

ライト・デーモンのアクセスによってデータベースのモードを判定

Caché バージョン 5.1 では、データベースがマウントされるときに、データベースを更新するのに十分なアクセス許可が付与されているかどうかの検査がライト・デーモンによって行われます。アクセス許可が付与されていない場合は、データベースは強制的に読み取り専用モードでマウントされます。

クラスタの変更

クラスタ参加ロジックの改善

Caché 5.1 では、クラスタ・マスタ上でスイッチ 10、13、および 14 の 3 つ (データベース・アクセスを不可能にする) が設定されていると、クラスタ・メンバが完全にクラスタに参加することはできなくなりました。以前のリリースでは、新しいシステムが、クラスタ・マウントや、データベースに対する読み取りおよび書き込みを行うことも可能でした。クラスタがバックアップを実行中のときにこれらの操作が行われると、問題が発生する場合がありました。

このバージョンでは、新しいクラスタ・メンバの起動時に、クラスタ・レベルで設定されるスイッチおよびローカルで設定されるスイッチの検出が行われます。このため、グローバル・アクセスをブロックするスイッチが設定されている場合は、クラスタに参加しようとしているメンバ上の Caché 起動プロセスがハングします。これが発生すると、コンソール・ログ・メッセージが生成されます。

Note:

このバージョンでは、以前のバージョンとの相互運用が可能ですが、マスタと、クラスタに参加するシステムがバージョン 5.1 にアップグレードされるまでは、新しい機能は利用できません。

ジャーナリングの変更

以前のバージョンでの経験により、高可用性システムに対するサポートの一環として、Caché バージョン 5.1 ではジャーナリングが大幅に改善されました。バージョン 5.1 における変更の目的は、ジャーナリングの動作の安全性と一貫性の改善です。例えば、ジャーナリングは個々のグローバルではなく、データベースのプロパティとなりました。オペレータのインタフェースも、この新しいアプローチを取り入れて変更されています。Caché 5.1 では、システム管理ポータルを介して、ジャーナル設定に対する変更を管理および監査できます。

ジャーナリングのデータベース属性化

Caché 5.1 では、ジャーナル状態の指定がデータベース単位で行われます。これによって、システムの信頼性が大きく向上します。以前のバージョンでは、グローバルでの変更がジャーナルに記録されることもされないこともあり、また、トランザクションに明示的または暗黙的に (%Save や SQL UPDATE 文を介して) 関与することも関与しないこともあり、これが原因で不整合 (クラッシュ・リカバリ後) が発生していましたが、このバージョンではこのような不整合に対処しているためです。この変更の詳細を以下に示します。

  • ジャーナル状態は、個々のグローバルではなく、データベースのプロパティです。 この設定に応じて、データベース内のグローバルがすべてジャーナルに記録されるか、記録されなくなります。 ジャーナルの状態は、YES と NO の 2 つのみです。

  • 新しいデータベースのジャーナル状態の既定の設定は YES です。 以前のバージョンからのデータベースを初めてマウントするときに、この値は YES に設定されます。新規グローバルの既定値に関する以前の設定値およびそのデータベース内の個々のグローバルの設定は無視されます。

  • トランザクション内では、変更がジャーナルに書き込まれます。影響を受けるグローバルが存在するデータベースの設定は無視されます。 ロールバックは、以前と同様に機能します。

  • CACHETEMP にマッピングされているものはジャーナルに記録されません。このジャーナル動作は以前と同様です。

  • ジャーナルのリストア時には、データベースの現在の設定が考慮されます。 ジャーナルに書き込まれるときに、データベースの状態についてはジャーナルに保存されません。リストアの時点でのデータベースの状態によって、実行するアクションが決まります。 つまり、JOURNAL=YES のデータベースに対する変更は永続的ですが、それ以外のデータベースに対する変更は永続的ではない可能性があります。 Caché では、物理的な整合性は保証されますが、トランザクションに関与するデータベースの設定が JOURNAL=NO の場合、アプリケーションの整合性が必ずしも保証されるとは限りません。

  • クラスタにマウントされるデータベースのグローバルがジャーナルに記録されるかどうかは、データベースの設定によって決まります。

  • 実行中のシステムにおいて、データベースの設定は変更することができます。 これを行うと、考えられる影響と監査対象の状態の変更についての警告メッセージが管理者に表示されます。

この変更において、Caché 5.1 では以下の変更も行われています。

  • この変更によるディスク領域への影響を低減するように、パージの既定の設定が変更されました。

  • 以前のリリースでグローバル単位でジャーナル記録を有効または無効にしていたルーチン ^%JOURNAL が削除されました。

  • ^%GCREATE および ^%SYS.GCREATE が変更され、グローバルをジャーナルに記録するかどうかを尋ねるメッセージは表示されなくなりました。

Caution:

新しいジャーナル設計の特徴の 1 つに、ジャーナル・リストアの時点でジャーナル記録対象と指定されているデータベースにのみリストアが実行されることがあります。 ^JRNRESTO プログラムによって、各データベースが初めて検出されたときにそのデータベースのジャーナル状態の検査が行われ、ジャーナル状態が記録されるようになりました。 ジャーナル記録対象であると指定されていないデータベースのジャーナル・レコードは、リストア時にスキップされます。

ジャーナル記録対象として指定されているデータベースがない場合は、^JRNRESTO プログラムを実行すると、リストアを終了するかどうかを尋ねるメッセージが表示されます。 必要に応じて、ジャーナルに記録するようにデータベースの状態を管理者は変更して ^JRNRESTO を再起動できます。

Z-グローバルのジャーナリング

以前のリリースでは、z/Z* グローバルをジャーナル記録対象から (トランザクション内であっても) 除外するかどうかを、JournalZGlob パラメータを使用して指定していました。バージョン 5.1 では、ジャーナリングの安定性を向上させるために、このパラメータが削除されました。このフラグが設定されている旧バージョンの Caché システムをアップグレードするときに、定義済みデータベース内の既存の z/Z* グローバルには、そのデータベースのジャーナル属性が設定されます(CACHETEMP の既定のジャーナル属性はオフです)。

サイトで新しい z/Z* グローバルをジャーナル記録対象から除外する場合、ジャーナル属性がオフに設定されているデータベースに z/Z* グローバルを管理者はマッピングする必要があります。

Note:

ネームスペース内にある複数のグローバルをそれぞれ別のデータベースにマッピングすることも可能なため、一部はジャーナルに記録され、他は記録されないということもあります。グローバルのマッピング先のデータベースでのジャーナル設定によって、グローバルの扱い方が決まります。

以前のバージョンで z/Z* グローバルをジャーナル記録対象から除外するフラグを設定した場合と同じにするには、すべてのネームスペース内の z/Z* グローバルを CACHETEMP データベースにマッピングする必要があります。CACHETEMP と、ジャーナル属性がオフに設定されたデータベースとの違いは、トランザクションによる更新ではなくても、CACHETEMP 内のものはジャーナルに記録されない点です。

ジャーナル・パージへの変更

このリリース以前の既定の動作では、7 日後にジャーナル・ファイルを削除していました。Caché バージョン 5.1 では、既定の動作が変更されました。

X 日間後、または Y 回バックアップに成功した後に、Caché でジャーナル・ファイルを削除できます。推奨の設定は以下のとおりです。

  • 1 <= X <= 100

  • 1 <= Y <= 10

X と Y が両方とも 0 より大きい場合、X 日後、またはバックアップに Y 回成功した後 (どちらか早い方) にファイルが削除されます。X または Y がゼロの場合、残りの条件に基づいてファイルの削除が実行されます。X と Y をゼロに設定すると、ファイルの削除を完全に回避できます。

ジャーナル・ファイルは、Caché バックアップに 2 回連続して成功した後に削除されるようになりました。

Note:

Caché のバックアップ機能を使用しない場合、適切なジャーナルの保守を計画することを検討してください。例えば、Caché タスク・マネージャを利用して、保持されたジャーナル情報の量を管理します。

シャドウイングの変更

このバージョンでは、Caché のシステム・シャドウイングに関する機能が大幅に改善されています。クラスタとの間のシャドウイング機能が向上しました。送信側とシャドウ・システムの両方における待ち時間報告機能が改善され、また、シャドウイングの一時停止/再開および開始/停止の制御の機能が向上しました。

シャドウの [適用済みのトランザクションのジャーナリング] の削除

シャドウ・データベースで適用済みトランザクションをジャーナルに記録するかどうか選択する設定はありません。これまでの Caché リリースの既定の動作では、シャドウ・データベースに対する更新をジャーナルに記録しませんでしたが、[ジャーナルが適用されたトランザクション] チェックボックスにチェックを付けることで、シャドウでジャーナリングを有効にすることができました。これにより、シャドウ・データベース上の活動を示す個別のジャーナル・ファイルが維持されていました。

Caché 5.1 では、このオプションがなくなり、シャドウ・データベースのジャーナリングは、データベース自体のグローバル・ジャーナルの状態で決定されます。アップグレード後、シャドウ・データベースのジャーナリングが有効になります。シャドウのストレージ容量に対する高まる要求を緩和するため、Caché では、ソース・ジャーナル・ファイルがデジャーナルされ、シャドウに実行中のトランザクションが含まれなくなると、宛先のシャドウ・コピーを削除します。

シャドウイングの宛先となるすべてのデータベースをジャーナルに記録することをお勧めします。ただし、宛先となるシャドウ・データベースをジャーナルしない場合は、CACHESYS データベースのジャーナリングも無効にする必要があります。Caché は、CACHESYS データベースの ^SYS グローバルでのシャドウイングで最後に処理されたジャーナル・レコードのジャーナル・アドレスとジャーナル・ファイル名を保存します。これは、シャドウイングが失敗した場合に、シャドウイングを再開するチェックポイントとして動作します。

Caution:

シャドウの宛先で、宛先のシャドウ・データベースではなく CACHESYS データベースをジャーナルに記録する場合、シャドウがクラッシュして再起動すると、CACHESYS のチェックポイントは、ジャーナル・ストリーム中、シャドウ・データベースにコミットされた最後のレコードよりもの時点の状態にリストアされる可能性があります。

互換モード (レコード・モード) シャドウイングの削除

ジャーナル転送方法を選択するオプションがなくなりました。すべてのシャドウイングでは、高速モード、変更を適用方法を使用します。

Caché バージョン 5.1 より前のバージョンでは、シャドウイングのジャーナル転送に次の 4 つの方法がありました。

  • 高速モード、変更を適用

  • 高速モード、変更を適用しない

  • 互換モード、変更を適用

  • 互換モード、変更を走査

互換モード (以前はレコード型転送モードと呼ばれていた) は、ほとんどの場合、異なるプラットフォーム間での互換性の維持に使用されましたが、異なる Caché リリースのサポートを行うこともありました。高速モード (以前はブロック型転送モードと呼ばれていた) は、異なるエンディアン・システムに必要なバイトの順序変更を自動実行するため、今後異なるプラットフォームをサポートします。

1 つのシャドウから 異なる Caché リリースを実行する複数のプロダクション・サーバをサポートする必要がある場合は、シャドウ・サーバに複数の Caché インスタンスを各 Caché バージョンに 1 つずつ設定して、古いバージョンでは互換モードではなく高速モードを使用することをお勧めします。これにより、最適なパフォーマンスと安定性が生まれます。

Important:

Caché をアップグレードすると、既存の互換モードのシャドウが高速モードに変換されます。変換された高速モードのシャドウがソースと共に機能するかどうかは、ソースの構成によって決まります。Caché 5.1 によって、高速モード・シャドウイングのための自動エンディアン変換が行われます。

シャドウイングの既定値における変更

Caché 5.1 の既定では、以下のデータベースはシャドウイングされません。

  • CACHEAUDIT

  • CACHELIB

  • DOCBOOK

  • SAMPLES

これらをシャドウする場合は、システム管理ポータルの ホーム, 構成, シャドウ・サーバ設定, シャドウサーバ編集 ページで、[このシャドウのデータベースマッピング] の隣にある [追加] をクリックします。

CACHETEMP

Caché 5.1 では、CACHETEMP の扱いが以前のバージョンとは異なっています。この変更は、セキュリティの要件およびユーザからの要求によるものです。

拡張およびサイズの特性の維持

Caché 5.1 では、再起動後も CACHETEMP の拡張およびサイズの設定が維持されます。再起動後に Caché から報告されるサイズは、最小値の 240 MB とファイルに割り当てられたサイズのうち、いずれか小さい方です。オペレーティング・システムによって割り当てられたファイルのサイズが 240 MB よりも大きい場合は、Caché は最初の 240 MB のみを記述するようにマップ・ブロックを初期化し、後で必要に応じてマップを拡張します。ただし、ファイルの物理サイズを縮小することはありません。

照合

再起動後は、以前の設定とは無関係に、CACHETEMP の照合は Caché Standard にリセットされます。サイトで別の照合が使用されるようにするには、^%ZSTART ルーチンの “SYSTEM” コールバックにコードを追加して、必要な照合を設定します。

CACHETEMP 削除の条件

以下に条件を示します。

  1. CACHETEMP が 2 KB データベースである

  2. STU (システム起動) の実行時に CACHETEMP がマウントされる

Caché は CACHETEMP の削除と再作成を試みます。2 番目の条件に該当するのは、例えば、Caché が “nostu” モードで起動され、その後でオペレータが手動で STU を実行する場合です。

CACHETEMP が再作成されるとき、初期サイズは 1 MB、拡張係数は 0 (拡張量が 10% と 10 MB のいずれか大きい方であることを示す)、最大サイズは 0 (制限なし) に設定されます。

ShutDownTimeout パラメータの強制適用

バージョン 5.1 からは、すべてのプラットフォームで ShutDownTimeout パラメータが強制的に適用されます。シャットダウンでは、ユーザ定義シャットダウン・ルーチンの所要時間が ShutdownTimeout (約 10 秒未満) の値を超えることはありません。 この制限値に達すると、ユーザ定義のシャットダウン・ルーチンが完了していなくても、シャットダウンは完了 (最終強制クリーンアップを含む) に進みます。

ロケールの照合が既定の設定でオン

ロケールにおいて国固有照合が使用可能である場合 (例えば Spanish1、Portuguese2、German2)、"Cache Standard" ではなく、その国固有照合がロケールの既定の照合として設定されるようになりました。2 つ以上の照合があるロケールでは (例えば German1 と German2)、接尾語が最大のものが選択されます。

国固有照合のないロケールでは (English、Hebrew など)、以前と同様に Cache Standard が既定の照合として使用されます。変更内容をまとめたテーブルを以下に示します。

Note:

この影響を受けるのは、ローカル配列の作成のみです。新しいグローバルの照合は、データベースの既定値から取得されます (%GCREATE によって明示的に作成される場合を除く)。

既定の照合が変更されたロケール
ロケール 照合
chsw Chinese2
csy8 Czech2
csyw Czech2
dan8 Danish1
danw Danish1
deu8 German2
deuw German2
ell8 Greek1
ellw Greek1
esp8 Spanish1
espw Spanish1
fin8 Finnish1
finw Finnish1
plk8 Polish2
plkw Polish2
ptb8 Portuguese2
ptbw Portuguese2
rus8 Cyrillic1
rusw Cyrillic1
ruw8 Cyrillic2
zdsw Japanese1
zduw Japanese1
zip8 Portuguese2
既定の照合が Caché Standard のままであるロケール
ロケール 照合
chtw 繁体字中国語
enu8 英語
enuw 英語
fra8 フランス語
fraw フランス語
heb8 ヘブライ語
hebw ヘブライ語
ita8 イタリア語
itaw イタリア語
jpnw 日本語
jpuw 日本語 (UNIX®)
jpww 日本語 (UTF-8)
korw 韓国語
nld8 オランダ語
nldw オランダ語
zdtw 日本語 (DTM-J)

オンライン・ドキュメントへのアクセス

Windows 上で、キューブを介してドキュメントにアクセスするときに使用されるユーザ ID は "UnknownUser" です。Caché のインストール時に、セキュリティ・レベルを [標準] または [ロック・ダウン] にすると、このユーザ名にはアクセス権 %DB_DocBook:R のみが与えられます。

Caché クラス・リファレンスのドキュメントを読むには、これだけでは不十分です。クラス・リファレンス・ドキュメントにアクセスするには、このドキュメントを読もうとするユーザが認証を受ける必要があります。

オンライン・ドキュメントのプログラム例を実行するには、%DB_SAMPLES:W が必要です。UnknownUser にこのアクセス権が付与されていない場合は、実行可能なプログラム例の画面に [実行する] というラベルのボタンは表示されません。

必要なアクセス権を持つロールを定義して UnknownUser に割り当てると、以前と同様の動作になります。または、“/csp/docbook” が実行されるときにロールを追加するようにアプリケーション定義を編集できます。

以前のリリースからのアップグレード

このセクションでは、既存の Caché システムをバージョン 5.1 にアップグレードすることに関する事項について説明します。

フィールド・テスト・バージョンからのアップグレードは不可

現在実行している Caché のバージョンが 4.1.x または 5.0.x の場合、インストール時に Caché 5.1 へのアップグレードが可能です。

Caution:

Caché 5.1 のフィールド・テストに使用されたバージョンからのアップグレードはサポートされません。これには、DevCon 2005 において一部のお客様に配布されたバージョンの Caché 5.1 も含まれます。

DDP の使用

以前のバージョンの Caché 上で DDP を実行していた場合は、適切な数のネットワーク・スロットを割り当てるように構成ファイルを編集する必要があります。今後は、ネットワーク・スロット数の既定値は計算されません。

  • 構成ファイルの [Net] セクションの maxdsmport の値を、DDP に使用されるイーサネット・カードの数と等しくなるように設定します。

  • ファイルの [config] セクションの、LegacyNetConn の 4 番目のパラメータを 0 から 1 に変更します。

Note:

これらの変更が行われていなければ、DDP は起動しません。

$SYSTEM.OBJ.UpgradeAll()

コンパイラ・バージョンの変更、グローバルおよびルーチンの再編成、および Caché クラスの変更が行われたため、事前の準備および計画を行わずに $SYSTEM.OBJ.UpgradeAll() を起動すると、大量のエラーが発生する場合があります。

合成ロール : %LegacyUnknownUser

以前の動作に近づけるために、バージョン 5.1 へのアップグレード時に既定のロールが作成されます。このロールの名前は、%LegacyUnknownUser です。これは、高度なセキュリティが実装されていない、バージョン 5.0 とそれ以前のバージョンの Caché からアップグレードした後は、ユーザが定義されていない状態になるからです。 この場合は、すべてのユーザが UnknownUser としてログインします。 UnknownUser にアクセス特権が与えられていない場合は、管理者によってシステムが構成されるまでの間、既存のユーザは操作を実行できなくなります。

%LegacyUnknownUser ロールには、表示されるリソースとアップグレード・インストール時点で存在するカスタマ定義データベースごとに作成されるリソースに対する、読み取りおよび書き込みのアクセス権が付与されます。

Name:               %LegacyUnknownUser
Description:        Legacy Unidentified Users
Roles granted by this role:
                    <none>
Resources owned by this role:
                    Resource                      Permission
                    --------                      ----------
                    %System_CallOut               U
                    %Service_SQL                  U
                    %Service_Object               U
                    %Service_Console              U
                    %Service_CallIn               U
                    %Service_CacheDirect          U
                    %Development                  U
                    %DB_USER                      RW
                    %DB_SAMPLES                   RW
                    %DB_%DEFAULT                  RW
Users owning this role:
                    <none>

さらに、以下のサービス・リソースに対する使用アクセス権が、ここに示した条件で付与されます。

サービス 特権 条件

%Service_ComPort

Use Windows 上、サービスが有効化されている場合

%Service_Console

Use Windows 上、サービスが有効化されている場合

%Service_LAT

Use Windows 上、サービスが有効化されている場合

%Service_Telnet

Use Windows 上、サービスが有効化されている場合

%Service_Terminal

Use UNIX® 上および OpenVMS 上

管理者によってシステムが正しく構成された後は、UnknownUser ユーザを無効にするか、アプリケーション環境の追加要素を Caché の高度なセキュリティの制御下に移行しながら、^SECURITY またはシステム管理ポータルを使用して、ロール %LegacyUnknownUser に割り当てられたリソースを徐々に減らすことができます。 %LegacyUnknownUser ロールの特権を減らすことや、このロールを削除することは、移行期に手動で行う作業です。 Caché によって自動的に実行されません。

%LegacyCD および %LegacySQL

これらは、アップグレード時のみに既存のユーザに自動的に適用され、既存のユーザが、バージョン 5.1 でも以前と同じレベルでアクセスできるようになります。 新しいユーザには、これらのロールは特に必要ありません。

% で始まるグローバルへのアクセスを以前のバージョンと同様に許可

アップグレードの場合は、Security.System.PercentGlobalWrite の値が True に設定されます(新規インストールの場合は、False に設定されます)。これによって、% で始まるグローバルに以前のバージョンと同様の方法でアクセスできます。値を変更するには、^SECURITY ルーチンを使用できます。

クラスタの全メンバが同じバージョンの Caché を実行する必要あり

ECP クラスタの全メンバが、同じバージョンの Caché を実行している必要があります。あるメンバをアップグレードする場合は、他のメンバもすべてアップグレードする必要があります。

OpenVMS でのアップグレード時の CSP ゲートウェイの削除

今後 OpenVMS で CSP ゲートウェイはサポートされません。これを参照している部分は OpenVMS のインストール・スクリプトから削除されており、コードは OpenVMS 向けの製品から除外されています。

Note:

既存の CSP ゲートウェイ・ファイルがある場合は、以前のバージョンからアップグレード時に削除されます。

グローバルとパッケージのマッピングの削除

以前のバージョンからのアップグレード時に、以下に示すグローバルへのマッピングが削除されます。

  • 名前が “^odd” で始まるすべてのグローバル

  • ^rINDEXCLASS、^rOBJ、^ROUTINE

  • ^mdd

名前が “%Z”、“%z”、“Z”、または “z”で始まるパッケージの定義は維持されますが (“^oddDEF”)、コンパイル済みクラス情報は削除されます。“^odd” グローバルは、クラスが $SYSTEM.OBJ.Upgrade() を介してリコンパイルされるときに再作成されます。

さらに、構成ファイル (.cpf) 内で定義されていたクラス・マッピングは、すべて破棄されます。

Note:

これらのグローバルへのアクセスが必要な場合、管理者は必要なマッピングを手動で構築する必要があります。自動的には変換できません。これに該当するのは、例えば、複数のネームスペースが同じクラス定義を共有するようにシステムのグローバル・マッピングが定義されていた場合です。

高信頼アプリケーションの定義の削除

Caché 5.1 のセキュリティ・モデルでは、高信頼アプリケーションはサポートされません。ユーザが接続または再接続するときに、パスワード認証がオンの場合はパスワードの入力が要求されます。このような動作を望まない場合、管理者は Cache Direct サービスに対する認証をオフにしてください。

Note:

バージョン 5.0.x の高信頼アプリケーション定義は、バージョン 5.1 アップグレードの実行時に破棄されます。

Windows ネットワーク・サーバのユーザ名およびパスワードの変更

以前のバージョンでは、Windows 上での Caché のサービスのインストールおよび起動には、特に構成されない限り、既定のユーザ名 “_SYSTEM” とパスワード “_sys” が使用されていました。このユーザ名およびパスワードの値は、構成マネージャの [詳細] タブの [入力/出力] オプションで設定されていました。

バージョン 5.1 では、アップグレード時に、アップグレード用に作成された Windows サービス定義内にこれらの値 (値が設定されていなかった場合は既定値) が格納されます。

Windows 管理インタフェースを使用して管理者は値を変更できます。Windows の [スタート] メニューから [プログラム]→[管理ツール]→[コンポーネント サービス] を選択します。該当する Caché サービスを選択して、[操作] メニューの [プロパティ] を選択します。ユーザ名とパスワードは、[ログオン] タブでアクセスします。

グローバル・レプリケーションの削除

グローバル・レプリケーションは、Caché 5.1 ではサポートされません。検出されると、アップグレードを行うプロセスでシステムからこの機能の使用が削除され、コンソール・ログに記録されます。以前このツールによって提供されていた機能は、シャドウイングを使用して実現できます。詳細は、"Caché データ整合性ガイド" の "シャドウイング" の章を参照してください。

Java と Kerberos

Caché で Java を Kerberos と併用する前に、いくつかの構成ファイルを編集する必要があります。その 1 つが krb5.conf です。このファイルのパラメータを設定するには、以下を実行します。

java com.intersys.jgss.Configure

そして、表示されるプロンプトに応答します。 Windows、Solaris、および Linux で、krb5.conf が既定の場所にない場合に構成で検索される場所を以下に示します。

  • Windows

    c:\winnt\krb5.ini 
    
  • Solaris

    /etc/krb5/krb5.conf 
    
  • Linux

    /etc/krb5.conf 
    

既定の場所にファイルが作成される際に使用するテンプレート・ファイル情報が取得されます。

推奨事項

Caché 5.1 システムの設定を行う管理者向けに、推奨事項がいくつかあります。

ECP (Enterprise Cache Protocol)

分散されたシステムには、ECP を使用することを強くお勧めします。ECP は、DCP などの従来のネットワーキング手法よりも大幅に進歩したプロトコルです。現在 DCP を使用している場合、ECP に変更することで、パフォーマンス、信頼性、可用性、およびエラー・リカバリが向上します。

既定のパスワード設定の変更

Caché のインストール時にセキュリティ設定を “最小” にすると、作成されるすべてのユーザの既定のパスワードが “SYS” に設定されます。これらのユーザのパスワードをできるだけ早く別の値に変更することを強くお勧めします。変更することで、システムのセキュリティ・レベルが低くても、運用開始時からアクセス制御が確立されるからです。

読み取り専用のデータベース CACHELIB

Caché バージョン 5.1 では、セキュリティ上の理由から、CACHELIB が読み取り専用のデータベースになりました。これによって、以前とは運用方法が変わります。CACHELIB はサイトで読み取り専用データベースのままにしておくことを強くお勧めします。以前 CACHELIB に配置されていたサイト定義およびアプリケーション定義のグローバル、クラス、テーブルなどは、別の場所に移動してください。

制約

以下は、Caché 5.1 に適用される制約、または Caché を実行する特定のオペレーティング・システムに適用される制約です。

システム間の情報一貫性の維持

クラスタ化された Caché システムでは、クラスタのすべてのシステムにおいて、ユーザ、ロール、アプリケーションなどのリストが同じままであることが望まれます。Caché バージョン 5.1 の初期リリースには、あるシステムから他のシステムに変更を反映する仕組みがありません。これに対処するには、管理者が手動で、同一の変更を各システム上で行う必要があります。

Kerberos との一貫性の維持

認証メカニズムとして Kerberos を使用しているサイトでは、Kerberos が保持している有効なユーザのリストに対する変更を、手動で Caché に反映させる必要があります。このことを自動的に行うメカニズムが Caché の今後のバージョンに組み込まれる場合がありますが、初期リリースにはありません。

監査ログの統合

複数のシステム (例えば 1 つのクラスタの全システム) からの監査データに対して、監査レポートや、サイト独自の分析を実行するには、個々の監査ログを手動で 1 つにまとめる必要があります。

ライト・イメージ・ジャーナル・ファイル

Caché 5.1 では、クラスタ化されたシステムにおけるリカバリ機能の向上のために、ライト・イメージ・ジャーナル (WIJ) ファイルのフォーマットが変更されています。この結果、以下の 2 つの点で影響があります。

  1. アップグレード対象のシステムにおいて、未解決の障害が残っている場合は、新しいバージョンにアップグレードする前に、Caché を再起動してリカバリを行ってください。

    このようにしなければ、ジャーナル・パージ・ユーティリティが旧形式のジャーナル・ファイルを認識せず、破壊されたジャーナル・ファイルが存在するというエラーを報告します。このエラーを避けるには、アップグレード前に適切なオペレーティング・システムのコマンドを使用して、旧形式のジャーナル・ファイルをバックアップ・ディレクトリに移動します。

  2. ECP 構成の全メンバが、同じバージョンの Caché を実行している必要があります。あるメンバをアップグレードする場合は、残りのメンバもアップグレードする必要があります。

古いジャーナル・ファイルを Caché 5.1 にリストアする必要がある場合、JConvert ルーチンと %JRead ルーチンを使用することができます。

シャドウイング

Caché をアップグレードすると、既存の互換モードのシャドウが高速モードに変換されます。変換された高速モードのシャドウがソースと共に機能するかどうかは、ソースの構成によって決まります。Caché 5.1 によって、高速モード・シャドウイングのための自動エンディアン変換が行われます。

互換モード (以前はレコード型転送モードと呼ばれていました) はサポートされません。

Important:

Caché 5.1 のシャドウイングは、Caché の以前のリリースとは互換性がありません。ソース・サーバおよび宛先シャドウはどちらも、Caché 5.1 で実行する必要があります。

クラスタ

Caché 4.1 のクラスタ、Caché 5.0 のクラスタ、および Caché 5.1 のクラスタを同じハードウェア上で共存させることはできますが、これらをクラスタ化することはできません。これらのクラスタがお互いに通信する必要がある場合、DCP または ECP を使用する必要がありますが、ECP の使用をお勧めします。

埋め込み SQL 内の非 % 変数の管理

ObjectScript プロシージャ内で埋め込み SQL 文が使用する任意の非 % 変数は、プロシージャの public 変数リストに追加し、プロシージャ内で New コマンドを実行する必要があります。Caché の制約ではありますが、public リストと new リストにこれらの変数を手動で簡単に追加できるように、マクロ・プリプロセッサに変更が加えられています。

ホーム, 構成, 詳細設定 で SQL 設定の [.INTコード中にSQL文をコメントとして残す] が “[はい]” の場合、コメント内の SQL 文と共に、SQL 文によって使用される % の付いていない変数がコメント・テキストにリストされます。このように変数をリストすることで、簡単に変数リストを検出して、カット・アンド・ペーストで MAC コードの public リストや new リストに移動します。

グローバル名の中の Unicode

グローバル名に含まれる Unicode のサポートは、まだ完全には機能しないので、使用しないでください。

Caché RPM キット

Caché RPM キットは /usr/cachekit/5.1 にインストールします。/usr ディレクトリは、読み取り専用でマウントされる場合や、空き領域がほとんどない場合があります。必要に応じて場所を変更してください。

データベースの相互運用性

以前のバージョンの Caché で作成されたデータベースをバージョン 5.1 でマウントすることが可能です。また、データベースをアップグレードすれば、そのまま使用できます。ただし、このプロセスを元に戻すことはできません。アップグレードされたデータベースを以前のバージョンに戻すことはできません。

Note:

バージョン 5.0 を実行するシステムとバージョン 5.1 を実行するシステムの間で双方向のデータ移動を行うユーザは、異なるバージョン間での移動に %GOF/%GIF ルーチンを使用することをお勧めします。

アップグレードではローカル・データベースのみを処理

Caché 5.1 では、$SYSTEM.OBJ.UpgradeAll() を実行したときに、アップグレード対象のデータベースがあるかどうか検索されるのはローカルのみです。リモートでマウントされたデータベースは無視されます。このようなデータベースをアップグレードするには、リモート・システム上で UpgradeAll() を実行する必要があります。

ECP を使用する場合の Caché のバージョン

コンパイラがアップグレードされているため、ECP 構成内のシステムは以下のいずれかでなければなりません。

  • すべてバージョン 5.1 上にあります。または

  • データ・サーバはバージョン 5.1 になければなりませんが、アプリケーション・サーバはバージョン 5.0 でもバージョン 5.1 でもかまいません。

Note:

バージョン 5.1 のアプリケーション・サーバをバージョン 5.0 のデータ・サーバで実行することは可能ですが、アプリケーション・サーバで使用されるルーチンが、そのアプリケーション・サーバのローカルのデータベースにマッピングされている必要があります。その必要がある場合は、インターシステムズのサポート窓口Opens in a new tabにご連絡ください。

バージョン 5.1 から以前のバージョンへのアプリケーションの移行

Caché 5.1 から以前のリリースにアプリケーションを移植することには問題が多く、アプリケーションが依存するこのバージョンの機能 (コンパイラの動作、新しいストリームの実装、アプリケーション用にエクスポートされる XML における変更、新しいクラス表現など) にも左右されます。その必要がある場合は、インターシステムズのサポート窓口Opens in a new tabにご連絡ください。

ODBC および JDBC の互換性

プロトコルにおける変更のため、Caché 5.1 付属の ODBC および JDBC クライアントが対応するのは、バージョン 5.0.13 以降の Caché サーバのみとなっています。バージョン 5.0.13 より前のバージョンの Caché サーバに接続しようとすると、エラーが発生します。

RoseLink

現時点では、RoseLink が Caché へのアクセスを試行するときに使用されるのは、標準の SQL ユーザ名およびパスワードのみです。したがって、インストールの既定のセキュリティ・レベルが "標準" または "ロック・ダウン" であるシステム上ではサポートされません。この制約は、Caché 5.1 の次回メンテナンス・バージョンにおいて撤廃される予定です。

また、使用されるクラスにアクセスするために、ユーザに %Development:Use のアクセス許可が付与されている必要があります。

Dreamweaver

Dreamweaver MX から Caché へのアクセスに使用する接続は、このバージョンでは使用できません。この制約は、Caché 5.1 の将来のメンテナンス・リリースにおいて撤廃される予定です。

Perl および Python の言語バインディング

Perl および Python の言語バインディングがサポートされるのは、32 ビット版の Windows 上のみです。

C++ 言語バインディング

C++ 言語バインディングがサポートされるのは、Visual Studio 7.1 を使用する Windows プラットフォーム上のみです。

プラットフォーム固有の項目

ここでは、特定のプラットフォームに関係する項目について説明します。

Windows
  • ヘルプのフォーマットの変更

    コマンド css.exe および ccontrol.exe の使用法についての情報が、HTML 形式で用意されています。これらのコマンドを実行するときに、最初の引数として “help” を指定すると、既定のブラウザが起動されてヘルプ・ファイルが表示されるようになりました。

  • 新しい日本語ロケール

    Windows 用の新しい日本語ロケール (jpww) が追加されました。これは、標準の jpnw ロケールに似ていますが、Telnet ターミナル用の既定値が SJIS ではなく UTF8 である点が異なります。Windows 上で新規日本語インストールを行うときは、既定ではこの新しいロケールがインストールされます。Caché のアップグレードを行うときは、以前のロケールが維持されます。

  • %path% 環境変数の変更

    システムのセキュリティを向上させ、Caché コンポーネントの検出方法を統一するために、バージョン 5.1 では以下のファイル・システム・ディレクトリ名が追加されています。

    \Program Files\Common Files\InterSystems\Cache
    

    このディレクトリ名は、Windows システムの %path% システム環境変数に追加されています。これは、このマシンのすべてのユーザに適用されるように、HKEY_LOCAL_MACHINE ハイブに追加されます。

  • Visual Studio 7.1

    Microsoft Windows 上で、Caché が Visual Studio 7.1 でコンパイルされるようになりました。Caché と通信するアプリケーション (例えば CALLIN インタフェースや CALLOUT インタフェースを使用するアプリケーション) は、Visual Studio をこのバージョンにアップグレードする必要があります。

Windows XP Professional

マップされたドライブは Windows XP Professional 上でサポートされません — Windows XP Professional でのセキュリティの改善により、Microsoft はユーザにマップされたドライブの使用を推奨していません。また、マップされたドライブの使用を試みると、以前とは異なる動作となります。

GUI ツールから、または telnet セッションから、マップされたドライブにアクセスするには、XP Professional ユーザは以下の手順に従うことをお勧めします。

  • リモートのマップされたドライブには、これまでどおり、構成でユーザ名とパスワードを入力します。さらに、ZSTU スタートアップ・ルーチンを編集し、マップしたドライブに以下の行を追加します。

    Set x=$zf(-1,"net use z: \\someshare")
    
  • 仮想マップ・ドライブには、この行を subst コマンドでマップされた各ドライブに追加します。

    Set x=$zf(-1,"subst q: c:\somedir\someotherdir")
    

起動後は、それ以上のマッピングを追加することはできません。

Important:

上記手順は、構成で入力したユーザ名と同じユーザ 1 人だけが Windows にログオンしているという開発状況を前提にしています。ターミナル・サーバ環境など、その他の状況では、予測できない結果を生じる場合があります。

以下の注意は、Microsoft から出されたこの問題の対処法です。

[Windows XP Professional におけるリダイレクト・ドライブ : Windows XP Professional では、ドライブ文字はシステムに対してグローバルではありません。ログオン・セッションごとに、受け取るドライブ文字 A ~ Z の組み合わせは異なります。したがってリダイレクト・ドライブは、異なるユーザ・アカウントで実行しているプロセス間では共有できません。また、サービス (または独自のログオン・セッションで実行しているすべてのプロセス) は、異なるログオン・セッションで構築されたドライブ文字にはアクセスできません。]

マップされたドライブを使用するには、以下のように Caché を開始するという方法もあります。

\cachesys\bin\ccontrol start configname

この方法では、ZSTU ルーチンに何も追加する必要がなく、ユーザ名やパスワードを入力する必要もありません。さらに、ユーザがマップしたドライブ、またはスタートアップ後に subst コマンドを使用してパスをマップしたドライブも、利用可能です。この方法での制約は、Caché を開始したユーザが Caché にログオンしている間のみ Caché が稼動するということです。

Windows Enterprise Server 2003

このバージョンの Windows に付属している Internet Explorer のバージョンでは、セキュリティ関連の構成オプションがすべて無効になっています。その結果、システム管理ポータルによって表示されるさまざまなページに影響が及びます。例えば、スクリプトが実行されないので、スクリプトによって生成される情報が表示されません。正しい動作に戻すには、インターネットのセキュリティ・レベルの設定を “高” から “中” に変更します。

ユーザが、システム上のシステム管理ポータルに初めてアクセスするときに、このサイトを “信頼済み” のリストに追加するかどうかを尋ねる Internet Explorer のメッセージが表示されます。応答として承諾を選択すると、このサイトに対するインターネット・セキュリティ・レベルも "中" に変更されます。

Mac

XSLT (Extensible Stylesheet Language Transformation) プロセッサの 1 つである Xalan がサポートされるのは、OS x 10.4 上のみです。

OpenVMS
  • Itanium 上で Kerberos を使用してアクセスするには ECO が必要

    Kerberos 認証を使用する OpenVMS サーバにアプリケーションからアクセスするには、ftp://ftp.itrc.hp.com/openvms_patches/layered_products/i64/ ftp サイトからダウンロードできるパッチ HP-I64VMS-TCPIP-V0505-11ECO1-1Opens in a new tab をインストールする必要があります。この ECO は TCP/IP 用のもので、実際のオペレーティング・システム用ではありません。このパッチがインストールされていない場合は、C++ バインディング、ODBC、JDBC、およびスタジオを使用するクライアントに、サーバから誤った応答パケットが送信されることがあります。

    Note:

    この ECO を適用するのは、Itanium ハードウェア上の OpenVMS のみです。Alpha 上の OpenVMS には必要ありません。

  • CSP ゲートウェイの削除

    OpenVMS 上の CSP ゲートウェイはサポートされなくなりました。詳細は、"OpenVMS のインストール手順" を参照してください。

  • GSS のパスワード・マスクの制限

    Kerberos を使用するシステム上で JDBC を介して Caché にアクセスしようとしたときに、ユーザの資格情報が見つからず、かつユーザの ID が呼び出し元から提示されていない場合は、JDBC が Kerberos に呼び出し元の認証を要求します。このとき、OpenVMS 上のターミナル IO の特性により、パスワードのエコーは抑止されず、マスクもされません。

  • スタジオからの SOAP クライアント・ウィザードの使用

    スタジオから SOAP ウィザードを起動しようとしたとき、OpenVMS に対して使用される現在の Web サーバを指すようにアプリケーション /isc/studio/template が設定されていない場合、起動は失敗します。

  • Caché のプロセスと /SYSTEM

    Caché の一部であるプロセスはすべて UIC=[1,4] で実行されます。したがって、これらのプロセスで使用される Caché 関連の論理デバイス (例えば .cpf ファイル内で指定されているデバイス) はすべて、アクセス・エラーを防ぐためにシステム・テーブル内で定義されている必要があります (/SYSTEM で定義)。

  • WebServerName と WebServerPort

    バージョン 5.1 では、WebServerName と WebServerPort の両方が定義されていなければ、スタジオからクラス・ドキュメントにアクセスすることはできません。これらは、[システム管理] ページ、ホーム, 構成, 詳細設定 の [その他] カテゴリにあります。

AIX®
  • IBM Java ランタイムと Kerberos

    IBM Java 実行時環境を使用するシステム上 (AIX® 32 ビット、AIX 64 ビット、および SUSE Linux Enterprise Server) では、kinit を使用すると、Kerberos のプリンシパル名およびパスワードの入力要求プロンプト表示 (プリンシパル名およびパスワードの API) と互換はありません。kinit を使用するには、以下のファイルを修正します。

    ${java.home}/lib/security/iscLogin.conf
    

    これによって、モジュール com.sun.security.jgss.initiate のオプションは以下のとおりになります。

    useDefaultCcache=true
    

    このランタイムを使用するときは、以下の場所にある Java ルーチンが動作します。

    {java.home}/bin/kinit
    

    以下の場所にあるネイティブの Kerberos ルーチンは動作しません。

    /usr/krb5/bin/kinit
    
  • NFS でマウントされたファイル・システムと排他性

    Caché データベース (.dat および .ext) およびロック (.lck) ファイルを作成するときに、O_EXCL (排他的アクセス) が使用されます。ただし、この排他的アクセスが NFS によって保証されないという既知の制約があります。

Linux

Linux 環境の NetApp NFS でマウントされたファイル・システムでは、suid:sgid 実行形式ファイルによって作成されたファイルの所有者が、標準のファイル・システムの場合とは異なり、非 UNIX® 標準の所有者となります。実行可能プログラム上の SGID ビットでは実行に失敗しますが、SUID ビットではファイルの所有者が実行可能プログラムの所有者に正しく設定されます。この動作になるのは、NetApp システム上のみです。

Red Hat 3.0/4.0 と IBM WebSphere MQ

MQ インタフェースを使用する場合、Red Hat バージョン 3.0 および 4.0 上で Caché 5.1 を実行するときは、IBM WebSphere MQ バージョン 6.0 が必要です。

Linux/AMD64

Intel プロセッサ上の Linux 実装から AMD64 上の Linux に Caché をアップグレードする場合、Caché の新しいライセンスが必要です。インターシステムズの Web サイトOpens in a new tabには、以下のことを示す内容が記載されています。

“32 ビット CPU と 64 ビット CPU の間には大きな違いがあるため、32 ビット用と 64 ビット用で異なる Caché ソフトウェアが用意されています。その結果、ライセンスの観点においてはこれらは異なるプラットフォームです。そのため、プラットフォーム固有の Caché のライセンスを、別のプラットフォームに移すことはできません(通常の下取りポリシーが適用されます)。プラットフォームに依存しないライセンスは、無償で移行可能です。”

SUSE Linux Enterprise Server
  • IBM Java ランタイムと Kerberos

    IBM Java 実行時環境を使用するシステム上 (AIX® 32 ビット、AIX 64 ビット、および SUSE Linux Enterprise Server) では、別の Kerberos kinit が必要になります。AIX® に付属する説明を参照してください。

  • ターミナルと Kerberos 認証

    SUSE Linux Enterprise Server 9 を AMD64 上で実行する場合は、パッケージの扱いが他のバージョンの Linux とは若干異なります。その結果、このシステム上でターミナルを Kerberos 認証と併用しようとすると、エラーが発生することがあります。これは、インストール時に開発者用パッケージのインストールが選択されていない場合です。この場合、正常に動作させるには、以下のパッケージをインストールする必要があります。

    • heimdal-devel

    • heimdal-devel-32bit

    パッケージの場所を探すには、検索機能を使用して、名前が “heimdal” で始まるすべてのパッケージを検索します。インストール時、ほとんどの場合に (“フル” を除く)、一覧に前述の 2 つのパッケージ名があり、未選択の状態になっています。これらを選択して、インストールを続行してください。

UNIX®

Caché を UNIX® 上にインストールするときに、既定のディレクトリとして cachesys 以外を指定できます。 このディレクトリ・パスは、環境変数 CACHESYS で指定されているものとします。ccontrol コマンドおよび csession コマンドでは、この環境変数が使用されます。インストール時に定義されていれば、Caché はそのディレクトリにインストールされます。定義されていない場合、Caché は UNIX® での標準の場所である /usr/local/etc/cachesys にインストールされます。

ccontrolcsession のどちらも、実行可能ファイルと同じディレクトリにレジストリが存在する必要があります。セキュリティ上の理由により、ccontrol では、所有者が root で、root のみが書き込み可能であるようにレジストリが保護されていることが検証されます。

Tru64 UNIX®

Tru64 システムでは、他の UNIX® ファイル・システムとは異なり、グループ所有権は作成プロセスのグループ ID に基づいて設定されません。代わりに、ファイルのグループ ID は、親ディレクトリのグループ ID に設定されます。

ただし、vfs サブシステム属性 “sys_v_mode” が 1 に設定されている場合は、ファイルのグループ ID が、プロセスのグループ ID と親ディレクトリのグループ ID のいずれかに設定されます。後者に設定されるのは、親ディレクトリの S_ISGID ビットが設定されている場合です。新しいファイルのグループ ID が、プロセスの実効グループにも、その補助グループ ID のどれにも一致しない場合は、新しいファイルの S_ISGID ビットがクリアされます。

通常、このことによって問題が発生することはありません。Caché のユーティリティによって作成されるすべてのディレクトリのグループ ID は、正しいグループ所有者に設定されるからです。ただし、場合によっては問題が発生することもあります。例えば、管理者が ^DATABASE を使用して、存在しないディレクトリ内にデータベースを作成すると、ディレクトリは作成されますが、そのディレクトリのグループ ID の調整は行われず、親ディレクトリから継承されたグループ ID になります。その結果、親ディレクトリから継承したグループ ID を持つこのデータベースに、cacheusr がアクセスできなくなることがあります。ディレクトリを作成するその他の Cache ユーティリティ (ジャーナリング、シャドウイングなど) にも、同じ問題があります。

Note:

システムを円滑に機能させるため、Caché で使用するすべてのファイル・システムおよびディレクトリで、sys_v_mode を 1 に設定することをお勧めします。詳細は、open(2) システム・コールのオンライン・マニュアルを参照してください。

HP-UX

Caché の暗号乱数ジェネレータ (データベースの暗号化および暗号解読などに使用) には、内部状態を初期化するために、真の乱数性 (エントロピー) のソースが必要です。 HP-UX 11i を除く、すべてのサポート対象 UNIX® プラットフォームに、特別なデバイス・ファイル /dev/urandom があり、カーネルのスレッド・タイミングに基づく真のエントロピー・ソースとなります。 HP-UX 上では、この機能は HP-UX Strong Random Number GeneratorOpens in a new tab の一部となっています。これは、HP から無償で提供およびサポートされるオプションのコンポーネントです。

Caution:

このコンポーネントがインストールされていない場合は、システム上で利用可能な他のエントロピー・ソースが Caché で使用されます。ただし、これらの乱数性は分析されておらず、そのため、Caché によって生成される暗号の値は、他と比べて強くはありません。

Solaris

Solaris 上で実行されるアプリケーションは、パスワードを使用して資格情報の初期セットを取得できません。例えば、Kerberos 認証を必要とする Caché インスタンスにターミナルを介してアクセスしようとした場合にこの問題が発生します。Kerberos 認証を Caché と併用するには、以下に示すパッチを Solaris に適用する必要があります。

  • Solaris 10 の場合は 121239–01 および 120469–03 (以上)

  • Solaris 9 の場合は 112908-22 および 112907-06 (以上)

開発者

このセクションでは、以前のバージョンの Caché 上で実行されているアプリケーションの設計者、開発者、および保守担当者に関係する情報を示します。バージョン 5.1 においては上位互換性が重要視されていますが、セキュリティの重要性が高まった結果、Caché の核となるいくつかの部分で再設計および再実装が行われています。必然的に、既存のアプリケーションにもこの影響が及びます。

ここでは、各項目について簡単に説明します。ほとんどの場合は、ドキュメントの別の箇所に詳しい説明があります。

システム管理ポータル

以前のバージョンでは、Caché を管理する方法は Caché が実行されるプラットフォームに大きく依存していました。バージョン 5.1 では、すべてのプラットフォームに共通の新しい管理用インタフェースが導入されています。Caché 5.1 では、ブラウザベースのインタフェースであるシステム管理ポータルを使用してシステムを管理します。

これは主に管理者およびオペレータ向けですが、場合によっては開発者もシステム管理ポータルの機能の一部を使用する必要があります。このドキュメントの "管理者" セクションに概要の説明がありますが、システム管理ポータルの詳細は、"システム管理" のドキュメントに記載されています。

特権を必要とする操作

Caché には以前から、"特権を必要とする操作" の概念がありました。Caché 5.1 では、この概念がより明確に定義されて強化され、より詳細になりました。以下の 2 つの条件のいずれかを満たしていなければ、特権を必要とするコマンド、ルーチン、関数、メソッドなどの実行は許可されません。

  1. CACHESYS データベースからロードされた未修整ルーチンによって起動されること。

  2. 処理の実行するためのロールを付与されたユーザによって起動されること。ほとんどの場合、特権を必要とする操作は %DB_CACHESYS:W を必要としますが、特定の操作では必要がない場合があります。

これらの条件のいずれかが True の場合、要求された操作は処理されます。

アップグレード後のユーザ・アプリケーションのリコンパイル

このドキュメントの "管理者" セクションに記載されているように、Caché をこのバージョンにアップグレードした後は、ユーザ・アプリケーション・クラス、および埋め込み SQL 文のあるルーチンをリコンパイルする必要があります。

CACHESYS および CACHELIB の再編成

堅牢なセキュリティの実装には、他の同様のシステムにも共通する多数の特徴があります。以下はその例です。

  • セキュリティ・モジュールを実装する関数の数をできるだけ少なくする。

  • これらをまとめて他のシステム関数から隔離することで、保護できるようにする。

  • 正常に動作し、故障が良性であるかについて、これらの関数を個別に検証する必要がある。

Caché のセキュリティを強化するために、これらの要件の観点から、CACHESYS データベースおよび CACHELIB データベースに存在する低レベル・ルーチンの見直しが行われました。その結果、これらのデータベースの内容が再編成されました。CACHESYS (マネージャ・データベース) には、システム管理に必要な低レベル・ルーチンのみ格納されます。それ以外のものはすべて、CACHELIB に移動しました。

これらの変更に対するガイドラインを以下に示します。

システム・クラスの場合

  • %SYS パッケージのクラス内のメソッド

    • これらは、保護されたシステム・ルーチンを起動するので、マネージャ・データベース (CACHESYS) 内に配置されます。

    • 名前が % で始まっているので、他のすべてのネームスペースにマッピングされます。

  • %System パッケージのクラス内のメソッド

    • これらは、CACHELIB データベース内に配置されます。既定の設定では、このデータベースは読み取り専用でマウントされます。保護された機能を起動することはありませんが、従来のアプリケーションをサポートするためにこのデータベース内に配置されます。

    • 名前が % で始まっているので、他のすべてのネームスペースにマッピングされます。

  • Sys パッケージおよび System パッケージ内のメソッドは、それぞれ %Sys パッケージおよび %System パッケージと同じ場所に配置されます。ただし、これらの名前は % では始まっていないので、そのデータベース内部でのみ認識されます。

名前が $SYSTEM.<name> の形式のシステム関数の場合

  • この名前が関連付けられたメソッドが、内部的に既知のシステム・クラス内のものである場合は、そのメソッドを起動します。

  • それ以外の場合は、<name> という名前の %System メソッドを起動しようとします。つまり、$SYSTEM.SomeClass.That Method() は、##class(%System.SomeClass).ThatMethod() と同じことになります。

グローバルの場合

  • 名前が %q で始まるグローバルはすべて、CACHELIB (既定の設定では読み取り専用) にマッピングされます。

  • それ以外のグローバルはすべて、CACHESYS (既定の設定では読み書きが可能) にマッピングされます。

マッピングの詳細を表示するには、^%SYS.GXLINFO を使用します。

CACHELIB を読み取り専用としてマウント

CACHESYS および CACHELIB の再編成において、通常の運用で変更可能な情報はすべて CACHESYS にまとめられました。したがって、既定では CACHELIB は読み取り専用データベースとしてマウントされます。

% で始まるグローバルへのアクセス制限の強化

既定では、他のデータベースに存在して % で始まるグローバルに対する書き込みアクセス許可はルーチンに与えられません。 バージョン 5.1 では、この規則が一貫して適用されます。このことを変更するには、システム管理ポータルの ホーム, セキュリティ管理, システムセキュリティ設定 にアクセスし、[パーセントで始まるグローバルへの書き込みを有効に] の設定を “[はい]” に変更します。

CNLS に対するアクセス許可

CNLS アプリケーションは、Caché インストールのロケールを変更するために使用します。このアプリケーションを実行するには、%Admin_Manage:U が必要です。

認証を受けたネームスペースとルーチンをコマンド行よりも優先

以前のバージョンでは、ネームスペースおよびルーチンがコマンド行のパラメータとして指定されると、作成されるプロセスでは必ずそのネームスペースが使用され、そのバージョンのセキュリティ・メカニズムで指定されたネームスペースやルーチンは無視されていました。

バージョン 5.1 では、Caché のインストール時に [最小] 設定が指定された場合の csession の動作は以前と同様になります。ユーザが認証を受ける必要がある場合は、そのユーザのネームスペースおよびルーチンが、コマンド行で指定されたネームスペースやルーチンの設定よりも優先されます。

ルーチンに対する変更

ルーチンおよびグローバルの移動

Caché 5.1 では、すべての %- ルーチンと %- グローバルが上記のように再編成されています。

Note:

ユーザ指定またはサイト指定のルーチンの名前が % で始まっている場合は、これと同じ規則に従う必要があります。このように変更するには、管理者特権が必要です。これは、既定では CACHELIB データベースはインストール時に読み取り専用に設定され、データベースの変更はできないからです。

サイトに追加されたルーチンによってグローバルを CACHELIB 内に作成することが通常の運用で必要なければ、このようなルーチンのインストール後に、CACHELIB を再び読み取り専用に設定することをお勧めします。

ルーチン名の "%" の削除

Caché のシステム関数の見直しを行った結果、多数のルーチンが、その使用を制御する必要のあるシステム管理関数になりました。したがって、以下のルーチンの名前から “%” が削除され、その結果、マネージャ・データベースの保護下に置かれました。

  • BUTTONS

  • COLLATE

  • DMREPAIRDSET

  • LANG*

  • MATH

  • NLSNLSCOMPNLSLOADNOREP

  • ROLLBACK*

  • SSSSVNJOBSSVNLOCKSSVNROUTINEST

  • UPDATECLASS

  • WcommWpfilesWrWr1WsbackWsdbWsdbaWsmkeyWsnlsWsnls2

Important:

このように変更されたことにより、これらのルーチンを起動するには、CACHESYS データベース内の未編集ルーチンから起動する必要があります。間接指定の一部としても起動できませんし、CACHESYS データベースに対する書き込みアクセス許可のあるプロセス内でも起動することはできません。

ルーチン名の変更

システム関数との関係を強調するために、いくつかのルーチンの名前が変更されました。

以前の名前

新しい名前

%DM

%SYS.DATABASE

%FILE

%SYS.FILE

%GCREATE

%SYS.GCREATE

%GD

%SYS.GD

%GIFMSM

%SYS.GIFMSM

%GLO

%SYS.GLO

%GOF1

%SYS.GOF1

%GSETNS

%SYS.GSETNS

%GSET

%SYS.GSET

%GXLINF1

%SYS.GXLINF1

%GXLINFO

%SYS.GXLINFO

%LICENSE

%SYS.LICENSE

%MACHINE

%SYS.MACHINE

%MONLBL

%SYS.MONLBL

%NOJRN

%SYS.NOJRN

%PMODE

%SYS.PMODE

%RI2

%SYS.RI2

%RIMF

%SYS.RIMF

%RI

%SYS.RI

%SYSCONV

%SYS.SYSCONV

%Wcdu

%SYS.Wcdu

%Wgr

%SYS.Wgr

%Wgs

%SYS.Wgs

%Wsys

%SYS.Wsys

削除されたルーチン

内容を見直した結果、いくつかのルーチンが、他の部分と重複する機能であることが判明しました。これらは削除されました。

  • %CLI — 同じ機能を Caché の $zf(-1) で利用可能です。UNIX®、OpenVMS、および Mac 上では、コマンド行の解釈は !<command> によって行われます。Windows システム上では、DOS コマンドの START によってこの機能が実行されます。

  • %DKIOERROR — その呼び出しは、$$$ERROR または $SYSTEM.Error の使用で置き換える必要があります。

  • %GED — 代わりに %GCHANGE メソッドと %Library.GlobalOpens in a new tab メソッドを使用します。

  • %GDOLD — このルーチンは削除されています。

  • %GROWTH — このルーチンの機能は、SYS.DatabaseOpens in a new tab クラスに移動しました。

  • %GTARGET — このルーチンは削除されています。

  • %LM — このルーチンの機能は、SYS.LockOpens in a new tab クラスに含まれています。

  • %LMFCLI — このルーチンの機能は、$SYSTEM.License クラスに含まれています。

  • %qserver — ユーザ・アクセス可能なエントリ・ポイントは、$SYSTEM.SQL に移動しました。

  • %RMAC — このルーチンは削除されています。

  • %START — このルーチンは削除されています。

  • %USER — このルーチンは $USERNAME に置き換えられました。

  • %UTIL — この内部ルーチンは、削除されました。このルーチンのメッセージ・ロギング機能は、システム・マクロ LOGMSG に変換されました。

スタブ・ルーチンの追加

頻繁に起動されるルーチンのいくつかが CACHESYS に移動し (%DM%LICENSE%GD、および %SS)、名前も変更されています。これらの新しいルーチンを呼び出すスタブ・ルーチンが、互換性のために元の位置に残されています。アプリケーションでは新しい名前を使用するように移行することをお勧めします。

スタブ・ルーチンの追加で、SYS タグが %SYS ルーチンから削除されました。

ルーチンの削除

上記の変更に加えて、内部ルーチンおよび廃止されたルーチンがこれらのライブラリから削除されました。このことがアプリケーションに影響すると考えられる場合は、インターシステムズのサポート窓口Opens in a new tabにご連絡ください。

%LANG ルーチンに対してはマッピングを行わない

Caché 5.1 では、言語拡張機能に使用される %LANG* ルーチンのルーチン・マッピングは無視されます。実行されるルーチンは、必ず %SYS ネームスペース (CACHELIB) にあるルーチンになります。

クラスの変更

バージョン 5.1 の開発において、クラス使用時の精度を向上してあいまいさを排除するために、多数の変更が加えられました。このセクションでは、これらをまとめて説明します。

置き換えられたクラス

以下のクラスは、機能性の高い別のクラスによって置き換えられたため、システムから削除されました。以下はそのリストです。

クラス

置き換えられたクラス

%CSP.Util.LoginForm

なし。これは、インターシステムズが開発したその他のクラスでのみ使用される内部クラスで、CSP ログイン・メカニズムで置き換えられます。

%CSP.Util.NamespaceForm

%CSP.Util.Password

なしこれは、インターシステムズが開発したその他のクラスでのみ使用される内部クラスです。

%Library.CacheProperty

なしこれは、インターシステムズが開発したその他のクラスでのみ使用される内部クラスです。

%Library.StreamAdaptor

このクラスは、異なる環境に対して特定の機能を提供する複数のクラスに置き換えられます。以下に例を示します。%Library.BinaryStreamOpens in a new tab%Library.CacheStreamOpens in a new tab%Library.CacheStreamLegacyOpens in a new tab%Library.CharacterStreamOpens in a new tab%Library.FileBinaryStreamOpens in a new tab%Library.FileCharacterStreamOpens in a new tab%Library.SerialStreamOpens in a new tab%Library.StreamOpens in a new tab

%Library.StringTimeStampOpens in a new tab

置き換えの機能については、%Library.TimeStampOpens in a new tab を参照してください。

%Studio,SourceControl.Example

%Studio.SourceControl.BaseOpens in a new tab を参照してください。

%SYSTEM.Database

このクラスの機能は、SYS.DatabaseOpens in a new tab で置き換えられています。

%SYSTEM.ECPOpens in a new tab

このクラスの機能は、Config.ECPOpens in a new tabSYS.ECPOpens in a new tab で置き換えられています。

%SYSTEM.ProcessOpens in a new tab

SYS.ProcessOpens in a new tab を参照してください。

%SYSTEM.Server

なし。これは、インターシステムズが開発したその他のクラスでのみ使用される内部クラスです。

%SYSTEM.Monitor.*

バージョン 5.2 では、モニタ機能のデザインを一新しました。以前 %SYSTEM.Monitor クラスを使用していたアプリケーションには、大幅な変更が必要となります。%Monitor パッケージと %MonitorTools パッケージおよび Config.MonitorOpens in a new tabConfig.MonitorTools クラスを参照してください。

新しいクラス

以下のクラスが、このバージョンで新たに追加されました。

プログラムの中のクラス名が未修飾でも正しい場所に解決されていた場合に、%Library に追加された新しいクラスと同じ名前のクラスがアプリケーションで定義されていると、名前の競合が発生することがあります。

クラスのコンパイルにおけるクラス名の大文字と小文字の競合

Caché バージョン 5.0 では、クラスで定義するメソッドの名前が、スーパークラスに含まれるメソッドと同じ綴りで、大文字と小文字の区別だけが異なるということも可能でした。例えば、%Library.PersistentOpens in a new tab から継承するクラスの中で定義された %save() という名前のメソッドは、スーパークラスの %Save() メソッドとは別のメソッドであると扱われていました。

バージョン 5.1 では、この状況でコンパイル・エラーが発生します。例えば、CSP アプリケーションで include()link() というメソッドが定義されていると、これらが %CSP.Page.Include() および %CSP.Page.Link() と競合するようになります。

単純クラス名を使用した場合のあいまいな解決

アプリケーションで参照しているクラスの名前がパーセント記号で始まり、そのパッケージ名が指定されていない場合、クラス・コンパイラは、%Library パッケージ内にそのクラスがあるかどうかを検索します。以下はコードの例です。

Set BaseDir = ##CLASS(%File).ManagerDirectory()

上記例は、以下のように記述されているものと解釈されます。

Set BaseDir = ##CLASS(%Library.File).ManagerDirectory()

プログラムの中のクラス名が未修飾でも正しい場所に解決されていた場合に、%Library に追加された新しいクラスと同じ名前のクラス、例えば %UtilityOpens in a new tab がアプリケーションで定義されていると、名前を正確に解決できないことがあります。

クラス・メンバ名検査の厳密化

Caché バージョン 4.1 では、名前の綴りが同じで大文字と小文字の使い方が異なる 2 つのクラス・メンバを定義することはできませんでした。バージョン 5.0 には、このエラーが報告されないというバグがありました。

Caché バージョン 5.1 ではこのバグが解決されましたが、バージョン 5.0 でコンパイルできたこのようなクラスを今後もコンパイルできるようにするために、"厳密チェック" フラグをオフに設定することで、この検査を無効にできます。このように設定するには、以下のコマンドを実行します。

Set ^%qCacheObjectSys("strictchecking") = 0
Note:

このフラグを設定するには、CACHELIB のアクセス許可を読み取り専用から読み取り/書き込みに変更する必要があります。これは、管理ポータルの ホーム, 構成, ローカルデータベース を使用して行います。

%Library.Persistent に追加された新しいメソッド

%Persistent において新しいメソッドがいくつか実装され、すべての永続クラスに継承されます。この 3 つのメソッドは以下のとおりです。

  • %LockId : クラスのインスタンスに対するロックを取得します。

  • %UnlockId : 前に取得したインスタンス・ロックを解除します。

  • %LockExtent : エクステント内のすべてのインスタンスに対するロックを取得します。

  • %UnlockExtent : エクステントに対するロックを解除します。

  • %GetLock : インスタンスに対するロックの取得を試行しますが、必要に応じてそのインスタンスがメンバとなっているエクステントに、ロックをエスカレートします。

これらのメソッドの詳細は、%Library.PersistentOpens in a new tab のクラス・ドキュメントに記載されています。

Note:

基本ストレージ・メカニズムに対する変更による永続オブジェクトへの影響の詳細は、ここを参照してください。

ユーザ記述の % メソッドとの競合

“%” で始まるメソッド名をユーザ・アプリケーションで使用している場合は、“ベース” クラス内のインターシステムズ提供メソッド (%LIbrary.Persistent など) との競合がないことを確認してください。このバージョンの Caché では、このような名前の数が大幅に増加しています。

IdKey にある <Indexname>Exists メソッドおよび <Indexname>Open メソッド

このバージョンの Caché では、IdKey の <indexname>Exists メソッドおよび <indexname>Open メソッドが用意されています。

すべての永続クラスに、IdKey があります。明示的に定義していない場合またはスーパークラスから継承していない場合、IdKey<n> という名前のインデックスが生成されます。ここで、<n> は、IdKey という名前のインデックスが既に存在する場合に、語根 "IdKey" に付加される整数です。このインデックスは、システム生成インデックスとして定義されます。

以前のバージョンでは、インデックスはクラスのコンパイル時に生成されていました。生成されたインデックスに対する継承解決は適用されず、インデックス・メソッドの生成も行われませんでした。

IsValidDT の変更
  • 既定では生成されないメソッド

    バージョン 5.1 では、%Library.DataTypeOpens in a new tab を拡張するユーザ記述データ型クラスに対して、IsValidDT() メソッドは自動的には生成されなくなりました。以前の動作に戻すには、以下の処理を実行できます。

    Set ^SYS("ObjectCompiler","GenerateIsValidDT") = 1
    
    Note:

    以前の動作に戻すネームスペースごとに実行した後で、影響を受けるルーチンをすべてリコンパイルしてください。

  • 変更されたメソッドの返りタイプ

    以前のバージョンでは、クラス・インスタンス・メソッド、%IsValidDT() は %Integer のタイプの値を返しました。Caché 5.1 では、より正確に %Boolean を返します。

SQLCOMPUTECODE をサポートするメソッド

クラスにおいて、SQL 計算プロパティを定義することができます。それには、プロパティの宣言時に属性 SQLCOMPUTED を指定し、目的の値を計算する SQL コードを指定します。値は、一時的でも、計算されるものでも、保存可能でもかまいません。

計算プロパティに対しては、<property>Get() メソッドが生成されます。このメソッドは、必要に応じて <property>Compute() を起動します。SQLCOMPUTECODE を利用すると、計算時に他の値を参照することができます。この参照は SQL 列に対するもので (下位互換性のために維持されています)、メソッド生成時にプロパティ名に変換されます。

この SQL 列が、埋め込みクラスから投影された列を参照している場合は、<property>Compute() によって、埋め込みプロパティへの拡張参照が生成されます。

Note:

SQLCOMPUTE コードで埋め込みプロパティを使用すると、カプセル化が破壊されます。カプセル化が破壊されることに伴う問題の 1 つは、トリガされる計算フィールドに関するもの、つまり、SQLCOMPUTEONCHANGE が宣言された場合です。埋め込みプロパティ参照は、SQLCOMPUTEONCHANGE ではサポートされません。

継承処理に対する変更

以前のバージョンでは、クラスの継承規則が意図したとおりではないこともありました。例えば、ユーザが、%Library.PersistentOpens in a new tab のサブクラスである User.MyClass というクラスを作成したとします。Caché によって、スーパークラス %Library の既定のパッケージ名が自動的に User.MyClass へ #import として継承されます。この結果、User.MyClass に、以下のように宣言されたプロパティが含まれているとします。

property A as String;

この場合 Caché は、User パッケージと %Library パッケージの両方を検索してこれを解決しようとします。User パッケージに User.String というクラスがある場合は、ユーザの意図する参照先が User.String であったとしても、クラス名の競合が Caché によって報告されます。これに対処するには、以下のようにプロパティ名を完全修飾します。

property A as User.String;

Caché 5.1 でも、明示的な #import 設定はスーパークラスから継承されますが、スーパークラスのパッケージ名が #import に自動的に追加されることはありません。したがって、上記例における A プロパティの解決の結果は 'User.String' となり、名前の競合エラーは発生しません。

Caché による名前解決においても、現在のクラス・パッケージ名が使用されます。User.MyClass の名前に対する #import には、'User' が使用されます。ただし、これはサブクラスに対しては適用されません。

具体的に説明すると、Caché による名前の解決は、現在のクラス名ではなく、その名前が最初に定義されたコンテキストにおいて行われます。例えば、User.MyClass によってメソッド X() が定義されるとします。クラス MyPackage.MyClassUser.MyClass から継承されている場合は、コンパイル時に、MyPackage.MyClass で継承された X() メソッドがコンパイルされますが、このメソッドで使用される未修飾のクラス名の解決は、User.MyClass のコンテキストにおいて行われます。これは、この中で X() が定義されているからです。

ストリーム実装の変更

バージョン 5.1 では、ストリーム・メンバが含まれるクラスをクローン化するときの動作が、以前のリリースとは異なっています。このバージョンでの動作は以下のとおりです。

  • ストリーム・メンバがシリアル・ストリームである場合は、ストリームの OREF がクローンにコピーされます。

  • ストリームが、以下の “古い” ストリーム実装のインスタンスであるとします。

    • %Library.FileBinaryStream

    • %Library.FileCharacterStream

    • %Library.GlobalBinaryStream

    • %Library.GlobalCharacterStream

    その場合、ストリームの OREF がクローンにコピーされます。

  • 上記以外の場合は、ストリーム・コンテンツが同じ型の新しいストリームにコピーされ、この新しいストリームの OREF がクローンに格納されます。

アプリケーションで元のストリームの OREF を維持するには、以下の処理を実行できます。

Set ..ThatStream = oref.%ConstructClone(0)
CDL に代わる XML エクスポート

このバージョンでは、クラスのエクスポート形式として CDL は使用できなくなりました。代わりに、クラスをエクスポートするときは XML 形式を使用します。このリリースでも、インポート形式としては CDL も可能です。

永続スーパークラスは CACHELIB の外部に存在する必要がある

現時点では、永続クラスのサブクラスのエクステント情報が、スーパークラスのエクステント情報と共に保存されます。Caché バージョン 5.1 では CACHELIB が読み取り専用データベースとなっているので、既定では、CACHELIB に存在する永続クラスをサブクラス化することはできなくなりました。このことを試みると、<PROTECT> エラーが発生します。これは、永続クラスがローカルで作成され、CACHELIB に保存された場合でも同様です。

唯一の例外は、SERIAL として指定されているクラスです。このクラスのインスタンスは、インスタンスを参照するクラスに埋め込まれるので、エクステント情報はありません。

%Library.String の TRUNCATE の既定値の変更

文字列のパラメータの代表的なものに、MAXLEN および TRUNCATE の設定があります。MAXLEN の値では、その文字列で可能な最大文字列長を指定します。TRUNCATE の値では、最大長制限の適用方法を指定します。

  • TRUNCATE が True に設定されている場合は、%Library.StringOpens in a new tab 型として宣言されている変数には先頭から MAXLEN 文字数分の文字列のみが格納され、文字列の残りの部分は無視されます。

  • TRUNCATE が False に設定されている場合は、MAXLEN を超える数の文字を変数に割り当てようとすると、エラー・ステータスが返されます。

Caché バージョン 5.1 において、%Library.StringOpens in a new tab の新しいインスタンスでは TRUNCATE の既定値は False になります。以前のバージョンでは、True でした。これは、バージョン 5.1 で作成される新しい文字列のみに適用されます。文字列型の古い項目の既定値は、その項目が作成された時点のままです。

%Close() の従来動作のサポートの終了

Caché バージョン 5.0 では、クローズされたオブジェクトの扱い方が変更されました。%Close が実行されるとき、オブジェクトの参照カウントが 0 になっていると、オブジェクトは破棄されます。オブジェクトに関連付けられている OREF は、“アクティブでない” 状態になると、つまりオブジェクトへの参照がすべて消滅すると、削除されます。

この動作が導入されたときは、%Close に対して Caché の "従来のサポート" を代わりに使用することも可能でした。つまり、バージョン 5.0 より前のバージョンで使用されていた、以下に示す呼び出しを使用するという方法です。

 Do $ZU(68,56,1)

このモードでは、%Close() が実行されるときに、オブジェクトのオブジェクト・レベル参照カウントがデクリメントされ、カウントが 0 になるとメモリから削除されます。OREF の再利用を防止する仕組みはありませんでした。

Cache 5.1 では、従来のモードが削除されています。この関数を呼び出すと、<FUNCTION> エラーが返されます。

%DeleteExtent() の動作の改善

以前のバージョンでは、%DeleteExtent() メソッドによって、エクステント内のインスタンスがすべて削除されなくても、常に $$$OK が返されていました。バージョン 5.1 では、意図したとおりに動作するよう改善されており、エクステントのすべてのインスタンスが正常に削除された場合にのみ $$$OK が返されるようになりました。

メソッドのコンパイルと返り値

以前のバージョンでは、値を返すことが宣言されているメソッドをコンパイルすると、以下の文字列が挿入されることがありました。

Quit ""

これが行われるのは、メソッドの最後の行の先頭に Quit コマンドがない場合です。この方法には、プログラミングのバグが隠されていました。開発者が作成したメソッドが値を返すことになっているときに、実際には値が返されないからです。

バージョン 5.1 では、これは行われません。メソッド・コンパイラによって挿入されるのは、以下の文字列のみです。

Quit

これは、メソッドの最後の行に返り値がない場合です。したがって、値を返すよう宣言されているメソッド (関数) が値を返さない場合は、<COMMAND> エラーが発生します。

必須のリレーションシップ・コレクションを空にできない

アプリケーションによってリレーションシップ・コレクションの “子” 側または “多” 側が必須であると指定されている場合は、これに 1 つ以上の要素が含まれているかどうかの確認が Caché によって行われるようになりました。インスタンスの保存の時点でリレーションシップが空の場合は、Caché によって %Save のエラーが報告されます。以下に例を示します。

ERROR #5662: Relationship child/many property 'Sample.Company::Employees
(1@Sample.Company,ID=)' is required so must have at least one member
XML エクスポートに対する循環検査

Caché 5.1 の XML 対応クラスでは、エクスポートの前に、循環が存在するかどうかを調べるために階層の検査が行われます。既定ではこの検査が行われますが、検査を無効にするには、%XML.WriterOpens in a new tab の Format プロパティの末尾に “,nocyclecheck” を付加します。

Note:

この検査が無効にされて循環が存在する場合は、<FRAMESTACK> エラーが発生します。

タスクの変更
  • タスク・マネージャ階層のアップグレード

    タスク・マネージャでは、Caché クラス階層がより徹底的に使用されるようになりました。すべてのユーザ・タスクは、%SYS.Task.DefinitionOpens in a new tab クラスをサブクラス化する必要があります。

    これにより、サブクラスで追加のプロパティを導入して、タスク実行時に使用できるようになります。 ユーザ・インタフェースは、定義を問い合わせて、プロパティ値の入力をユーザに要求します。以下はその例です。

    Class %SYS.Task.IntegrityCheck Extends %SYS.Task.Definition
    {
    Property Directory As %String [ InitialExpression = {$zu(12)} ];
    Property Filename As %String [ InitialExpression = "INTEGRIT.LOG" ];
    
    ClassMethod DirectoryIsValid(Directory As %String) As %Status
    {
      If '##class(%Library.File).DirectoryExists(Directory) 
      {
        Quit $$$ERROR($$$GeneralError,"Directory does not exist")
      }
      Quit $$$OK
    }
    
    /// This method is responsible for executing the task
    /// At the scheduled time, the Task Manager
    /// - creates an instance of this object,
    /// - sets any property values using the stored "settings" for the task,
    /// - and invokes this method to execute the task.
    /// In order to execute a real task, override this method in a subclass.
    Method OnTask() As %Status
    {
      Do Silent^Integrity(..Directory_..Filename)
      Quit $$$OK
    }
    
    }
    
    
  • ContinueAfterError プロパティの削除

    クラス %SYS.TaskSuper の ContinueAfterError プロパティは、一般的すぎるため削除されました。このプロパティに依存するタスクは、それぞれのエラー状況を処理できるように、再設計する必要があります。

  • タスクに関するその他の改善

    この他にも、Caché 5.1 ではタスク管理に関して以下の改善が行われています。

    • RunLegacyTask というクラスがあり、以前のバージョンとの互換性を維持するための ExecuteCode() メソッドがあります。

    • タスクの実行時にエラーが発生すると、実行が一時停止します。

    • RunOnce() メソッドおよび RunNow() メソッドによって、一時停止しているタスクをアクティブにできるようになりました。

    • Caché のこのインスタンスに対するライセンスが見つからない場合は、タスクが起動されません。

次期リリースでは、XML を優先して CDL を廃止

Caché 5.1 では、業界標準 XML を優先し、クラスをエクスポートするオプションとしての CDL が削除されました ("CDL に代わる XML エクスポート" を参照)。Caché 2008.1 でこの移行が完了します。CDL は、インポートとしても、出力先としても、Caché へのインポートの形式として利用できなくなります。

さらに、既存のプラットフォームの新しいバージョン以外の 2007.1 で新しく追加されたプラットフォームの場合、インターシステムズは CDL に対するサポートをまったく行わない場合があります。各 Caché プラットフォームの詳細は、"サポート対象プラットフォーム" のドキュメントを参照してください。

CDL 形式でのプログラム・アーカイブを持つお客様の場合、これらを Caché 2007.1 でインポートし、XML としてエクスポートすることをお勧めします。

SQL に関する相違

バージョン 5.1 への移行において、SQL に関して行われた変更で既存のプログラムに影響を与える可能性があるものは以下のとおりです。

Caché ユーザと SQL ユーザの統一

以前のバージョンでは、有効な Caché ユーザ名のリストと、有効な SQL ユーザ名のリストの間には関連性がなく、それぞれ異なるセキュリティ・メカニズムによって管理されていました。バージョン 5.1 では、このことが変更されています。SQL ユーザ名はすべて Caché ユーザ名であり、その逆も同様です。個々のユーザに許可される内容は、同じセキュリティ・メカニズムによって決まります。

アトミック SQL 文

バージョン 5.1 では、SQL 文の DELETE、UPDATE、および INSERT...SELECT は、アトミックになりました。つまり、文の実行が正常に完了しなければ、テーブル内の行は変更されません。

以前のバージョンでは、操作が完了しなかったことを検出して必要に応じて更新をロールバックするのは、アプリケーション側の責任で行うことになっていました。 このバージョンでは、いずれかの行の更新に失敗した場合は、その文によってテーブル内の行は 1 行も更新されません。

SQL パスワードの大文字と小文字の区別

バージョン 5.1 では、セキュリティ上の理由から、SQL でも Caché と同じパスワード・メカニズムが使用されます。この結果、SQL パスワードでは大文字と小文字が区別されるようになりました。以前は区別されていませんでした。

テーブル所有権と $USERNAME との連動

これは、DDL を使用して作成されたテーブルの所有者の値は、作成時点での $USERNAME の値が使用されるということです。それ以外の手段を使用してクラスまたはテーブルを作成するときは、開発者によって明示的に定義されていなければ、クラスの OWNER キーワードは定義されません。テーブルを投影するクラスがコンパイルされるときに、クラスの OWNER キーワードが NULL の場合、テーブルの所有者は _SYSTEM に設定されます。

この解釈は、以前のバージョンと同様です。変更点は、バージョン 5.1 で DDL を使用してテーブルを作成するときは OWNER の既定値が _SYSTEM にはならないことです。

区切り識別子が既定値

Caché バージョン 5.1 では、インストール時に "区切り識別子をサポート" の値が True に設定されます。つまり、SQL 文内の二重引用符で囲まれた文字列 ("My String") は、区切り識別子と見なされます。以前のバージョンの Caché では、このパラメータが false に設定され、二重引用符で囲まれた文字列は文字列定数またはリテラル文字列として扱われていました。このパラメータの値は、システム管理ポータルの ホーム, 構成, 詳細設定 で変更できます。

%msql の削除

この変数は、ObjectScript において、埋め込み SQL から SQL アクセスするための有効なユーザ名を指定するのに使用されていました。有効なユーザ名とは、User Table に登録されている名前です。

Caché 5.1 では、ユーザが認証されたときに設定される $USERNAME 特殊変数から SQL ユーザ名が抽出されます。

クエリ・キャッシュの変更
  • クエリ・キャッシュと読み取り専用データベースとの連動

    Caché 5.1 では、クエリ・キャッシュを必要とする SQL クエリは、読み書き可能としてマウントされたデータベースに ^mcq グローバルがマッピングされていなければ、読み取り専用データベースに対して動作しません。この例には、SQL DDL を使用して読み取り専用データベースにテーブルを作成しようとすることがあります。

  • クエリ・キャッシュの変更はジャーナルに記録されない

    バージョン 5.1 では、クエリ・キャッシュに変更が加えられても、変更内容はジャーナルに記録されないようになりました。これによって、トランザクションの内部でクエリ・キャッシュに対して行われた変更もジャーナルに書き込まれないことになります。したがって、シャドウイングによってクエリ・キャッシュの変更が他システムに適用されることはありません。

  • クエリ・キャッシュのパージの即時実行

    Caché 5.1 では、クエリ・キャッシュを N 日後にパージする (N は構成設定で定義された日数) という概念はサポートされないことになりました。 アプリケーションで Purge() を呼び出すと、クエリ・キャッシュがすべて削除されます。

  • 読み取りデータベースにおけるクエリ・キャッシュ

    このバージョンの Caché では、データベースのテーブルに対して SELECT を実行するダイナミック SQL クエリ・キャッシュの作成および実行を、アプリケーションで行うことができます。

    Note:

    このようなクエリをアプリケーションで削除しようとすると <PROTECT> エラーが発生します。クエリ・キャッシュを削除するには、関連付けられているデータベースに対する書き込みアクセス権が必要です。

  • クエリ・キャッシュのパージは他のシステムには反映されない

    パッケージが、1 つのシステム内の複数のネームスペースにマッピングされている場合に、クエリ・キャッシュを作成したパッケージ内のクラスのコンパイルまたは削除を行うと、個々のネームスペースに存在する、そのクラスを使用するすべてのクエリ・キャッシュが削除されます。ただし、ECP を介して別のマシン上にパッケージがマッピングされている場合は、クラスをリコンパイルまたは削除しても、クエリ・キャッシュの削除が行われるのは、クラスがコンパイルされたシステム上のみとなります。 このクラスからのクエリ・キャッシュがネットワーク接続された他のシステム上にある場合は、手動で削除する必要があります。

  • ^mcq("init code") 実行順序の変更

    JDBC または ODBC を介して接続したときに実行される Caché コマンドが含まれるように、グローバル・ノード ^mcq("init code") を設定することができます。Caché 5.0.12 では、接続時の実行順序は以下のようになっていました。

    1. クライアントから接続情報を読み取る

    2. ^mcq("init code") のコードを実行する

    3. ログイン・コードを実行する

    Caché 5.0.13 では、実行順序が以下のように変更されました。

    1. ^mcq("init code") のコードを実行する

    2. ログイン・コードを実行する (クライアントからの接続情報の読み取りを含む)

    Caché 5.1 では、実行順序が以下のようになっています。

    1. ログイン・コードを実行する (クライアントからの接続情報の読み取りを含む)

    2. ^mcq("init code") のコードを実行する

SQL クエリ内の不明確な名前
  • FROM 節

    以前のバージョンの Caché では、SQL クエリ内のフィールド名が不明確な場合は、そのフィールド名が、FROM 節で最初に出現するテーブルに関連付けられるものとされていました。これと同じ状況のとき、バージョン 5.1 ではエラーが報告されます。不明確な名前は、起源を示すように修飾する必要があります。

  • ORDER BY 節

    Caché 5.1 では、ORDER BY 節に含まれるフィールド名が不明確な場合はエラーが報告されます。以下に例を示します。

    SELECT TOP 20
           %ID as ID,
           ((ID * 2) # 20) as ID
    FROM Sample.Company
    ORDER BY ID 
    
    

    これにより、以前は検出されなかったクエリ・プロセッサのバグが修正されます。以前のバージョンの Caché でこれを実行すると、不明確な名前 (この場合は ID) には、その列名の最後の出現箇所が関連付けられます。

特定オプションの設定に必要な特権

以下に示す SET OPTION の SQL 文を実行するには、%Admin_Security:Use の権限が必要です。

SET OPTION SUPPORT_DELIMITED_IDENTIFIERS = {TRUE | FALSE}

SET OPTION PKEY_IS_IDKEY = {TRUE | FALSE}

権限を持たずにこの文を実行しようとすると、SQLCODE の値 —99 が返されます。これは、特権違反のエラー値です。このような文は Caché の構成設定を変更するものであり、実行するユーザに変更の特権が付与されている必要があるからです。

SQL の GRANT および REVOKE における変更

SQL の GRANT コマンドおよび REVOKE コマンドでは、以下の一般的な管理者特権はサポートされなくなりました。

  • %GRANT_ANY_PRIVILEGE

  • %CREATE_USER

  • %ALTER_USER

  • %DROP_USER

  • %CREATE_ROLE

  • %GRANT_ANY_ROLE

  • %DROP_ANY_ROLE

以前のバージョンでは、SQL アクセス権限が別に保持されていました。バージョン 5.1 では、これらの特権が Caché によって管理されます。SQL コードによってこれらの操作を実行しようとすると、この名前のロールを付与しようとしているものと解釈されます。

  • CREATE ROLE の詳細

    SQL の CREATE ROLE 文を使用してロール定義を作成するには、ユーザが %Admin_Security:Use 特権を保持している必要があります。 ユーザがこの特権を持たない場合は、エラー -99 およびメッセージが返されます。

  • DROP ROLE の詳細

    DROP ROLE を使用してロール定義を削除するには、以下の条件が 1 つ以上満たされている必要があります。

    • ユーザが %Admin_Security:Use 特権を保持している。

    • ユーザがそのロールの所有者である。

    • ユーザに、WITH ADMIN OPTION でそのロールが付与されている。

SQL %THRESHOLD の削除

SQL %THRESHOLD 機能は、このバージョンの Caché では使用されなくなりました。コードでしきい値を付与しようとするとします。以下はその例です。

GRANT %THRESHOLD ### TO SomeUser

この場合、コンパイル時にエラーが返されるようになりました。また、以下のようなコードを実行するとします。

REVOKE %THRESHOLD FROM SomeUser

この場合、しきい値の取り消しは行われません。解釈が変更されたため、Caché 5.1 では、ユーザに付与されていた %THRESHOLD という名前のロールが取り消されます。

SAMPLES における SQL 特権がユーザ _PUBLIC に付与される

インストール時に、SAMPLES ネームスペース内のすべてのテーブル、ビュー、およびプロシージャに対するすべての SQL 特権が、_PUBLIC という名前のユーザに付与されます。

システム・テーブルに対する SQL カタログ情報

%Library.SQLCatalogOpens in a new tab クラスの SQLTables() クエリを実行すると、現在のネームスペースで定義されているテーブルおよびビューの一覧が返されます。以前のバージョンでは、この一覧にシステム・テーブルが含まれていました。バージョン 5.1 では、システム・テーブル情報が一覧に含まれるのは、%SYS ネームスペースでこのクエリが実行された場合のみです。

照合済みフィールドから返される結果の順序が異なる場合がある

バージョン 5.1 において行われた Caché SQL の最適化により、照合済みフィールドに対するクエリから返される結果が異なることがあります。例えば、以下を考えてみます。

SELECT Dept, AVG(Salary)
FROM Personnel
GROUP BY Dept

Dept は、%SQLUPPER に従って照合されますが、行に入力される値の大文字と小文字の使い方は一定しておらず、大文字のもの、小文字のもの、単語の先頭のみが大文字のものなどがあります。ただし、GROUP BY 節が指定されているので、すべての部門 (Dept) の値が、大文字に変換された値に従って収集されます。

以前のバージョンの Caché では、このクエリの結果が返されるときに、返される Dept の値は選択された行での実際の値でした。Cache 5.1 では、返される Dept の値は常に照合後の形式 (この場合は %SQLUPPER) となります。

以下の 2 つのクエリを例に考えてみましょう。

SELECT IdNum, Dept
FROM Personnel

および

SELECT Dept, COUNT(IdNum)
FROM Personnel
GROUP BY Dept

上記クエリから返される結果が、期待した結果ではないこともあります。最初のクエリでは Dept 列に格納されている実際の値が返され、2 番目のクエリでは大文字に変換された値が返されます。これは、アプリケーションで予期した結果でないこともあります。

以前の動作に戻すには、以下のように、Dept を %exact で修飾します。

SELECT %exact Dept, COUNT(IdNum)
FROM Personnel
GROUP BY Dept
時刻精度の制御

SQL スカラ関数の GETDATE()CURRENT_TIME()、および CURRENT_TIMESTAMP() で返される時刻値の精度を指定するための新しい SQL 構成設定が追加されています。時刻精度の既定値を設定するには、以下に示す新しい API 呼び出しを使用できます。

PreviousValue = $SYSTEM.SQL.SetDefaultTimePrecision(value)

value は精度 (時刻値のミリ秒部分を表す小数点以下の桁数) です。

既定値は 0 で、これらの関数から返される値にミリ秒部分は含まれません。 この関数から返される値は、直前の (または既定の) 時刻精度設定です。例えば、次を実行するとします。

Do $SYSTEM.SQL.SetDefaultTimePrecision(3)

GETDATE() から返される値の形式は 'YYYY-MM-DD HH:MM:SS.sss' となります。 アプリケーションで、この既定値をオーバーライドする値を指定するには、時刻精度値を GETDATE() に渡します。 例えば、GETDATE(5) を実行すると 'YYYY-MM-DD HH:MM:SS.sssss' が返されます。

Note:

この設定は、SQL エンジンのコード生成フェーズで使用されます。 時刻精度設定の既定値を変更した場合は、SQL 文に対して新しい設定を有効にするために、クエリ・キャッシュをすべて削除し、クラス・クエリや埋め込み SQL ルーチンなどをリコンパイルする必要があります。

Caution:

CURRENT_TIME() で返される時刻値の精度は、時刻精度設定の既定値で指定されたとおりですが、LogicalToOdbc でこの時刻値を変換するときは、ミリ秒部分はサポートされません。 したがって、既定の精度が定義されている状態で、ODBC または JDBC を介したクエリで CURRENT_TIME() から返される値では、ミリ秒部分が欠落しています。

DDL CREATE および DDL DROP での所有者の検査

ユーザが DDL を実行して既存のクラスにプロシージャ、クエリ、またはメソッドの作成または削除を行うとき、そのクラスに OWNER が定義されていて、実行するユーザがクラスの OWNER ではない場合は、このアクションが Caché によって許可されません。

ODBC および JDBC のアクセス許可の検査

ODBC および JDBC を介して起動されるストアド・プロシージャに対する EXECUTE 特権が Caché によって検査されるようになりました。 ODBC または JDBC を介してプロシージャを呼び出すには、そのプロシージャに対する EXECUTE 特権がユーザに付与されている必要があります。

システム管理ポータルで、または ODBC または JDBC のカタログ・クエリからプロシージャの一覧を検索するとき、そのユーザが呼び出しを行う特権を持つプロシージャのみが一覧に表示されます。

DDL を使用してプロシージャを作成するとき、作成者のユーザ名がそのプロシージャの既定の所有者として設定されます (これは、後でクラス定義を編集することで変更できます)。 プロシージャがコンパイルされるときに、プロシージャの所有者に %All ロールが付与されていない場合は、EXECUTE 特権が WITH GRANT OPTION 付きで付与されます。 プロシージャを投影するクラス定義の中で所有者が指定されていない場合は、クラスをコンパイルするユーザが所有者であると見なされます。

プロシージャが削除されるとき、またはプロシージャ定義が含まれるクラスが削除されるときに、そのプロシージャに対して付与されていた EXECUTE 特権は削除されます。

^mdd の情報は ^oddEXTR に移動

^mdd グローバルは削除されました。以前のバージョンでは、このグローバルに SQL 関連の情報が保持されていました。この情報は、^oddEXTR 構造体に取り込まれました。

以前のデータベースを Caché 5.1 でマウントできますが、そのデータベースを使用するには、以下に示すコマンドを使用してアップグレードする必要があります。

Do $SYSTEM.OBJ.UpgradeAll()
Do $SYSTEM.OBJ.CompileAll()

UpgradeAll および CompileAll を実行した後は、Cache 5.1 より前のバージョンでそのデータベースを使用することはできません。

NULL が関与する比較

このリリースの Caché では、値が NULL の定数とホスト変数が関与する一部の SQL 述語において、以前のバージョンで見られた不正な動作が修正されています。

定数とホスト変数に対する NULL テストの以前の不正な動作に依存しているアプリケーションは、修正する必要のある場合があります。これは、次の形式の述語に影響を及ぼします。

field <> parameter
field > parameter
field >= parameter

ここで、“パラメータ” の値を NULL 値に設定できます。(比較演算子 “<”、“<=”、および “=” が関与する述語は正しく動作しました。)これは、:hostVar が COS で "" に結合されている場合に、

field <> :hostVar

などのクエリが、既存の述語が異なる動作をすることを意味します。SQL の 3 状態論理によれば、この述語は NULL に評価されてエラーとなります。NULL が値として扱われ、NULL 以外のフィールド値がすべて正常に実行されることはありません。

必要であれば、NULL に対して特定のテストを追加することにより、特定のクエリの以前の動作をリストアできます。既存の

 field<>:hostVar

などのクエリが前と同じ結果を生成するには、

(field <> :hostVar OR (:hostVar IS NULL AND field IS NOT NULL))

と記述し直す必要があります。

システム・エラー・コードの変更

新しいエラー・コード

このバージョンの Caché では、以下の新しいシステム・エラー・コードが追加されています。

新しいシステム・エラー・メッセージ
エラー・コード 説明
<ALARM> ユーザ・イベント用の内部タイマがタイムアウトになりました。
<COLLATECHANGE> 添え字付きローカル変数が定義されているときに、照合アルゴリズムを変更しようとしました。
<DDP JOB OVERFLOW> Cache ジョブの内部ジョブ番号が 1544 を超えていますが、DSM データベースに DDP を使用してアクセスしようとしています。このジョブ番号は、DDP が処理するには大きすぎます。
<DSKFUL> ファイルが最大サイズに達したため、ディスク・ファイルへのデータ書き込みに失敗しました。データの一部は書き込まれましたが、すべてのデータは書き込まれていません。
<EXTERNAL INTERRUPT> 別のプロセスがこのプロセスに割り込もうとしました。
<LICENSE ALLOCATION EXCEEDED> この構成は、使用可能な全ユニットのプールから割り当てられたライセンス・ユニットの数を超えています。
<NETWORK UNLICENSED> アプリケーションでリモート・ディレクトリにアクセスしようとしましたが、Caché ネットワーキングのライセンスがありません。
<RESJOB> 予約ジョブを終了しようとしました。
<TRANSACTION LEVEL> アプリケーションで、未実行トランザクションの入れ子が多すぎます。
削除されたエラー・コード

このリリースの Caché では、<DISCONNECT> システム・エラーがサポートされなくなりました。

グローバルの再編成

Caché バージョン 5.1 では、ユーザ・メッセージおよびシステム・メッセージを格納するグローバル (^CacheMsg および ^%qCacheMsg) の添え字の順序が変更されました。新しい順序は、ドメイン、言語、および ID です。これによって、メッセージ・グローバルの添え字マッピングをドメイン別にできます。

クラス・ディクショナリのバージョン番号が 20 にアップグレードされました。その結果、$SYSTEM.OBJ.Upgrade() の実行をユーザに要求するメッセージが表示されます。このメソッドを実行すると、既存の ^CacheMsg グローバルの添え字が振り直されます。すべてのエラー・マクロ、ルーチン、およびメソッドにおいて元の引数の順序が維持されます。したがって、アプリケーションでメッセージ・グローバルのアドレスを直接指定している場合を除いて、ユーザ・コードの変更は必要ありません。

ObjectScript の変更

新しいシステム変数
  • $USERNAME

    バージョン 5.1 では、セキュリティ上の目的のため、$USERNAME に格納されている名前を使用して Caché 内部でユーザが識別されます。

    例えば、あるユーザがユーザ名 "Smith" を使用して Windows XP システムに正常にログインできるとします。このユーザが Caché のオンライン・ドキュメントにキューブを介してアクセスしようとした場合、セキュリティ上の目的のため、このユーザに割り当てられる名前は “UnknownUser” となります。オンライン・ドキュメントに対するアクセス権が UnknownUser に付与されていない場合は、Caché のセキュリティ構成に応じて、Caché が認識するユーザ ID とパスワードを入力して認証を受けることをユーザに要求するメッセージが表示される場合があります。

    Caché 5.1 では、ルーチン ^%USER もあります。これは、現在のプロセスを実行しているユーザの、オペレーティング・システムが認識する名前を出力するものです。

    Note:

    ^%USER と $USERNAME が同一である必要はありません。前者は、オペレーティング・システムへのログインによって設定されます。後者は、Caché セキュリティに対するユーザ認証が成功したときに設定されます。

    例えば、あるユーザが "Smith" として Windows XP にログオンするとします。 このユーザが Caché キューブの [ドキュメント] を選択した場合に、DocBook CSP アプリケーションが起動するときの $USERNAME は "UnknownUser" となります。

  • $ROLES

    この変数には、実行中の任意の時点で現在のユーザが保持しているすべてのロールが、コンマ区切りのリストに格納されています。

ObjectScript コンパイラのアップグレード

バージョン 5.1 では、ObjectScript コンパイラが改善されています。その結果、生成されたコードを以前のリリース上で実行することはできなくなりました。このことを試みると、<RECOMPILE> エラーが返されます。

その逆については、異なります。Cache 5.0 システムでコンパイルされたコードは、変更せずにバージョン 5.1 で実行できます。

Caché のバージョンと ObjectScript コンパイラのバージョンの関係を以下のテーブルに示します。バージョン番号は、“メジャー” 番号と “マイナー” 番号から構成されており、ピリオドで区切られています。ObjectScript コンパイラのメジャー・バージョンとマイナー・バージョンはそれぞれ、ObjectScript の関数 $ZUTIL(40,0,68)$ZUTIL(40,0,69) によって返されます。

Caché のバージョン

コンパイラのバージョン

3.2

9.6

4.0

9.7

4.1

9.7

5.0

10.0

5.1

10.1

あるバージョンの Caché でコンパイルされたルーチンを、リコンパイルせずに別のバージョンの Caché で実行できるのは、以下の両方に該当する場合です。

  1. Caché リリースのコンパイラのメジャー・バージョンが同一である。

  2. ルーチンが実行されるシステム上のコンパイラのバージョン番号が、ルーチンがコンパイルされたシステムのコンパイラのバージョン番号と等しいか大きい。

Note:

Caché Basic コンパイラで使用されるバージョン番号は ObjectScript コンパイラの番号と同一であり、同じ互換性規則に従います。

Caution:

この変更により、ECP 構成に制約が生じます。サーバはバージョン 5.1、クライアントはバージョン 5.0 またはバージョン 5.1 でなければなりません。Caché 5.0 を実行している ECP サーバでは、バージョン 5.1 でコンパイルされたコードを処理することはできません。

一部の ObjectScript コマンドにはアクセス許可が必要

コマンドによってはその効力が理由で、特定の状況下でユーザにアクセス許可が付与されていなければ正しく実行できないコマンドがいくつかあります。

コマンド

許可

Set

特殊変数 $ROLES に対して実行するときは、特権を必要とする操作となります。$ROLES を変更する特権がアプリケーションに付与されていなければ、値は変更されません。

View

データベースからブロックを読み取るには %DB_<XXX>:R が必要です。データベースを変更するには %DB_<XXX>:W が必要です。

$ZTRAP の変更

$ZTRAP の参考資料では、エラー・トラップの名前がアスタリスク (*) で始まる場合、エラーが発生したコンテキスト・レベルでエラー・ハンドラが起動されると説明しています。ただし、エラー・トラップがプロシージャのコンテキスト内にある場合は、Caché はエラー・コンテキストと、プロシージャのローカル変数に対する適切なコンテキストを同時に確立できません。Caché 5.1 では、このような使用方法をコンパイル時に検出し、エラーとして報告するようにコンパイラが変更されています。

アプリケーションでこの機能を利用するには、以下のいずれかを満たしている必要があります。

  • エラー・リカバリ・コードが含まれるサブルーチンはプロシージャではない。

  • エラーのコンテキストにおいて実行する必要がないように、エラー処理ロジックが変更されている。

$ZERROR に一部のエラーに関する追加情報が含まれる

エラーが発生したときは、そのエラーに関する情報がシステム変数 $ZERROR に格納されます。Caché 5.1 では、以前のバージョンと比べて、$ZERROR に格納される文字列により多くの情報が含まれています。

例えば、定義されていない変数をルーチンで使用しようとすると、$ZERROR には未定義変数の名前が格納されます。以前のバージョンの Caché では、$ZERROR には以下のような値が格納されている場合がありました。

<UNDEFINED>zMethodName^Pkg.Class.1

バージョン 5.1 では、以下のような値が格納されます。

<ERRCODE>Tag^Routine+line *someinfo

この変更の結果、エラー処理ルーチンにおいて、$ZERROR の文字列の形式に関する何らかの暗黙の想定を行っていた場合は、以前と同様に動作させるために再設計が必要となることがあります。例えば、以下に示すコマンドはバージョン 5.1 では動作しません。

Write "Error line: ", $PIECE($ZERROR, ">", 2)

以下のように変更する必要があります。

Write "Error line: ", $PIECE($PIECE($ZERROR, ">", 2), " ", 1)

以下に示すテーブルは、追加情報が格納されるエラーと、その情報の形式の一覧です。新しい情報は、前のテキストとはスペースで区切られています。

エラー・コード 説明
<UNDEFINED>

変数の名前 (添え字が使用されている場合は添え字も含む)

<SUBSCRIPT>

エラーにおける添え字参照

<CLASS DOES NOT EXIST>

参照されるクラス名

<PROPERTY DOES NOT EXIST>

参照されるプロパティの名前と、そのプロパティが存在することになっているクラスの名前 (コンマで区切られる)

<METHOD DOES NOT EXIST>

起動されたメソッドの名前と、そのメソッドが含まれることになっているクラスの名前 (コンマで区切られる)

<PROTECT>

参照されるグローバルの名前と、そのグローバルが格納されているディレクトリの名前 (コンマで区切られる)

<NOROUTINE>

起動されるルーチンの名前

ルーチン (またはメソッド) に対してローカルである変数の名前と、クラス・プロパティおよびメソッドの名前には、そのことを示すアスタリスクが先頭に付けられます。グローバル変数の名前の先頭には、キャレットがあります。

例 :

<UNDEFINED> *x
<UNDEFINED> *abc(2)
<UNDEFINED> ^xyz(2,"abc")
<PROPERTY DOES NOT EXIST> *SomeProp,Package.Classname
<METHOD DOES NOT EXIST> *AMethod,SamePackage.DifferentClass
<PROTECT> ^%GlobalVar,c:\cx\mgr\notyours\

$ZUTIL
  • アクセス許可の変更

    特定の $ZUTIL 関数の実行に必要な権限が、バージョン 5.1 では以前のリリースと比べてより明確になりました。以下のテーブルに示す場合を除いて、公開されている $ZUTIL のオプションを利用するのに特別なアクセス許可は必要ありません。

    関数番号

    必要な権限

    説明

    5 %DB_<XXX>:R

    対象 : 別のネームスペースへの変更

    バージョン 5.1 では、別のネームスペースに変更を行うには、ユーザに %DB_XXX:Read が付与されている必要があります (XXX はネームスペースに対応するグローバルが格納されているデータベースの名前)。

    58 N/A

    対象 : XECUTE コマンドの使用に必要な特権レベルの設定

    この関数は、Caché 5.1 では削除されています。

    69 %Manager

    対象 : システム全体の既定値の設定

    この関数を起動するには、CACHESYS データベース内の未編集ルーチンから起動する必要があります。間接指定の一部としても起動できませんし、CACHESYS データベースに対する書き込み権限のあるジョブ内でも起動することはできません。

    78 %Manager

    対象 : 開いているトランザクションのジャーナル・ファイルの検索

    この関数を起動するには、CACHESYS データベース内の未編集ルーチンから起動する必要があります。間接指定の一部としても起動できませんし、CACHESYS データベースに対する書き込み権限のあるジョブ内でも起動することはできません。

    130 %Manager

    対象 : ドメイン ID またはインデックスを設定するか返す

    この関数を起動するには、CACHESYS データベース内の未編集ルーチンから起動する必要があります。間接指定の一部としても起動できませんし、CACHESYS データベースに対する書き込み権限のあるジョブ内でも起動することはできません。

    131 N/A

    以前のリリースで、サブ関数 1 によって返されるシステム識別子文字列は、現在のシステム名の後にコロン (:)、IP アドレス (Windows) または MAC アドレス (UNIX®)、コンマ (,)、および mgr ディレクトリのパス名を連結したものでした。

    バージョン 5.1 では、システムの名前の後にコロン (:)、および実行されている Caché インスタンスの名前を連結したものです。

  • $ZUTIL(4) の変更

    この関数は、Caché 内のプロセスを停止するために使用します。バージョン 5.1 では、特権を持たないアプリケーションによる干渉からシステム・ジョブを保護するように改善されています。例えば、$ZUTIL(4, <pid>) を実行しても、デーモンは停止しません。代わりに、エラー・ステータス 0 が返されます。

    さらに、終了しようとして %HALT またはそのサブルーチン (%ROLLBACK など) を実行しているプロセスは、この関数には応答しません。RESJOB を発行するプロセスには、ターゲットがこれを無視したことを示すエラー・ステータス -4 が返されます。

    “ccontrol stop” を使用してシステムをシャットダウンするときは、以前と同様にこれらのプロセスが終了します。これと同じことは、バージョン 5.1 では関数 $ZUTIL(4, <pid>, -65) を使用して実行することもできます。

    Caution:

    $ZUTIL(4, <pid>, -65) をこの目的のために使用するときは、保護するロックが解除されても、開いているトランザクションはロールバックされません。

  • $ZUTIL(49) の変更

    返される情報は、データベースの情報を詳しく示すように改善されています。

    • $ZU(49, <sfn>, 3) — バージョン 5.1 では、以前のバージョンで返されていた情報の後にいくつかのフィールドが追加されます。

      • <SysNumber> : リモート・システムの番号 (データベースがローカルの場合は 0)

      • <DirPath> : システム上のデータベース・パス

      • <ResourceName> : データベースに関連付けられているリソース

      • <BlockSize> : データベースのブロック・サイズ (KB)

      • <Collation> : データベースの照合

      • <DirectoryBlock> : DB ディレクトリ・ブロック番号。ECP クライアントの場合は、CacheTemp 内のデータベースのローカル・キャッシュ・ディレクトリ・ブロック番号です。ECP サーバからクライアントに、データベース・ディレクトリ・ブロック番号は送信されません。

      返される値がすべて、"^" で区切られます。

$ZF

$ZF による操作によっては、操作に対してアクセス許可の検査が行われます。以下に示すテーブルは、実行が制限されている操作に必要なアクセス許可の一覧です。

関数番号

許可

説明

—1 %System_Callout:U

作成された子プロセスとしてプログラムやコマンドを実行し、子プロセスの返信を待機します。

—2 %System_Callout:U

作成された子プロセスとしてプログラム、またはコマンドを実行し、すぐに返します。

その他の $ZF 関数は、以前のバージョンの Caché と同様に特権が不要な操作です。

ストレージの変更

%CacheStorage の変更
  • 新しいプロパティ・メソッド GetStored()

    既定のストレージ (%CacheStorage) を使用する永続クラスの保存可能プロパティすべてに対して、新しいプロパティ・メソッドが実装されました。このメソッドの名前は <propertyname>GetStored() です。このメソッドはオブジェクト ID の値 (OID ではありません) を受け取り、ディスク上に保存されているプロパティの論理値を返します。<property>StorageToLogical() を使用すると、保存されている値が論理値に変換されます。

    このメソッドは、サブノード構造に保存されているコレクションに対しては有効ではありません。指定された ID が示すオブジェクトが存在しない場合は、エラーが報告されます。このメソッドは、保存されないプロパティ (Transient プロパティ、多次元プロパティ、Calculated プロパティ) に対しては実装されません。これらの場合は、<METHOD DOES NOT EXIST> エラーが報告されます。

  • 既定のストレージに対する ID カウンタ検査が可能

    システムによって割り当てられたオブジェクト ID カウンタを検査する新しい API 関数がこのバージョンで使用できるようになりました。システムによって割り当てられた ID 値を持つ既定のストレージを使用するクラスごとに、コンパイラによって ID 検査式が生成されます(既定のストレージおよびシステム割り当て ID を使用する子クラスには、この式はありません)。

    関数 $$CheckIDCounters^%apiOBJ(.errorlog) を実行すると、現在のネームスペースにあるすべてのエクステントが検査されます。ID 検査式が見つかった場合は、その式が起動されます。エクステントの最後の ID の値が、ID カウンタ位置よりも大きい場合は、ID 検査式ではエラーが発生します。この場合は、errorlog 配列にエントリが追加され、添え字としてエクステント名が使用されます。ID 検査式は errorlog 内にも出力され、ユーザはこれを利用して問題に対処できます。

    アプリケーションでこのユーティリティを起動する方法を以下に示します。

    Set sc = $$CheckIDCounters^%apiOBJ(.errarray) 
    

    ユーティリティから制御が返されたとき、sc には標準のステータス・メッセージが設定されます。エラーが見つかった場合は、多次元配列 errarray にエラーが格納されます。

  • 既定のストレージに対して %ExistsId() が生成される

    Caché 5.1 では、この生成されたメソッドによって、渡された ID の値が検証されます。ID の構成要素のいずれかが NULL の場合は、%ExistsId() から 0 が返されます (オブジェクトが存在しない)。すべての構成要素が NULL 以外の場合は、オブジェクト参照が存在するかどうかが検査されます。

    Note:

    このメソッドは、%Library.PersistentOpens in a new tab の拡張であるクラスの中で呼び出すためのものです。そのインスタンスのクラスによって作成されたものではない ID 値を渡すことは、カプセル化が破壊されることになるため、お勧めできません。

%CacheSQLStorage の変更
  • $PIECE アクセス・タイプには有効な行参照が必要

    %CacheSQLStorage を使用するアプリケーションで、アクセス・タイプ $Piece の複数の添え字タイプを使用しており、これらの添え字レベルに対するデータ・アクセス式を指定している場合は、マップ定義において有効な行参照を指定する必要があります。このバージョンの Caché では、この状況では自動生成は行われません。

  • 新しい動的値置換

    以下の指定方法が Caché でサポートされるようになりました。

    • {%%CLASSNAME} : 引用符なしのクラス名に展開されます。以下はその例です。

      Do ##class({%%CLASSNAME}).MyMethod() 
      
    • {%%CLASSNAMEQ} : 引用符で囲まれたクラス名に展開されます。

      Set ThisClass = {%%CLASSNAMEQ}
      
    • {%%TABLENAME} : 引用符で囲まれたテーブル名に展開されます。

      Set MyTable = {%%TABLENAME} 
      

    %CacheSQLStorage マップ定義内の以下に示す場所で、これらを使用できます。

    • マップの添え字

      • データ・アクセス式

      • 無効な条件

      • Next コード

      • アクセス変数式

      マップ・データ

      • 取得コード

Java

パッケージ名に SQL 予約語は使用できない

Java に投影される Caché がクラスで、クラス名のパッケージ部分の構成要素のいずれかが SQL 予約語 (大文字と小文字の違いは無視) に一致している場合、クラスを投影しようとしたときに、Java クラスのメタデータに列名がないというエラーが報告されます。このエラーを回避するには、SQL 予約語と同じパッケージ名を使用しないようにします。

ターミナル

ターミナルは常に Unicode

ターミナルのバージョンは、内部的に Unicode 文字を使用して実行されるバージョンの 1 つだけになりました。既定では、ISO ネットワーク・エンコードの Local Encoding 2 および Network Encoding 2 を使用して起動されます。255 より上の文字を表示するには、エンコードを UTF8 に変更する必要があります。このように機能が強化された結果、“Pass 8–bit Characters” 設定は削除されました。

Caché のインスタンスが複数あり、あるものは Unicode でエンコードされているものと、8 ビットでエンコードされているものがある場合は、ターミナルのインスタンスごとにエンコードを明示的に設定することをお勧めします。このようにすれば、既定値は適用されなくなります。

引数の変更

ターミナルでは、コマンド引数の /size、/pos、および /ppos はサポートされなくなりました。内部的には Unicode で文字を処理するように機能が変更されており、ロケールが異なるサーバ間の変換も正しく処理されるようになっています。

パスワードのエコー

以前のリリースでは、ターミナルでパスワードの入力が要求されるときに、出力デバイスへの文字のエコーは行われていませんでした。バージョン 5.1 の時点では、Caché パスワード・ログインが有効化されているときに、パスワードの文字はすべてアスタリスク (*) としてエコー表示されます。ターミナルのプロンプトにおいてユーザ ID とパスワードを指定してログインを実行するアプリケーションで、ターミナルから送信される文字に対するパターン・マッチングを行う場合は、エコーの動作について認識しておく必要があります。

Windows キューブからの起動

このバージョンの Caché では、キューブでのリモート・ターミナル・セッションに Telnet と TRM のどちらを使用するかを決める方法が変更されています。[リモート・システム・アクセス] メニューに表示されるサーバの一覧は、以下の規則に従っています。

  1. リモート・サーバは常に、有効と表示されます。

  2. ローカル・サーバのうち、サーバの IP アドレスがローカル・ホストのものと異なり、サーバ名がローカル・インスタンス名と異なるものは、リモート・サーバと同様に扱われます。これは、サーバにローカル・インスタンスが関連付けられていないからです。

  3. IP アドレスがローカル・ホストのアドレスに等しく、サーバ名がローカル・インスタンス名と同一となっているローカル・サーバは、構成がダウンしているか、そのインスタンスの telnet が無効化されている場合、グレーで表示されます。それ以外の場合は、サーバ名が有効になります。

  4. [リモート・システム・アクセス] メニューを使用してターミナルを起動するときは常に、telnet 接続が使用可能です。

ターミナルがキューブのメイン・メニューから起動されるとき、以下のようになります。

  • アクティブな優先接続サーバがそのインスタンスに関連付けられている場合は、プライベート・ターミナル接続が確立されます。 ターミナルのウィンドウのタイトル・バーには、TRM という文字列の後にプロセス ID および Caché インスタンスの名前が表示されます。インスタンスが実行中でない場合は、ターミナルの起動の前にインスタンスが起動されます。

  • それ以外の場合は、telnet 接続が確立されます。 ターミナルのタイトル・バーには、ホスト名の後に "NTI - Cache Telnet" という文字列が表示されます。 キューブでは、キューブと一緒にインストールされていない Caché インスタンスが起動されることはありません。

ローカル・エンコードとネットワーク・エンコードの区別

ターミナルのローカルおよびネットワークの変換設定は、8 ビット・インストールと Unicode インストールのそれぞれについて別個に保存されるようになりました。これによって、同じホスト上に 8 ビット・インストールと Unicode インストールが存在する場合に、それぞれ異なる動作をユーザが選択できます。以前のバージョンでは、これらは同一でした。

SOAP パラメータの場所の変更

このバージョンでは、SOAP のロギング動作を制御するパラメータの場所が変更されています。以前のバージョンでは、^%SYS でした。バージョン 5.1 では、SOAP 要求の作成元であるネームスペースに存在します。該当するパラメータを以下に示します。

  • ^ISCSOAP("Log") — "1" に設定されているときは、Web サービス要求およびクライアント応答がログに記録されます

  • ^ISCSOAP(“LogFile”) — ログに記録された情報が格納されるファイルのフルパス名

コールインとコールアウト

Windows プラットフォームの場合、以下のようになります。

Microsoft Windows 上で、Caché が Visual Studio 7.1 でコンパイルされるようになりました。CALLIN インタフェースや CALLOUT インタフェースを使用して Caché と通信するユーザ・アプリケーションは、Visual Studio をこのバージョンにアップグレードする必要があります。

CSP の変更

CSP 猶予期間の変更

Caché バージョン 5.1 でのライセンスに関する変更の一環として、CSP によるセッションの扱い方も変更されました。

1 つの CSP セッションで複数のページにアクセスし、そのセッションがセッション・タイムアウトまたはアプリケーション設定 %session.EndSession=1 によって終了した場合、CSP は追加の猶予期間を与える代わりに、ライセンスを即座に解放します。

セッションが 1 つのページに対してのみアクティブである場合は、セッションが終了したときに、CSP は5 分間の猶予期間の間、オープンしたままセッションを保持します。

CSP ページ時間計測統計の既定値はオフ

Caché 5.1 では、クラス・パラメータ PAGETIMING の既定値が 0 となるように変更されています。以前のバージョンでは、既定値は 1 でした。値が 0 の場合は、そのクラスから継承するすべてのクラスに対して、ページ時間計測統計の収集がオフになります。CSP ページに対して収集されるページ時間計測統計にアプリケーションが依存している場合は、PAGETIMING が 1 に設定されているスーパークラスから継承するように修正する必要があります。

ロケールの照合が既定の設定でオンになる

"管理者" セクションの説明を参照してください。

Caché Dreamweaver 拡張機能の修正

Dreamweaver 拡張機能は、セキュリティを向上させるためにバージョン 5.1 で広範囲に変更されています。このバージョンでは、C++ バインディングのみを使用するようになりました。この拡張機能を使用するには、ユーザに %Development 特権が付与されている必要があります。この特権を持たないユーザに対しても、この拡張機能は引き続き機能しますが、セキュリティ規則に従い、Caché からのデータは表示されません。

この変更の結果、以下のようになります。

  • Dreamweaver 拡張機能が動作するには、サーバ上に Cache 5.1 が必要です。

  • 以下に示すディレクトリが %path% 環境変数内に存在する必要があります。

    \Program Files\Common Files\Intersystems
    

オペレータ

システム管理ポータル

以前のバージョンでは、Caché を管理する方法は Caché が実行されるプラットフォームに大きく依存していました。バージョン 5.1 では、すべてのプラットフォームに共通の新しい管理用インタフェースが導入されています。Caché 5.1 では、ブラウザベースのインタフェースであるシステム管理ポータルを使用してシステムを管理します。

このドキュメントの "管理者" セクションに概要の説明がありますが、システム管理ポータルの詳細は、"システム管理" のドキュメントに記載されています。

PERFMON と %SYS.MONLBL の調整

これらのユーティリティはそれぞれ、同じ Caché データ構造のいくつかを使用してデータを収集します。そのため、それらを同時に実行しないでください。同時に実行すると、お互いに相手のデータが破壊される危険があります。バージョン 5.1 では、同時実行を防ぐためのプログラム・チェックが追加されています。

バックアップ情報の変更

バージョン 5.1 からは、バックアップ・データベース・リストの保管場所が変更されています。^SYS("BACKUPCHUI") は、今後は使用されません。このリストは、Backup.General.AddDatabaseToList() メソッドおよび Backup.General.RemoveDatabaseFromList() メソッドによって保守されます。さらに、この設定は手動で行わないことを強くお勧めします。この方法では、メソッドが正常に機能しないからです。代わりに、システム管理ポータルまたは ^BACKUP ユーティリティを使用してください。

ジャーナル・リストア時の新しい質問

以前のバージョンでは、異なるオペレーティング・システム上で書き込まれたジャーナル・ファイルのリストアが、ジャーナル・リストア・ルーチン ^JRNRESTO によって正しく処理されませんでした。それらのシステムによって指定されたディレクトリ名を処理するときに、エラーが発生していました。

Caché バージョン 5.1 では、これに対処するために、ジャーナル・ファイルが別の種類のオペレーティング・システム上で作成されたものかどうかを尋ねるようになりました。ただし、サイトでスクリプトを使用してジャーナルのリストアを制御している場合、この新しい質問に応答するようにスクリプトを修正する必要があります。

クラスタ・メンバ起動の改善

Caché インスタンスがクラスタにメンバを追加するときのロジックが改善され、クラスタを構成するシステム間の混乱が回避されています。詳細は、本ドキュメントの "管理者" の部分を参照してください。

FeedbackOpens in a new tab