MSM グローバルの変換
Caché は、MSM データの変換のためのメカニズムをいくつか提供しています。
選択されたグローバルの変換
Caché では、データベース全体ではなく、個別のグローバルまたはグローバルのグループに対して次のような変換方法を提供しています。
-
MSN と Caché の間にネットワークを設定します。MERGE コマンドか ^%GCOPY を使用して、MSM データベースから Caché データベースにグローバルを移動します。
-
%GS または %FGS を使用して、個別の MSM グローバルまたはグループの MSM グローバルを MSM 形式で保存します。
-
%GS 形式のグローバル保存には、^%GI を使用してデータをインポートします。グローバルに制御文字が含まれる場合は特に、ANSI ^%GS エンリ・ポイントを使用する方がより信頼性が高くなります。
-
%FGS 形式のグローバル保存には、^%SYS.GIFMSM を使用してデータをインポートします。
-
MSM 文字列照合の保持
既定では、Caché は Latin 1 サブセットの Unicode 照合を使用します。Latin 1 サブセットは、MSM の既定の数値照合順序と同じ照合ルールに従います。Caché の Unicode 照合はこの形式と後方互換性があるため、数値で照合された MSM グローバルを変換するために予備作業を行う必要はありません。ただし、Caché からDDP 上の文字列照合グローバルを参照することはできないため、文字列照合を使用した MSM グローバルを変換するには、Caché を準備する必要があります。
例えば、^XYZ という文字列照合グローバルを変換する必要があるとします。この変換を実行するには、以下の 2 つの方法があります。
-
^%SYS.GCREATE ユーティリティを使用して ^XYZ グローバルを作成します。このオプションはすべての MSM グローバルを文字列照合タイプで変換する場合を除き、推奨されません。
-
適切なネームスペースに変換します。
-
^%SYS.GCREATE を起動して、グローバル照合順を尋ねるプロンプトが表示された場合、タイプ 129 (文字列照合) を選択します。
-
“選択されたグローバルの変換” で前述した方法で変換します。
-
-
文字照合を使用する変換を実行するプロセスの特性を変更します。
-
以下のコマンドを発行します。
Set x=$ZU(23,1,129)
-
“選択されたグローバルの変換” で前述した方法で変換します。
-
Caché での NULL 添え字サポートの有効化
既定では、Caché はグローバル・データ内で NULL 添え字の使用を許可しません。NULL 添え字が使用されないように、アプリケーションとデータを変更することを強くお勧めします。
NULL 添え字を含む MSM グローバルを変更するには、次の 2 つの方法があります。
-
対話的に NULL 添え字サポートを有効にするには、次のようにします。
-
発行するプロセスのみの場合は、次のコマンドを実行します。
Set x=$ZU(68,1,1)
-
システム内のプロセスすべての場合は、次のコマンドを実行します。
Set x=$ZU(69,1,1)
-
“選択されたグローバルの変換” で前述した方法で変換します。
-
-
Caché を起動するごとにすべてのプロセスに対して NULL 添え字サポートを有効にします。それには、次のコード行を ^ZSTU または SYSTEM ^%ZSTART のどちらかに追加します。
Set x=$ZU(69,1,1)
その後、Caché を再起動し、“選択されたグローバルの変換” で前述した方法で変換します。
データベースによるグローバルの変換
特定のボリューム・グループまたは UCI 内のすべてのグローバルを一度に変換する場合は、個別のグローバルまたはグローバルのグループを変換するのではなく、全体をまとめて変換することを推奨します。UCI 全体またはボリューム・グループを一度に変換することで、プロセスがより高速になるだけでなく、エラーが発生するリスクが大幅に減少します。
-
以下の互換性のない MSM グローバルが、既に変換されていることを確認してください。
-
文字列照合を使用している MSM グローバルは、前述の “MSM 文字列照合の保持” で説明した方法で変換する必要があります。
-
NULL 添え字を含む MSM グローバルは、前述の “Caché での NULL 添え字サポートの有効化” で説明した方法で変換する必要があります。
-
-
MSM データベースをバックアップします。
-
MSM データベース上で ^VALIDATE を実行し、物理的な整合性を確実にします。
-
ブロック型転送モードで変換する場合は、^RECOVER を実行して、マップ・ブロックに割り当て済みとマークされたままになっている未使用のブロックがないことを確認します (グローバルがグローバル・ディレクトリ・ブロックから削除されていても、^RECOVER が実行されていないと、%MSMCVT はこのデータを有効なグローバル・データであると見なして、それを Cache データに変換します)。
-
MSM データベース上で ^OLC を実行し、グローバルの効率を最大化します。これにより、変換の全体的なパフォーマンスが向上します。
-
MSM システムまたはユーザ定義のスクラッチ・グローバルをすべて削除します。
-
MSM をシャットダウンするか、データベースをディスマウントして、変換されるデータベースがアクティブでないようにします。
-
バイナリ・モード FTP、ネットワーク・コピー、またはテープのいずれかを使用して、MSM データベースを Caché をホストするマシン上に移動します。このデータベースはどのディレクトリに入れてもかまいません。
-
Caché システム上で構成可能な最大数のグローバル・バッファを構成して、その後 Caché を起動します。
-
ローカルの宛先データベースとネームスペースが準備ができていることを確認します (“ネームスペース構成を生成する” で説明した手順に従います)。
-
新しいネームスペースから、^%MSMCVT ユーティリティを実行します。プロンプトで、MSM データベースのパスとファイル名を入力します。変換を実行すると、データベースは、現在のネームスペースにある Caché データベースに変換されます。
-
複数の MSM データベースから 1 つの Caché ネームスペースにデータをインポートする場合は、各データベースに対して 1 回ずつ、同じネームスペースから繰り返しユーティリティを実行します。
ブロック型転送モードでの %MSMCVT の実行
^%MSMCVT はブロック型転送および非ブロック型転送の 2 つのモードで実行できます。設定中に、[ブロック型転送モードで変換しますか?] と表示されます。このプロンプトに [いいえ] と応答すると、^%MSMCVT は非ブロック型転送モードを使用します。以下の違いは重要です。
-
ブロック型転送モードでは、^%MSMCVT はデータベース全体をブロックごとに順次スキャンし、対応するマップ・ブロックの割り当てがマークされたデータ・ブロックを検索します。そのブロックを見つけると、新しい Caché データベースにそれを置きます。
-
非ブロック型転送モードでは、^%MSMCVT はデータベースをグローバルごとに変換し (これにより、必要ならばユーザがいくつかのグローバルを変換することを回避できる)、各グローバルのツリーをたどります。
ブロック型転送モードの変換を使用する際は、MSM データベースに事前の修復作業による "孤立" ブロックがないことを 100% 確認した場合を除き、MSM側での ^RECOVER 実行は絶対要件となります。"孤立" ブロックとは、マップ・ブロックに割り当て済みとマークされていても、いずれの有効なグローバル・ツリーにも含まれないブロックのことです。これは、データベース修復の際にブロックがツリーから抜け落ちた場合に、そのブロックがマップで未割り当てにならないことが原因で起こります。"孤立" ブロックが存在し、かつ ^RECOVER が実行されない場合、MSM では表示されなかった古いデータが Caché で表示され、有効なデータと区別がつかなくなります。
非ブロック型転送モードで ^%MSMCVT を実行する場合、^RECOVER は不要です (実際のところ違いはありません)。