2002年12月
マジックソフトウェア・ジャパン 株式会社

 

Pervasive データベースゲートウェイ

Ver9.3-3a 追加情報
Magic eBusiness Platform Ver9.30

 

 

 

 

本文書には、Magic eBusiness Platform(以下 Magic と表記)Pervasive データベースゲートウェイとして提供されるプログラム(MGPV2K.DLL)に関する情報が含まれています。文書中に記述されている"本プログラム"とは、"MGPV2K.DLL"を示します。

本プログラムのバージョンは、Magic の[ヘルプ/MAGIC情報]の[ロードモジュール]欄にて確認できます。

本文書中において特にことわりのない場合、Pervasive.SQL は Pervasive.SQL 2000i Workgroup を指します。以下 Pervasive.SQL は P.SQL と表記します。

なお、P.SQL を使用する場合、P.SQL に添付されるドキュメントも参照してください。

 

 

使用条件

動作環境

仕様および制限事項

技術情報

 

 

 

 

 

使用条件  (Top)

 

  • 本プログラムを購入本数以上複製すること、または逆コンパイル・逆アセンブルすること、もしくは再使用許諾・賃貸・貸与及び譲渡することはできません。

  • 本プログラムは、特定物として現存するままの状態で提供され、マジックソフトウェア・ジャパン株式会社及び Magic Software Enterprises Ltd. は、本プログラムの瑕疵及びその使用結果について一切保証もせず、損害賠償も負いません。

  • 本プログラムの著作権は、Magic Software Enterprises Ltd. にあります。

 

 

 

 

 

動作環境 (Top)

  • Magic Ver9.30JSP3a で動作確認しています。

  • 本ゲートウェイと P.SQL 2000i Workgroup を組合わせて使用する場合、Magic Ver9.30 に添付されている P.SQL 2000i Workgroup SP3 を使用してください。

  • サーバベースの P.SQL との接続テストは以下の環境で確認しました。
    P.SQL 2000i for Windows NT(Server Edition):Serverが1CPUの場合のみ

  • 基本構成
    P.SQL 2000i Workgroup はデータサーバとなるマシンにインストールし、そのマシンの P.SQL のエンジンからのみデータをアクセスすることをお勧めします。
    詳細は本ドキュメントの「Windows の簡易 LAN について」を参照してください。

  • 本ゲートウェイの使用する P.SQL の機能
    P.SQL ではトランザクショナルアクセス及びリレーショナルアクセスがサポートされています。本ゲートウェイではトランザクショナルアクセスを使用していますので、リレーショナルアクセスは使用できません。
    アクセス方法等の詳細については P.SQL に添付されるオンラインマニュアル(Getting Started with Pervasive.SQL)を参照してください。

 

 

 

 

仕様および制限事項 (Top)

以前のバージョンとの共存について

  • Magic Ver9 では「Ver4.3 ロック互換機能」はサポートされていません。

  • P.SQL を使用する場合、dbMAGIC Ver8 以降にバージョンアップしてください。

  • P.SQL の仕様により、トランザクショナルエンジンのバージョンが異なる場合(例 P.SQL 2000i と Btrieve Ver6.15)、同時に同一ファイルに正常にアクセスできません。
    そのため、dbMAGIC Ver8 以前のバージョンとの間で同一ファイルにアクセスする場合、必ずエンジンのバージョンを揃えてください。

 本ゲートウェイ使用時(並行開発時、並行運用時共に)の最適な環境設定を以下に示します。

[DBMS]テーブル パラメータ  /EXTENDED=Y
[データベース]テーブルの[データベース特性]ダイアログ Magic ロック テーブル(物理トランザクション使用時)
両方 (遅延トランザクション使用時)※1
ロックパス スペース(何も設定しない)
[動作環境]テーブル ロックファイル mglock.dat
[タスク特性]ダイアログ

 

 

オンラインタスク、ブラウザタスク トランザクション開始 レコード前処理の前(遅延トランザクション使用時)※2
ロック方式 入力時
バッチタスク トランザクションモード 物理
ロック方式 即時

※1 遅延トランザクション使用時、ロック制御はロックファイルで行われるため
※2 遅延トランザクション使用時、更新レコードの識別は行われないため

 P.SQL の環境設定について

