スケーラブルデータベースサーバ HiRDB Version 8 コマンドリファレンス(UNIX(R)用)

[目次][索引][前へ][次へ]

5.4.15 constraint文(検査保留状態に関する記述)

検査保留状態に関する設定をします。

検査制約又は参照制約を定義した表にデータロードする場合,pdloadではデータの整合性チェックをしないため,制約の整合性が保証できないデータを格納する可能性があります。このとき,pdconstckで整合性を検証するまで,表へのデータ操作を制限させるため,データロード対象表やその表に関係する参照表を検査保留状態に設定します。

なお,ユーザ自身が制御文を指定して,表の検査保留状態を変更しないこともできます。検査保留状態については,マニュアル「HiRDB Version 8 システム導入・設計ガイド」を参照してください。

<適用基準>
次のどちらかに該当する場合,constraint文を指定します。
  • 検査制約又は参照制約を定義した表にデータロードする場合,その表の検査保留状態を変更(設定)しないとき
  • 被参照表にデータロードする場合,その表に関係する参照表の検査保留状態を変更(設定)しないとき

<規則>
  1. この制御文は,システム定義のpd_check_pendingオペランドの値がUSEの場合だけ有効となります。次のどれかに該当する場合,constraint文の指定は無視され,表の検査保留状態を変更しません。
    ・システム定義のpd_check_pendingオペランドの値がNOUSEの場合
    ・表に制約が定義されていない場合
    ・分割入力データファイルを作成する場合(src_work文を指定する場合)
<この項の構成>
(1) 形式
(2) 説明
(3) 注意事項
(4) 検査保留状態の設定範囲
(5) 検査保留状態の設定可否の例
(6) 検査保留状態を設定するタイミング

(1) 形式

 
 constraint 〔pending=no〕
 
      〔ref_pending=no〕
 

(2) 説明

(a) pending=no

参照表又は検査制約表にデータロードする場合,その表の検査保留状態を変更しないときに指定します。このオペランドを省略した場合の仮定値は,「(4)検査保留状態の設定範囲」を参照してください。

<適用基準>
次のどちらかに該当する場合,pending=noを指定します。
  • 参照表又は検査制約を定義した表にデータロードする場合,列に格納するデータがユーザによる事前チェックによって整合性が保たれている保証があるとき
  • 参照表又は検査制約を定義した表に対して,インデクスの再作成をするためにデータ件数0件でデータロードをする場合
(b) ref_pending=no

被参照表にデータロードする場合,その表に関係する参照表の検査保留状態を変更しないときに指定します。このオペランドを省略した場合の仮定値は,「(4)検査保留状態の設定範囲」を参照してください。

<適用基準>
次のどちらかに該当する場合,ref_pending=noを指定します。
  • 被参照表に対して作成モードでデータロードする場合,被参照表のデータと参照表のデータがユーザの事前チェックによって整合性が保たれている保証があるとき
  • 被参照表に対して,インデクスの再作成をするために追加モードでデータ件数0件のデータロードをする場合

(3) 注意事項

  1. 被参照表へデータロードする場合,その表に関係する参照表を検査保留状態に設定するときの注意事項については,「付録C コマンド実行時のRDエリアの状態」を参照してください。
  2. インナレプリカ機能使用時に被参照表へデータロードする場合,その表に関係する参照表を検査保留状態に設定するときに,参照表を格納するレプリカRDエリアが-qオプションに指定した世代にないと,カレントRDエリアが検査保留状態になります。
  3. 検査保留状態を設定する場合,関連する資源に対して排他が掛かります。また,検査保留状態の設定が完了したとき,掛かっていた排他が解除されます。排他制御については,「付録B コマンド実行時の排他制御モード」を参照してください。

(4) 検査保留状態の設定範囲

検査制約の検査保留状態の設定範囲を表5-11に示します。また,参照制約の検査保留状態の設定範囲を表5-12に示します。

表5-11 検査制約の検査保留状態の設定範囲

データロード実行条件 検査制約の検査保留状態
システム定義のpd_check_pendingオペランドの値 実行単位 ディクショナリ表 RDエリア中の表情報
SQL_TABLES表CHECK_PEND2列 SQL_CHECKS表CHECK_PEND2列 検査制約の状態
USE
RDエリア
NOUSE × × ×
RDエリア × × ×

