11.19.4 データ操作と整合性
被参照表及び参照表に対する操作系SQL(PURGE TABLE文を除きます)による更新,追加,又は削除は,HiRDBがSQL実行時にチェックし,整合性を保証します。ただし,次の表に示す操作をした場合,整合性を保証できなくなることがあります。pd_check_pendingオペランドにUSEを指定していて,これらの操作をした場合,参照表は検査保留状態になります。
表又はRDエリアに対する操作 |
データ不整合の発生条件 |
|
---|---|---|
データベース作成ユティリティ(pdload) |
作成モード(-dオプション指定)のデータロード |
データロードした主キー構成列中に,参照表の外部キー構成列と同じ値を持つ行を含まない場合 |
データベース再編成ユティリティ(pdrorg) |
リロード(-k reld指定) |
リロードした主キー構成列中に,参照表の外部キー構成列と同じ値を持つ行を含まない場合 |
再編成(-k rorg指定) |
UOCを使用して,参照表の外部キー構成列の値と同じ値の行を削除した場合 |
|
データベース構成変更ユティリティ(pdmod) |
RDエリアの再初期化(initialize rdarea) |
参照表が,再初期化したRDエリアと異なるRDエリアに格納されている場合 |
更新可能なオンライン再編成の追い付き反映 (pdorendコマンド) |
参照関係がある表に対して,更新可能なオンライン再編成運用中※に,カレントデータベースのレプリカRDエリアとオリジナルRDエリアで次に示す(1)〜(4)のどれかの操作をした場合(追い付き反映処理後にデータ不整合になる)
|
|
PURGE TABLE文 |
参照表にデータが存在する場合 |
|
ALTER TABLEによる表の分割格納条件の変更 |
RDエリアの分割や統合の結果,参照表の外部キー構成列と同じ値を持つ行を含まない場合 |
- 注※
-
更新可能なオンライン再編成の運用については,マニュアル「インナレプリカ機能 HiRDB Staticizer Option」を参照してください。
表11‒21 整合性を保証できなくなる場合の,参照表に対する操作とデータ不整合の発生条件 表又はRDエリアに対する操作
データ不整合の発生条件
データベース作成ユティリティ(pdload)
データロード
データロードした外部キー構成列中に,被参照表の主キー構成列と同じ値を持つ行がない場合
データベース再編成ユティリティ(pdrorg)
リロード(-k reld指定)
リロードした外部キー構成列中に,被参照表の主キー構成列と同じ値を持つ行がない場合
更新可能なオンライン再編成の追い付き反映
(pdorendコマンド)
参照関係がある表に対して,更新可能なオンライン再編成運用中※に,カレントデータベースのレプリカRDエリアとオリジナルRDエリアで次に示す(1)〜(5)のどれかの操作をした場合(追い付き反映処理後にデータ不整合になる)
- (1)次の順序で操作した場合
-
1.レプリカRDエリアの参照表にデータを挿入する
2.オリジナルRDエリアの披参照表で,1.で挿入した外部キーと同じ値の行を削除する
- (2)次の順序で操作した場合
-
1.レプリカRDエリアの参照表の外部キーのデータを更新する
2.オリジナルRDエリアの披参照表で,1.で更新した外部キーと同じ値の行を削除する
- (3)次の順序で操作した場合
-
1.レプリカRDエリアの披参照表のデータを削除する
2.オリジナルRDエリアの参照表に,1.で削除した主キーと同じ値の行を挿入する
- (4)次の順序で操作した場合
-
1.レプリカRDエリアの披参照表のデータを更新する
2.オリジナルRDエリアの参照表に1.で更新する前の主キーと同じ値の行を挿入する
- (5)次の操作をした場合
-
レプリカRDエリアの参照表に,データベース作成ユティリティ(pdload)で,データ不整合となる操作をしたとき
- 注※
-
更新可能なオンライン再編成の運用については,マニュアル「インナレプリカ機能 HiRDB Staticizer Option」を参照してください。
(1) 操作対象の表が分割表の場合
操作対象の表が分割表で,表中に不整合データがある場合,ユティリティの実行によって,不整合データが,格納されているRDエリアを移動することがあります。例えば,RDエリア1,2,及び3に分割格納されている表で,不整合データがRDエリア1にあるとき,ユティリティの実行によって,不整合データがRDエリア3に移動することがあります。不整合データのRDエリアの移動が発生する条件を次の表に示します。
表又はRDエリアに対する操作 |
表中の不整合データがRDエリアを移動する条件 |
|
---|---|---|
データベース再編成ユティリティ(pdrorg) |
再編成(-k rorg指定) |
フレキシブルハッシュ分割表,又は第2次元分割列がフレキシブルハッシュ分割のマトリクス分割表に対して次の手順で操作する場合
|
リバランスユティリティ(pdrbal) |
不整合データがある表に対して,RDエリアを追加してリバランスユティリティ(pdrbal)を実行する場合※ |
- 注※
-
pd_check_pendingオペランドにUSEを指定していて,操作対象表が検査保留状態の場合は実行できません。
(2) データ不整合が発生する可能性があるそのほかの条件
次の条件をすべて満たす場合も,データ不整合が発生することがあるため,データの整合性を確認する必要があります。データの整合性確認手順については,「表の整合性確認手順」を参照してください。これらの条件は参照制約動作がRESTRICTでもCASCADEでも同じです。
-
参照表の行を削除するトランザクションと,被参照表を更新又は削除するトランザクションが異なるトランザクションで,かつ同時に実行される
-
参照表で削除する行の主キー構成列の値と,被参照表で更新又は削除する行の外部キー構成列の値が同じである
-
被参照表の行を更新又は削除するトランザクションをコミットし,参照表の行を削除するトランザクションをロールバックする
被参照表及び参照表を操作する場合,上記条件が重ならないようにしてください。なお,それぞれのトランザクションで,操作対象の表に対してLOCK文の共用モード又は排他モードで排他制御することでデータの整合性は保証できます。ただし,同時実行性は低下します。