スケーラブルデータベースサーバ HiRDB Version 8 コマンドリファレンス(Windows(R)用)
整合性チェック機能は,参照制約又は検査制約の整合性をチェックし,制約に違反する行がない場合は検査保留状態を解除する機能です。
整合性チェック機能は,次のどちらかの単位で実行します。
表に定義された参照制約及び検査制約のうち,検査保留状態となったすべての制約に対して,制約ごとに整合性チェックをします。表単位で整合性チェックをする場合は,-tオプションを指定します。
表単位の整合性チェックは,次の場合に適用します。
検査保留状態に関係なく,一つの制約だけの整合性を検査します。制約単位で整合性を検査する場合は,-cオプションを指定します。
制約単位の整合性チェックは,次の場合に適用します。
参照制約の整合性チェックでは,制約ごとに次の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') |
表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エリアの検査保留状態を遷移します。検査保留状態の遷移を次に説明します。
指定した制約の整合性結果によって,制約の検査保留状態を遷移します。
図13-1の実行例について,制約CHK1に対して制約単位に整合性チェックをした場合の検査保留状態の遷移を次の表に示します。
表13-11 制約単位での検査保留状態の遷移(実行例)
整合性チェックの結果 | 制約の検査保留状態 | 検査保留状態 | ||||
---|---|---|---|---|---|---|
CHK1の整合性 | CHK2 | 表の検査保留状態 | 制約の検査保留状態 | RDエリアの検査保留状態 | ||
CHK1 | CHK2 | U1 | U2 | |||
あり | 非検査保留状態 | N | N | − | N | N |
あり | 検査保留状態 | P | N | − | P | P |
なし | 非検査保留状態 | P | P | − | P | P |
なし | 検査保留状態 | P | P | − | P | P |
表13-12 表単位の整合性チェックでの順番の例
表の制約 | 整合性チェックの順番 | ||||
---|---|---|---|---|---|
参照制約(外部キー) | 検査制約 | 参照制約(外部キー) | 検査制約 | ||
F1 | F2 | C1 | C2 | ||
あり | あり | 1. | 2. | 3. | 4. |
なし | 1. | 2. | − | − | |
なし | あり | − | − | 1. | 2. |
なし | − | − | − | − |
表13-13 整合性をチェックする条件と整合性チェック実行有無
検査保留状態 | 整合性チェック実行有無 | 備考 | ||
---|---|---|---|---|
表の検査保留状態 | 制約の検査保留状態 | 表格納用RDエリアの検査保留状態※1 | ||
検査保留状態('C') | 検査保留状態('C') | 検査保留状態 | あり | pdconstckは正常状態と判断します(検査保留状態)。 |
非検査保留状態 | あり | RDエリアが非検査保留状態であるが,ディクショナリ表が検査保留状態のため,整合性をチェックします。 | ||
非検査保留状態(NULL値)※2 | 検査保留状態 | なし | pdconstckは正常状態と判断します(他制約が検査保留状態)。 | |
非検査保留状態 | あり | RDエリアが非検査保留状態であるが,ディクショナリ表が検査保留状態のため,整合性をチェックします。 | ||
非検査保留状態(NULL値) | 検査保留状態('C') | 検査保留状態 | なし | ディクショナリ表が不正のため,pdconstckをエラー終了します。 |
非検査保留状態 | なし | |||
非検査保留状態(NULL値)※2 | 検査保留状態 | あり | RDエリアが検査保留状態のため,整合性をチェックします。 | |
非検査保留状態 | なし | pdconstckは正常状態と判断します(非検査保留状態)。 |
表13-14 各表格納用RDエリア中の表情報による検査保留状態
条件 | 表格納RDエリアの表情報 |
---|---|
すべての格納RDエリアのRDエリアの検査保留状態が検査保留状態 | 検査保留状態 |
格納RDエリアのRDエリアの検査保留状態が検査保留状態と非検査保留状態が混在 | 検査保留状態 |
すべての格納RDエリアがRDエリアの検査保留状態が非検査保留状態 | 非検査保留状態 |
表13-15 ディクショナリ表の検査保留状態でのpdconstckの動作
検査保留状態 | pdconstckの動作 | |
---|---|---|
表の検査保留状態 | 制約の検査保留状態 | |
検査保留状態 | 検査保留状態となった制約がある | 処理続行 |
すべての制約が非検査保留状態 | エラー終了 | |
非検査保留状態 | 検査保留状態となった制約がある | エラー終了 |
すべての制約が非検査保留状態 | 処理続行 |
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.