(凡例)
◎:表を格納するすべてのRDエリア中の表情報(検査制約の状態)を設定します。
●:検査保留状態を設定します。
○:データロード対象のRDエリア中の表情報(検査制約の状態)を設定します。
×:検査保留状態を変更しません(現在の状態を維持します)。

注※
インナレプリカ機能を使用している場合,次に示す世代が検査保留状態の設定対象になります。
  • -qオプションを指定しているときは,-qオプションで指定した世代が設定対象になります。
  • -qオプションを指定していないときは,カレント世代が設定対象になります。
 

表5-12 参照制約の検査保留状態の設定範囲

データロード実行条件 データロード対象表
システム定義のpd_check_pendingオペランドの値 -dオプションの指定 実行単位 被参照表 参照表
被参照表に関連する参照表の検査保留状態 参照表の検査保留状態
ディクショナリ表 RDエリア中の表情報 ディクショナリ表 RDエリア中の表情報
SQL_TABLES表CHECK_PEND列 SQL_REFERENTIAL_CONSTRAINTS表CHECK_PEND列 参照制約の状態 SQL_TABLES表CHECK_PEND列 SQL_REFERENTIAL_CONSTRAINTS表CHECK_PEND列 参照制約の状態
USE あり
RDエリア
なし × × ×
RDエリア × × ×
NOUSE あり × × × × × ×
RDエリア × × × × × ×
なし × × × × × ×
RDエリア × × × × × ×

(凡例)
◎:表を格納するすべてのRDエリア中の表情報(検査制約の状態)を設定します。
●:検査保留状態を設定します。
○:データロード対象のRDエリア中の表情報(検査制約の状態)を設定します。
×:検査保留状態を変更しません(現在の状態を維持します)。

注※
インナレプリカ機能を使用している場合,次に示す世代が検査保留状態の設定対象になります。
  • -qオプションを指定しているときは,-qオプションで指定した世代が設定対象となります。ただし,被参照表にデータロードする場合,関係する参照表を格納するレプリカRDエリアが,-qオプションに指定した世代にないときは,カレントRDエリアの世代が設定対象となります。
  • -qオプションを指定していないときは,カレントRDエリアの世代が設定対象になります。

(5) 検査保留状態の設定可否の例

次に示す表T1〜T5について,constraint文のpending及びref_pendingオペランドを指定した場合の,表の検査保留状態の設定可否について説明します。

(表の説明)
T1:主キーを持つ表(T2に対する被参照表)
T2:T1の主キーを参照する外部キーを持ち,さらに自身が主キーを持つ表(T1への参照表であり,かつT3に対する被参照表である表)
T3:T2の主キーを参照する外部キーを持つ表(T2への参照表)
T4:検査制約を定義した表
T5:制約定義がない表

表T1〜T5に対してデータロードを実行した場合の表の検査保留状態を次の表に示します。

表5-13 データロードを実行した場合の表の検査保留状態

データロード対象表と制約定義有無 constraint文のオペランドの指定有無 表の検査保留状態
表名 参照制約 検査制約 pending ref_pending T1 T2 T3 T4 T5
被参照表 参照表
T1 × × なし なし P
あり N
あり なし P
あり N
T2 × なし なし P P
あり P N
あり なし N P
あり N N
T3 × × なし なし P
あり P
あり なし N
あり N
T4 × × なし なし P
あり P
あり なし N
あり N
T5 × × × なし なし
あり
あり なし
あり

(凡例)
○:定義あり。
×:定義なし。
P:検査保留状態を設定します。
N:検査保留状態を変更しません(現在の状態を維持します)。
−:該当しません(pending及びref_peindingオペランドの指定を無視します)。

(6) 検査保留状態を設定するタイミング

データロード対象表やその表に関係する参照表の検査保留状態を設定するタイミングは,データロードのモードによって異なります。データロードのモードと検査保留状態に設定するタイミングの関係を次の表に示します。

表5-14 検査保留状態に設定するタイミング

データロードのモード 検査保留状態を設定するタイミング
作成モード データ削除処理を開始する前
追加モード データロードを開始する前

なお,表の検査保留状態を設定した後,エラーの発生などによってpdloadがロールバックした場合でも,表の検査保留状態の設定は完了(コミットが完了)しているため,表は検査保留状態となります。