2.5.5 データの登録
(1) データの登録方法
作成した表にデータを登録するには,操作系SQLのINSERT文を使用します。登録するデータは,HiRDBをセットアップしたときの文字コードに合わせて,XML変換ライブラリを使用して生成したESIS-B形式データです。XML変換ライブラリ,およびESIS-B形式データの詳細については「5. XML変換ライブラリ」を参照してください。
テキスト形式のXMLデータで登録する場合は,INSERT文の中でXMLPARSE関数を使用します。ただし,XMLデータに対して妥当性検証を行わない,などの制約があります。
INSERT文,およびXMLPARSE関数の詳細についてはマニュアル「HiRDB SQLリファレンス」を参照してください。
INSERT文の指定例を次の図に示します。
また,HiRDBの「pdload(データベース作成ユティリティ)を使用すると,データの一括登録ができます。
SQLによるXMLデータ登録時にXMLデータのエラーを検知しても,トランザクションはロールバックしません。XMLデータのエラーが発生した場合,SQL(INSERT文またはUPDATE文)による登録のときは,SQLCODE=997のエラーとなります。なお,エラーコード詳細化指定をしているときは,SQLCODE=-3040のエラーになります。また,pdloadによる登録のときは,該当する行の登録がスキップされます。
(2) 登録・検索同時実行の設定
登録・検索同時実行を設定すると,データの登録と検索の同時実行ができます。同時実行には次の利点があります。
-
ほかのユーザが更新中(トランザクションが終了していない状態)のXMLデータを検索できます。
-
XML型格納用RDエリアおよびIXXML型情報格納用RDエリアに対してグローバルバッファを割り当てると,登録および検索性能が向上します。
ただし,同時実行できるのは次の場合です。
-
SQLによる単数の更新系トランザクションと,複数の検索系トランザクションの同時実行
-
インデクス未作成の場合,複数の更新系トランザクションの同時実行
-
インデクス情報の取得ユティリティ,インデクス作成開始ユティリティと,検索系トランザクションの同時実行
なお,インデクス情報の取得ユティリティの詳細については,「3.2.4 phjidxls(インデクス情報の取得ユティリティ)」,インデクス作成開始ユティリティの詳細については,「3.2.8 phjstartidx(インデクス作成開始ユティリティ)」を参照してください。
(a) 指定方法
XML Extensionの環境設定項目,およびHiRDBのバックエンドサーバ定義またはシングルサーバ定義に,次の内容を設定します。XML Extensionの環境設定項目については,「2.6 XMLデータ検索プラグインのユーザ環境設定」を参照してください。また,HiRDBのバックエンドサーバ定義またはシングルサーバ定義の詳細については,マニュアル「HiRDB システム定義」を参照してください。
- XMLデータ検索プラグインの環境設定項目
-
-
XMLデータ型プラグインを使用している場合
XMLデータ型プラグインの環境設定項目「登録・検索同時実行指定」で次のように指定します。
set phd_search_wait=nowait
-
IXXMLインデクス型プラグインを使用している場合
IXXMLインデクス型プラグインの環境設定項目「1RDエリア当たりの排他制御用共用メモリサイズ」で次のように指定します。
set phj_lock_pool_size=共用メモリサイズ
-
- HiRDBのバックエンドサーバ定義またはシングルサーバ定義
-
-
IXXMLインデクス型プラグインを使用している場合
IXXMLインデクス型プラグインで使用する共用メモリのサイズを指定します。
HiRDBのバックエンドサーバ定義またはシングルサーバ定義のオペランド「pdplgprm」は,次の形式で指定してください。
- オペランドの指定形式
pdplgprm -n プラグイン名 -s 共用メモリサイズ
- 引数
-
-n プラグイン名
共用メモリを使用するプラグインの名称を指定します。ここでは,IXXMLインデクス型プラグインのプラグイン名「_phjxml」を指定してください。
-s 共用メモリサイズ
IXXMLインデクス型プラグインで使用する共用メモリのサイズ(キロバイト)を指定します。
-
(b) 注意事項
-
HiRDBが提供しているユティリティによる登録と検索系トランザクションは同時に実行できません。
-
インデクス情報の取得ユティリティ,インデクス作成開始ユティリティ以外のXML Extensionのユティリティと,検索系トランザクションは同時に実行できません。
-
同時実行を設定している場合,XML Extensionのデータの整合性確保のために,一時的に排他制御をします。このため,同時実行を設定していない場合に比べて,排他制御によるオーバヘッドが掛かります。
-
「phd_search_wait=nowait」を設定した場合は,IXXML型を作成していない場合でも共用メモリの定義をする必要があります。
-
同時実行する場合は,グローバルバッファを指定してください。実行性能が向上します。
-
登録・検索同時実行時に,更新系のトランザクションを複数実行した場合,排他によってwait状態になります。更新系トランザクションのwait状態が解消されるまで,以降の検索処理もwait状態になります。
-
LOCK文でテーブル全体を排他すると,ほかのトランザクションとの同時実行ができません。このため,登録・検索同時実行を実施する場合は,LOCK文でテーブル全体の排他を実施しないようにしてください。
(3) 分割遅延登録・更新系SQL同時実行の設定
分割遅延登録・更新系SQL同時実行を利用すると,「(2) 登録・検索同時実行の設定」で説明した登録・検索同時実行の機能に加えて,さらに,データ登録とインデクス作成を同時に実行できます。
(a) 指定方法
XMLデータ型プラグインの環境設定項目「登録・検索同時実行」に,次のように指定します。
set phd_search_wait=nowait_with_update
(b) 注意事項
-
LOCK文でテーブル全体を排他すると,ほかのトランザクションとの同時実行ができません。このため,分割遅延登録・更新系SQL同時実行を実施する場合は,LOCK文でテーブル全体の排他を実施しないようにしてください。
-
検索トランザクションの排他が更新系SQLまたはインデクス作成開始ユティリティと競合することを避けるため,検索SQL実行時は,SQLの排他オプションにWITHOUT LOCK NOWAITを指定してください。インデクス作成開始ユティリティの詳細については,「3.2.8 phjstartidx(インデクス作成開始ユティリティ)」を参照してください。