環境設定は P.SQL に添付の Pervasive Control Center にて行います。
以下の設定値を確認してください。

  • [サーバ/通信バッファサイズ]カテゴリの[通信バッファサイズ]設定を「63」にしてください。

  • [サーバ/通信バッファサイズ]カテゴリの[MKDE 通信バッファサイズ]設定を「63」にしてください。

  • [サーバ/データインテグリティ]カテゴリの[トランザクション一貫性保守]設定を「On」にしてください。

サーバベースの P.SQL の使用について

  • 中規模以上のシステムでは、P.SQL 2000i for Windows NT(Server Edition)または P.SQL 2000i for NetWare(Server Edition)の使用を強く勧めます。
    このどちらも Magic にはバンドルされていません。これらの P.SQL(Server Edition)を使用する場合、レコードの選択はサーバで行われます。範囲で指定されたレコードだけがクライアントに送られます。

  • Magic から P.SQL(Server Edition)を使用する場合、[クライアント/アクセス]カテゴリの[リクエスタ]設定を「On」にしてください。

  • P.SQLに対して、下位バージョンのリクエスタからのアクセスはサポートされていませんので、P.SQL 2000i へのリクエストは P.SQL 2000i のリクエスタを使用してください。

Windows の簡易 LAN について

Windows の Microsoft ネットワーク共有サービス、またはワークステーションを利用して、任意の Windows マシンを Magic のサーバとして使用し、更にこのマシン上で Magic を実行することができます。

この場合、全てのマシンがサーバとして動作する可能性があります。そのため、P.SQL に添付の Gateway Locator を使用、または[クライアント/アクセス]カテゴリの[ローカル]設定および[リクエスタ]設定を設定する等、サーバとなるマシンが明確になるように設定することをお勧めします。

サーバとなるマシンでは[サーバ/アクセス]カテゴリの[リモートリクエストの受付]設定を「On」にしてください。

以下の設定により、システムトランザクションの実行が頻繁に行われるようになるため、ロックの解除は速くなりますが、ディスクアクセスは増加することがあります。

  • [サーバ/データインテグリティ]カテゴリの[起動時間制限]設定を「1」にしてください。

  • [サーバ/データインテグリティ]カテゴリの[オペレーションバンドル制限]設定を「1」にしてください。

その他

  • 可変レコード長と固定レコード長との合計サイズは 32767 バイトまでです。これは Magic の仕様制限によるものです。

  • 1個のファイルにつき、BLOB 型項目を1項目のみ定義することができます。また、メモ型項目と BLOB 型項目は1個のファイルに同時に定義できません。

  • P.SQL を使用する場合、トランザクションの範囲外ですべてのファイルをオープンしてください。

  • レコードレベルのトランザクション機能を使用する場合、[トランザクション開始]欄を「レコードロック時」としてください。これは P.SQL ではトランザクション開始前に読込んだレコードに対して更新および削除ができず、トランザクション終了時にレコードロックを解除するためです。

    [トランザクション開始]欄を「レコード前処理の前」とした場合、トランザクション開始前にレコードが読込まれる場合があります。

  • レコードを確定する場合、処理対象となるレコードの前または後のレコードを一時的に取得することがあります。そのため、それらのレコードに既にロックがかけられている場合、レコードロックが発生することがあります。

  • 親子タスクにおいて同一のテーブルを使用した場合、子タスクでレコード登録に失敗すると、親タスクのレコードに対するロック情報が残る場合があります。

  • 存在するファイルに対してテーブル特性のアクセスキーおよび暗号化キーを変更することはできません。ただし、新規に設定する事は可能ですので、変更する場合、一度これらの設定を解除してから再設定してください。

  • [データベース特性]ダイアログの[照合順序ファイル]は無効となります。

  • ログファイル名には、セッションごとに設定されるユーザ名とプロセスIDが付加されます。そのため、ログファイルを長いファイル名をサポートしないディスク上に作成しないでください。

データテーブルアクセス規制

