スケーラブルデータベースサーバ HiRDB Version 8 コマンドリファレンス(UNIX(R)用)
整合性チェック機能は,参照制約又は検査制約の整合性をチェックし,制約に違反する行がない場合は検査保留状態を解除する機能です。
整合性チェック機能は,次のどちらかの単位で実行します。
また,インナレプリカ機能を使用して表単位に実行する場合は,次のどれかの単位で実行します。
表に定義された参照制約及び検査制約のうち,検査保留状態となったすべての制約に対して,制約ごとに整合性チェックをします。表単位で整合性チェックをする場合は,-tオプションを指定します。
表単位の整合性チェックは,次の場合に適用します。
検査保留状態に関係なく,一つの制約だけの整合性を検査します。制約単位で整合性を検査する場合は,-cオプションを指定します。インナレプリカ機能を使用している場合,指定した制約が定義された表を格納するオリジナルRDエリア及びレプリカRDエリアを作成したすべての世代に対して,世代ごとに整合性チェックをします。
制約単位の整合性チェックは,次の場合に適用します。
参照制約の整合性チェックでは,制約ごとに次のSQLで整合性をチェックします。インナレプリカ機能を使用する場合は,該当する制約の整合性を世代ごとに検査します。
SELECT DISTINCT "外部キー構成列1", "外部キー構成列2", …, "外部キー構成列n" FROM "参照表の所有者名"."参照表の表識別子" RIC_REF_TBL WHERE ("外部キー構成列1" IS NOT NULL AND "外部キー構成列2" IS NOT NULL AND … "外部キー構成列n" IS NOT NULL) AND NOT EXISTS (SELECT * FROM "被参照表の所有者名". "被参照表の表識別子" RIC_RFD_TBL WHERE (RIC_RFD_TBL."主キー構成列1", RIC_RFD_TBL."主キー構成列2", …, RIC_RFD_TBL."主キー構成列n") = (RIC_REF_TBL."外部キー構成列1", RIC_REF_TBL."外部キー構成列2", …, RIC_REF_TBL."外部キー構成列n")) ORDER BY "外部キー構成列1" ASC|DESC, "外部キー構成列2" ASC|DESC, …, "外部キー構成列n" ASC|DESC WITHOUT LOCK NOWAIT |
(a)のSQLの実行結果(SQLCODE)と整合性の有無の関係を,次の表に示します。
表13-5 SQLの実行結果と整合性の有無の関係(参照制約)
SQLCODE(検索行数) | 整合性の有無 |
---|---|
100(0件) | 整合性あり |
0(1件以上) | 整合性なし |
上記以外 | 実行エラー |
(a)のSQLを実行した結果,制約違反となったキー値を処理結果ファイルに出力します。なお,制約違反となったキー値は重複排除して出力します。
制約違反となった行データ数が制約違反キー値の出力数上限値を超えた場合,該当する制約(世代)の整合性チェックを終了します。制約違反キー値の出力数上限値は,-wオプションで変更できます。
検査制約の整合性チェックでは,制約ごとに次のSQLで整合性をチェックします。インナレプリカ機能を使用する場合は,該当する制約の整合性を世代ごとに検査します。
SELECT DISTINCT※ "検査制約の対象列1", "検査制約の対象列2", …, "検査制約の対象列n" FROM "検査制約を定義した表の所有者名"."検査制約を定義した表の表識別子" WHERE NOT(検査制約の探索条件) WITHOUT LOCK NOWAIT |
(a)のSQLの実行結果(SQLCODE)と整合性の有無の関係を,次の表に示します。
表13-6 SQLの実行結果と整合性の有無の関係(検査制約)
SQLCODE(検索行数) | 整合性の有無 |
---|---|
100(0件) | 整合性あり |
0(1件以上) | 整合性なし |
上記以外 | 実行エラー |
(a)のSQLを実行した結果,制約違反となったキー値を処理結果ファイルに出力します。なお,探索条件に指定した列のデータ型がBLOB型又はBINARY型を含まない場合,制約違反となったキー値は重複排除して出力します。BLOB型又はBINARY型を含む場合は,制約違反となったキー値の重複排除をしません。
制約違反となった行データ数が制約違反キー値の出力数上限値を超えた場合,該当する制約(世代)の整合性チェックを終了します。制約違反キー値の出力数上限値は,-wオプションで変更できます。
pdconstckは,制約ごと(インナレプリカ機能を使用する場合,各制約の世代ごと)に整合性チェックをした結果に基づいて,整合性の有無で表の検査保留状態,制約の検査保留状態,又はRDエリアの検査保留状態を,検査保留状態又は非検査保留状態に設定します。RDエリアの検査保留状態の遷移は,pdconstckの実行単位によって異なります。
次に,制約の検査保留状態の遷移,表の検査保留状態の遷移,及びRDエリアの検査保留状態の遷移について説明します。なお,検査制約と参照制約はそれぞれ別に,表の検査保留状態,制約の検査保留状態,又はRDエリアの検査保留状態を遷移します。
表13-7 制約の検査保留状態の遷移
インナレプリカ機能 | 制約の整合性チェック結果※ | 制約の検査保留状態(設定する値) |
---|---|---|
使用しない | 整合性あり | 非検査保留状態(NULL値) |
整合性なし | 検査保留状態('C') | |
使用する | すべての世代で整合性あり | 非検査保留状態(NULL値) |
整合性がある世代と整合性がない世代が混在 | 検査保留状態('C') |
表13-8 表の検査保留状態の遷移
制約の検査保留状態 | 表の検査保留状態(設定する値) |
---|---|
すべての制約が非検査保留状態 | 非検査保留状態(NULL値) |
検査保留状態と非検査保留状態の制約が混在 | 検査保留状態('C') |
表13-9 RDエリアの検査保留状態の遷移
整合性チェックの結果 | RDエリアの検査保留状態(設定する値) |
---|---|
すべての制約が整合性あり | 非検査保留状態(NULL値) |
整合性がない制約と,整合性がある制約が混在 | 検査保留状態('C') |
表単位実行時は,制約ごとに整合性チェックをした結果によって,表の検査保留状態,制約の検査保留状態,及びRDエリアの検査保留状態を遷移します。
参照制約が定義された表に対して,表単位に整合性チェックを実行する例を図13-1に示します。また,この例の検査保留状態の遷移を表13-10に示します。
図13-1 表単位での整合性チェック実行例
表13-10 表単位での検査保留状態の遷移(実行例)
整合性チェックの結果 | 検査保留状態 | |||||
---|---|---|---|---|---|---|
REF1の整合性 | REF2の整合性 | 表の検査保留状態 | 制約の検査保留状態 | 表格納用RDエリアの検査保留状態 | ||
REF1 | REF2 | USR1 | USR2 | |||
あり | あり | N | N | N | N | N |
なし | P | N | P | P | P | |
なし | あり | P | P | N | P | P |
なし | P | P | P | P | P |
インナレプリカ機能使用時に全世代単位で実行する場合は,制約ごと(世代ごと)に整合性チェックをした結果によって,表の検査保留状態,制約の検査保留状態,及びRDエリアの検査保留状態を遷移します。
検査制約が定義された表が,インナレプリカ機能を使用して1世代のレプリカRDエリアを作成している場合,全世代単位で整合性チェックを実行する例を図13-2に示します。また,検査保留状態の遷移を表13-11に示します。
図13-2 全世代単位での整合性チェック実行例
表13-11 全世代単位での検査保留状態の遷移(実行例)
整合性チェックの結果 | 検査保留状態 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
CHK1の整合性 | CHK2の整合性 | 表の検査保留状態 | 制約の検査保留状態 | RDエリアの検査保留状態 | ||||||
世代0 | 世代1 | 世代0 | 世代1 | CHK1 | CHK2 | U1 | U2 | U1G1 | U2G1 | |
あり | あり | あり | あり | N | N | N | N | N | N | N |
あり | あり | あり | なし | P | N | P | N | N | P | P |
あり | あり | なし | あり | P | N | P | P | P | N | N |
あり | あり | なし | なし | P | N | P | P | P | P | P |
あり | なし | あり | あり | P | P | N | N | N | P | P |
あり | なし | あり | なし | P | P | P | N | N | P | P |
あり | なし | なし | あり | P | P | P | P | P | P | P |
あり | なし | なし | なし | P | P | P | P | P | P | P |
なし | あり | あり | あり | P | P | N | P | P | N | N |
なし | あり | あり | なし | P | P | P | P | P | P | P |
なし | あり | なし | あり | P | P | P | P | P | N | N |
なし | あり | なし | なし | P | P | P | P | P | P | P |
なし | なし | あり | あり | P | P | N | P | P | P | P |
なし | なし | あり | なし | P | P | P | P | P | P | P |
なし | なし | なし | あり | P | P | P | P | P | P | P |
なし | なし | なし | なし | P | P | P | P | P | P | P |
インナレプリカ機能使用時に世代単位で実行する場合,制約ごとに指定世代の整合性チェックをした結果によって,表の検査保留状態,制約の検査保留状態,及び指定した世代のRDエリアの検査保留状態を遷移します。
世代単位での整合性チェック結果による制約とRDエリアの検査保留状の遷移を次の表に示します。
表13-12 世代単位での整合性チェック結果による制約とRDエリアの検査保留状の遷移
実行結果 | 制約の検査保留状態 | RDエリアの検査保留状態 | ||
---|---|---|---|---|
該当世代のチェック結果 | 他世代のRDエリア中の検査保留状態 | |||
すべての制約が整合性あり | すべて非検査保留状態 | すべての制約を非検査保留状態にします。 | 該当する世代を非検査保留状態にします。 | |
上記以外 | 遷移しません。 | 該当する世代を非検査保留状態にします。 | ||
上記以外 | 整合性ありの制約 | − | 遷移しません。 | 該当する世代を検査保留状態にします。 |
整合性なしの制約 | − | 検査保留状態にします。 | 該当する世代を検査保留状態にします。 |
図13-2の実行例について,世代1に対して世代単位に整合性チェックをした場合の検査保留状態の遷移を次の表に示します。
表13-13 世代単位での検査保留状態の遷移(実行例)
整合性チェックの結果 | RDエリアの検査保留状態 | 検査保留状態 | |||||||
---|---|---|---|---|---|---|---|---|---|
表の検査保留状態 | 制約の検査保留状態 | RDエリアの検査保留状態 | |||||||
CHK1の整合性 | CHK2の整合性 | 世代0 | CHK1 | CHK2 | U1G1 | U2G1 | U1 | U2 | |
あり | あり | 非検査保留状態 | N | N | N | N | N | (N) | (N) |
あり | あり | 検査保留状態 | (P) | (P) | (P) | N | N | (P) | (P) |
あり | なし | 非検査保留状態 | P | (P) | P | P | P | (N) | (N) |
あり | なし | 検査保留状態 | P | (P) | P | P | P | (P) | (P) |
なし | あり | 非検査保留状態 | P | P | (P) | P | P | (N) | (N) |
なし | あり | 検査保留状態 | P | P | (P) | P | P | (P) | (P) |
なし | なし | 非検査保留状態 | P | P | P | P | P | (N) | (N) |
なし | なし | 検査保留状態 | P | P | P | P | P | (P) | (P) |
インナレプリカ機能使用時にカレントRDエリアの世代単位で実行する場合は,制約ごとに指定世代の整合性チェックをした結果によって,表の検査保留状態,制約の検査保留状態,及び指定した世代のRDエリアの検査保留状態を遷移します。
カレントRDエリアの世代単位に整合性チェックをしたときの検査保留状態の遷移は,「(c)世代単位での検査保留状態の遷移」と同じです。
制約単位実行時は,指定した制約の整合性チェックをした結果によって,表の検査保留状態,指定した制約の検査保留状態,及びRDエリアの検査保留状態を遷移します。検査保留状態の遷移を次に説明します。
インナレプリカ機能を使用しない場合,指定した制約の整合性結果によって,制約の検査保留状態を遷移します。
図13-1の実行例について,制約CHK1に対して制約単位に整合性チェックをした場合の検査保留状態の遷移を次の表に示します。
表13-14 制約単位での検査保留状態の遷移(実行例)
整合性チェックの結果 | 制約の検査保留状態 | 検査保留状態 | ||||
---|---|---|---|---|---|---|
CHK1の整合性 | CHK2 | 表の検査保留状態 | 制約の検査保留状態 | RDエリアの検査保留状態 | ||
CHK1 | CHK2 | U1 | U2 | |||
あり | 非検査保留状態 | N | N | − | N | N |
あり | 検査保留状態 | P | N | − | P | P |
なし | 非検査保留状態 | P | P | − | P | P |
なし | 検査保留状態 | P | P | − | P | P |
表13-15 インナレプリカ機能使用時の制約単位での検査保留状態の遷移(実行例)
整合性チェックの結果 | ほかの検査保留状態 | 検査保留状態 | |||||||
---|---|---|---|---|---|---|---|---|---|
表の検査保留状態 | 制約の検査保留状態 | RDエリアの検査保留状態 | |||||||
CHK1の世代0整合性 | CHK1の世代1整合性 | CHK2 | CHK1 | CHK2 | U1 | U2 | U1G1 | U2G1 | |
あり | あり | 非検査保留状態 | N | N | − | N | N | N | N |
あり | あり | 検査保留状態 | P | N | − | P | P | P | P |
あり | なし | 非検査保留状態 | P | P | − | P | P | P | P |
あり | なし | 検査保留状態 | P | P | − | P | P | P | P |
なし | あり | 非検査保留状態 | P | P | − | P | P | P | P |
なし | あり | 検査保留状態 | P | P | − | P | P | P | P |
なし | なし | 非検査保留状態 | P | P | − | P | P | P | P |
なし | なし | 検査保留状態 | P | P | − | P | P | P | P |
表13-16 表単位の整合性チェックでの順番の例
表の制約 | 整合性チェックの順番 | ||||
---|---|---|---|---|---|
参照制約(外部キー) | 検査制約 | 参照制約(外部キー) | 検査制約 | ||
F1 | F2 | C1 | C2 | ||
あり | あり | 1. | 2. | 3. | 4. |
なし | 1. | 2. | − | − | |
なし | あり | − | − | 1. | 2. |
なし | − | − | − | − |
表13-17 整合性をチェックする条件と整合性チェック実行有無
検査保留状態 | 整合性チェック実行有無 | 備考 | ||
---|---|---|---|---|
表の検査保留状態 | 制約の検査保留状態 | 表格納用RDエリアの検査保留状態※1 | ||
検査保留状態('C') | 検査保留状態('C') | 検査保留状態 | あり | pdconstckは正常状態と判断します(検査保留状態)。 |
非検査保留状態 | あり | RDエリアが非検査保留状態であるが,ディクショナリ表が検査保留状態のため,整合性をチェックします。 | ||
非検査保留状態(NULL値)※2 | 検査保留状態 | なし | pdconstckは正常状態と判断します(他制約が検査保留状態)。 | |
非検査保留状態 | あり | RDエリアが非検査保留状態であるが,ディクショナリ表が検査保留状態のため,整合性をチェックします。 | ||
非検査保留状態(NULL値) | 検査保留状態('C') | 検査保留状態 | なし | ディクショナリ表が不正のため,pdconstckをエラー終了します。 |
非検査保留状態 | なし | |||
非検査保留状態(NULL値)※2 | 検査保留状態 | あり | RDエリアが検査保留状態のため,整合性をチェックします。 | |
非検査保留状態 | なし | pdconstckは正常状態と判断します(非検査保留状態)。 |
表13-18 各表格納用RDエリア中の表情報による検査保留状態
条件 | 表格納RDエリアの表情報 |
---|---|
すべての格納RDエリアのRDエリアの検査保留状態が検査保留状態 | 検査保留状態 |
格納RDエリアのRDエリアの検査保留状態が検査保留状態と非検査保留状態が混在 | 検査保留状態 |
すべての格納RDエリアがRDエリアの検査保留状態が非検査保留状態 | 非検査保留状態 |
表13-19 世代中の各表格納用RDエリア中表情報による検査保留状態
条件 | 表格納RDエリアの表情報 |
---|---|
世代中の処理対象格納RDエリアすべてRDエリアの検査保留状態が検査保留状態 | 検査保留状態 |
世代中の処理対象格納RDエリアの検査保留状態が非検査保留状態 | 検査保留状態 |
世代中の処理対象格納RDエリアすべてRDエリアの検査保留状態が非検査保留状態 | 非検査保留状態 |
表13-20 ディクショナリ表の検査保留状態でのpdconstckの動作
検査保留状態 | pdconstckの動作 | |
---|---|---|
表の検査保留状態 | 制約の検査保留状態 | |
検査保留状態 | 検査保留状態となった制約がある | 処理続行 |
すべての制約が非検査保留状態 | エラー終了 | |
非検査保留状態 | 検査保留状態となった制約がある | エラー終了 |
すべての制約が非検査保留状態 | 処理続行 |
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.