下表は、物理トランザクション使用時に、処理A から先にアクセスされたテーブルに対して、処理B が後からアクセスした場合、どういうアクセス規制が働くかを示しています。

  • Magic のロックファイル(mglock.dat)を共用した場合 かつ[Magic ロック]が「両方」または「テーブル」の場合

    処理A: [タスクタイプ]=オンライン、[ロック方式]=入力時
    処理B: [タスクタイプ]=オンライン、[ロック方式]=入力時 または
    [タスクタイプ]=バッチ、 [ロック方式]=即時

  処理A 
処理B アクセスモード 読込(R)  書出(W)
  共有 読込(R) 書出(W) なし(N) 読込(R) 書出(W) なし(N)
読込(R) 読込(R) T+R+ T+R+ T- T- T- T-
書出(W) T+R+ T+R+ T- T+R+ T+R+ T-
なし(N) T- T- T- T- T- T-
書出(W) 読込(R) T- T+R+ T- T- T- T-
書出(W) T- T+R+ T- T- T+R+ T-
なし(N) T- T- T- T- T- T-
  • Magic のロックファイル(mglock.dat)を非共用にした場合 または[Magic ロック]が「なし」または「レコード」の場合

    処理A: [タスクタイプ]=オンライン、[ロック方式]=入力時
    処理B: [タスクタイプ]=オンライン、[ロック方式]=入力時 または
    [タスクタイプ]=バッチ、 [ロック方式]=即時

  処理A 
処理B アクセスモード 読込(R)  書出(W)
  共有 読込(R) 書出(W) なし(N) 読込(R) 書出(W) なし(N)
読込(R) 読込(R) T+R+ T+R+ T- T+R+ T+R+ T-
書出(W) T+R+ T+R+ T- T+R+ T+R+ T-
なし(N) T- T- T- T- T- T-
書出(W) 読込(R) T- T+R+ T- T+R+  *1 T-
書出(W) T- T+R+ T- T+R+ T+R- T-
なし(N) T- T- T- T- T- T-

TT- :テーブルアクセスに制限があります(テーブルがオープンできません)。
T+R-:テーブルアクセスには制限はありませんが、
レコードアクセスに制限があります(レコードロックがかかります)。
T+R+:テーブルアクセスにも、レコードアクセスにも制限がありません。

*1:入力時レコードロックはかかりませんが、レコードを更新しようとした場合、レコードロック解除待ちとなります。即時レコードロックはかかりませんが、レコードを更新しようとした場合、レコードロック解除待ち、もしくはレコードがロックされていますとなります。

これらの表からわかりますように、[データベース特性]ダイアログの[Magic ロック]を「両方」または「テーブル」に設定し、Magic のロックファイル(mglock.dat)を共用してください。

 レコードの挿入、更新、削除を行うタスクがアボートする問題の対応

  • 暗黙のページロックの説明
    P.SQL では並行トランザクションをサポートしています。つまり、複数のアプリケーションが同じファイル(Ver6.x 以降のファイル形式)に同時に複数のトランザクションを実行できます。
    並行トランザクション中にファイルが変更されると、変更されたレコードを含むページ(レコードが可変長のときには複数ページ)とそれに関連するインデックスのページが、P.SQL により自動的にロックされます。これを暗黙のページロックと言います。
    暗黙のページロックによりロックされたページ上にある明示的にロックされていないレコードを更新、削除する場合、ロックとなります。
    暗黙のページロックとレコードロックは互いにブロックしません。

  • Magic におけるマルチユーザ制御
    レコードロック発生時の Magic の動作はイベントハンドラの[行ロック]イベントおよび[タスク特性]ダイアログの[エラー発生時]欄の設定により決定されます。

    レコードの挿入、更新、削除に失敗した時の Magic の動作はイベントハンドラの[挿入/更新/削除に失敗]イベントおよび[タスク特性]ダイアログの[エラー発生時]欄の設定により決定されます。

  • 問題点
    [挿入/更新/削除に失敗]イベント発生時に「アボート」する設定となっているタスクでは、レコードの挿入、更新、削除においてレコードロックまたはファイルロックとなった場合、タスクはアボートします。
    この動作は、Ver7 以前の dbMAGIC と 標準添付の Btrieve の組み合わせの動作と異なります。

  • 問題の対応
    レコードの挿入、更新、削除においてレコードロックまたはファイルロックが発生した場合、そのオペレーションをリトライします。リトライが失敗した場合、イベントハンドラの設定に基づいた動作を行います。リトライ回数およびリトライ間隔を設定するには、[DBMS]テーブル[Pervasive]行の[パラメータ]欄に以下のように設定してください。

    /RTRY=リトライ回数:リトライ間隔(ミリ秒単位)

    この設定がない場合、リトライは行われません。リトライ回数の上限は 10 回となります。また、リトライ間隔の設定がない場合、リトライ間隔は 500 ミリ秒となります。

  • 問題の対応の副作用
    並行トランザクションがコミット、または、アボートされるか、リトライ回数が上限を越えるまで Magic に制御が戻りません。必要に応じてリトライ回数とリトライ間隔を調節してください。

P.SQL の仕様(暗黙のページロック)により、次のような手順で操作を行うと、デッドロック状態になる場合があります。

  1. ユーザAとユーザBが Magic のロックファイル(mglock.dat)を共用します。

  2. ユーザAがオンラインタスクにより、あるファイルのあるレコードをロックします。
    (このタスクの[タスク特性]ダイアログの[ロック方式]欄は「入力時」に設定)

  3. ユーザBがバッチタスクにより、上記ファイルのあるレコードを更新した後、ユーザAがロック中のレコードにきたところで、レコードロック解除待ちになります。(このタスクの[タスク特性]ダイアログの[ロック方式]欄は「即時」、[トランザクションモード]欄は「物理」、[トランザクション開始]欄は「タスク前処理の前」に設定)

  4. ユーザAがレコードの更新を行います。
    ステップ3で、このレコードを含むページに対して暗黙のページロックがかかっているため、ユーザAの方もレコードロック解除待ちになります。

    なお、Esc キーを押せば、レコードロックは解除できます。

Magic が異常終了した場合、ファイルがロック状態になる場合があります。

これはP.SQL がまだ動作しているため、P.SQL で管理しているロック情報が残るためです。必要に応じて以下の処理を行ってください。

  • P.SQL に添付の Monitor を使用して異常終了したユーザを削除してください。

  • タスクトレイ上の P.SQL のアイコンを右クリックし、P.SQL を停止してください。

    P.SQL はスタートアッププログラムに登録されています。このようにしておきますと、Magic の起動がより速くなります。P.SQL を終了した場合、Magic 起動前にP.SQL を起動しておくことをお勧めします。


ファイルフォーマットについて

  • 以前のファイルフォーマットで新規ファイルを作成したい場合、[サーバ/ファイル互換性]カテゴリの[作成ファイルのバージョン]設定を使用したいファイルフォーマットに合わせて変更してください。

    注意事項:Magic においてファイル定義を変更(例えば、項目の定義順の入替え等)した時にも、ファイルフォーマットは設定されているファイルフォーマットに変更されます。

  • ファイルフォーマットは 6.x 以上にすることをお勧めします。Btrieve 5 で作成されたファイルと Btrieve 6 以降で作成された 5.x フォーマットには差異がある為です。また、パフォーマンスの面からも 6.x 以上にすることをお勧めします。

  • 6.x 以前のフォーマットのファイルは BLOB 型項目を扱えません。
    これは P.SQL の仕様制限によるものです。

  • 6.x 以前のフォーマットのファイルに対する並行トランザクションは排他トランザクションとして扱われるため、ファイル全体がロックされます。
    これは P.SQL の仕様制限によるものです。

  • 6.x 以前のフォーマットのファイルに対する Extended 命令は発行されません。

ファイル名について

  • 長いファイル名を使用できます。ただし、ファイル名の最大長に関しては P.SQL が動作しているオペレーティングシステムの仕様の制限、Pervasive ゲートウェイが 動作しているオペレーティングシステムの仕様の制限、および P.SQL がサポートしている仕様の制限を受けます。
    ファイル名の最大長の詳細については、各々の製品に添付されているマニュアルおよび注意事項を参照してください。

  • ファイル名に空白文字を使用する場合、クライアント側のマシンの[クライアント/アクセス]カテゴリの[スペースを含むファイル/ディレクトリ名]設定を「On」にしてください。
    この設定が「Off」の場合、空白文字の1つ手前の文字までをファイル名とします。
    これは P.SQL の仕様制限によるものです。

P.SQL 7 以降の新機能の使用について

Magic に添付されている Pervasive ゲートウェイでは P.SQL 7 以降の新機能は考慮されていません。P.SQL 7 以降の新機能に対するテストは行っていませんが、現時点で注意が必要と思われる内容を以下に示します。

  • 7.x 以降のフォーマットを使用する場合、ページあたりレコード数が256に制限されます。設定/データベース/特性/データベース情報欄に「/PAGESIZE=####」を設定し、より適切なページサイズとなるように設定することをお勧めします。ページサイズは、512の倍数、かつ、4096を超えない値を設定してください。
    ただし、ファイルが分割された場合、Magic の持つファイル管理関数、入出力機能関数およびファイル変換ユーティリティなどは、分割されたファイルの一つにしか有効にならず、処理が正常に終了しない場合がありますのでご注意ください。

  • P.SQL のオンラインマニュアルに”ファイルに対してキーを定義していない場合でも、トランザクションの一貫性保守機能を有効にすると自動的にキーが追加されます”と書かれています。そのため、ファイルには明示的にユニークキーを設定することをお勧めします。

  • Magic では ACS(オルタネートコレーティングシーケンス)及び ISR(インターナショナルソート規約)はサポートしていません。これらの機能を使用するとファイルの内容が予期した通りに表示されない可能性があります。

  • ステータスコードの変更点については P.SQL に添付されるオンラインマニュアル(Status Codes and Message)を参照してください。P.SQL 7 以降に追加されたステータスコードが返された場合、ファイルマネージャの異常としてダイアログに表示されます。

 

 

 

 

技術情報 (Top)

 

 

 記憶型式と有効キー長

これらのカラムの[データベース定義]欄は「標準」に設定されます。

項目型 記憶型式 有効キー長
文字 String 1-255 
LString  1-255 
ZString  1-255 
数値 Signed Integer 2、4
Unsigned Integer  2、4
Float  4、8
Float MS-Basic 4、8
Packed Decimal 1-10
Numeric 1-18
Magic Number 2-10
C-ISAM Decimal 2-17
論理 Integer Logical 1、2
String Logical 1
日付 Integer Date 4
Integer Date - 1901 4
String Date 6、8
YYMD Date 4
Magic Date 4
  Magic Date - 1901 4
時刻 Integer Time 4
String Time 6
HMSH Time 4
Magic Time  4


  制限値

項 目 制限値
インデックスの最大数 119
インデックスセグメントの最大数 119
インデックスあたりの最大セグメント数 119
最大インデックス長 255
最大固定レコード長 4,088
最小固定レコード長 5
最大可変レコード長 32,765
最大文字型長 4,088
最大メモ項目長 32,765
メモ項目数  最大可変レコード長により制限
BLOB項目数 1
双方向インデックスのサポート
デフォルト識別子 dat

 


データベースに対するパラメータ

  • Extended オペレーション(/EXTENDED=Y、N)
    [DBMS]テーブル[Pervasive]行の[パラメータ]欄に設定します。
    P.SQL の Extended オペレーションを使用するか否かを設定します。
    Extended オペレーションを使用する場合、セレクトコマンドの範囲/位置付の条
    件によるレコード絞込みが P.SQL エンジンにより実行されます。この機能は、ク
    ライアント/サーバシステムにおいてパフォーマンスを向上させます。
    デフォルトでは「Y」となります。

  • リトライ回数(/RTRY=リトライ回数:リトライ間隔(ミリ秒単位))
    [DBMS]テーブル[Pervasive]行の[パラメータ]欄に設定します。
    レコードの挿入、更新、削除においてレコードロックまたはファイルロックが発生
    した時にオペレーションをリトライする回数を設定します。
    デフォルトではリトライを行いません。

  • 自動ページサイズ(/PAGESIZE=nnnn)
    [データベース]テーブルの[データベース情報]欄に設定します。
    新規に作成するファイルのページサイズを設定します。
    nnnn には、512バイトの倍数、かつ4096バイトを超えない数を設定してください。
    なお、この値は、P.SQL の仕様に合致したものである必要があります。
    デフォルトでは、ファイル定義にしたがって最適なページサイズを計算します。

 

 

以上