Hitachi

ノンストップデータベース HiRDB Version 10 システム導入・設計ガイド(UNIX(R)用)


11.19.3 検査保留状態

SQLやユティリティの実行などで表間の参照整合性を保証できなくなった場合,HiRDBは参照表に対するデータ操作を制限します。このように,整合性を保証できないためにデータ操作を制限された状態を検査保留状態といいます。参照表を検査保留状態にして,データ操作を制限するためには,pd_check_pendingオペランドにUSEを指定するか,又はオペランドの指定を省略する必要があります。検査保留状態の表は,整合性チェックユティリティ(pdconstck)を使用して検査保留状態を解除します。また,整合性チェックユティリティを使用して,強制的に検査保留状態にもできます。

pd_check_pendingオペランドにNOUSEを指定していると,表間で参照整合性を保証できない場合でもデータ操作を制限しません。そのため,整合性が保証できなくなるSQLやユティリティを実行した場合は,整合性チェックユティリティで強制的に検査保留状態に設定してから,整合性を確認してください。

整合性が保証できなくなる操作については「データ操作と整合性」を,整合性の確認手順は「表の整合性確認手順」を参照してください。

〈この項の構成〉

(1) 検査保留状態の設定又は解除

整合性チェックユティリティ以外に,次に示すユティリティ,コマンド,及びSQLで参照表を検査保留状態に設定するかどうかを決めたり,又は検査保留状態を解除したりできます。

それぞれの詳細について,ユティリティ及びコマンドはマニュアル「HiRDB コマンドリファレンス」を,SQLはマニュアル「HiRDB SQLリファレンス」を参照してください。

(2) 検査保留状態の管理

検査保留状態はディクショナリ表と,表が格納されたRDエリアの表情報で管理しています。ディクショナリ表では表単位,及び制約単位に検査保留状態を管理し,表情報では分割表の場合はRDエリア単位に,分割表ではない場合は表単位に検査保留状態を管理します。

検査保留状態の情報が格納されている場所と内容を次の表に示します。

表11‒15 検査保留状態の情報が格納されている場所と内容(参照制約)

格納場所

格納されている情報

ディクショナリ表

SQL_TABLES表

CHECK_PEND列

表単位の参照制約の検査保留状態

SQL_REFERENTIAL_CONSTRAINTS表

CHECK_PEND列

制約単位の参照制約の検査保留状態

RDエリアの表情報

分割していない表の場合

表単位の参照制約又は検査制約の検査保留状態

分割表の場合

RDエリア単位の参照制約又は検査制約の検査保留状態

(3) 検査保留状態の表に対して制限される操作

検査保留状態の表に対してできなくなる操作を次の表に示します。なお,トリガ動作によって操作対象表にアクセスする場合,トリガSQL文に指定したSQLの操作可否に依存します。また,操作対象表がビュー表の場合,ビュー表の基になる実表の操作可否に依存します。

表11‒16 検査保留状態の表に対する操作可否

検査保留状態の表に対する操作

操作可否

操作系SQL

SELECT文

対象表の検索

※1

対象表から作成したリストの検索

INSERT文

対象表への挿入

UPDATE文

対象表の更新

DELETE文

対象表からの行削除

ASSIGN LIST文

対象表からのリスト作成

ユティリティ

リバランスユティリティ(pdrbal)

×

データベース再編成ユティリティ(pdrorg)

再編成

※2

(凡例)

△:場合によっては操作できません。

×:操作できません。

注※1

次の条件をどちらも満たす場合だけ,操作できます。それ以外は操作できません。

  • 操作対象表が分割表で,分割条件がキーレンジ分割又はFIXハッシュ分割

  • 操作対象となるRDエリアが検査保留状態でない

注※2

フレキシブルハッシュ分割の分割表に対して再編成を実行する場合,操作できないときがあります。詳細は,マニュアル「HiRDB コマンドリファレンス」の「データベース再編成ユティリティ(pdrorg)」の「規則及び注意事項」を参照してください。

(4) 検査保留状態の表と参照関係がある表に対して制限される操作

次のような参照関係がある表を例に説明します。この場合,検査保留状態になるのは表T2と表T3だけです。

[図データ]

表T2と表T3が検査保留状態の場合,各表に対して制限される操作について次に示します。

(a) 表T2だけが検査保留状態の場合

表T2だけが検査保留状態の場合,各表に対して制限される操作を次の表に示します。

表11‒17 表T2だけが検査保留状態の場合,各表に対して制限される操作

操作対象表

制限される操作

制限の内容

表T1

UPDATE(対象表の更新)

表T2に定義されている参照制約動作指定によって異なります。

  • CASCADEの場合

    参照制約動作の操作対象となるRDエリアの表情報が検査保留状態のときは操作できません。ただし,同値更新のときは操作できます。

  • RESTRICTの場合

    操作できます。参照表T2を参照し,整合性チェックを行います。

DELETE(対象表からの行削除)

表T2

SELECT文(対象表の検索及び対象表から作成したリストの検索)

次の条件をどちらも満たす場合だけ,操作できます。それ以外は操作できません。

  • 操作対象表が分割表で,分割条件がキーレンジ分割又はFIXハッシュ分割

  • 操作対象となるRDエリアが検査保留状態でない

INSERT文(対象表への挿入)

UPDATE文(対象表の更新)

DELETE文(対象表からの行削除)

ASSIGN LIST文(対象表からのリスト作成)

リバランスユティリティ(pdrbal)

操作できません。

データベース再編成ユティリティ(pdrorg)による再編成

フレキシブルハッシュ分割の分割表に対して再編成を実行する場合,操作できないときがあります。詳細は,マニュアル「HiRDB コマンドリファレンス」の「データベース再編成ユティリティ(pdrorg)」を参照してください。

表T3

制限される操作はありません。INSERT及びDELETEの場合,被参照表T2を参照し,整合性チェックを行います。

(b) 表T3だけが検査保留状態の場合

表T3だけが検査保留状態の場合,各表に対して制限される操作を次の表に示します。

表11‒18 表T3だけが検査保留状態の場合,各表に対して制限される操作

操作対象表

制限される操作

制限の内容

表T1

UPDATE(対象表の更新)

表T2及び表T3に定義されている参照制約動作がCASCADEで,参照制約動作の操作対象となるRDエリアの表情報が検査保留状態のときは操作できません。ただし,同値更新のときは操作できます。

DELETE(対象表からの行削除)

表T2

UPDATE(対象表の更新)

表T2及び表T3に定義されている参照制約動作指定によって異なります。

  • CASCADEの場合

    参照制約動作の操作対象となるRDエリアの表情報が検査保留状態のときは操作できません。ただし,同値更新のときは操作できます。

  • RESTRICTの場合

    操作できます。参照表T3を参照し,整合性チェックを行います。

DELETE(対象表からの行削除)

表T3

SELECT文(対象表の検索及び対象表から作成したリストの検索)

次の条件をどちらも満たす場合だけ,操作できます。それ以外は操作できません。

  • 操作対象表が分割表で,分割条件がキーレンジ分割又はFIXハッシュ分割

  • 操作対象となるRDエリアが検査保留状態でない

INSERT文(対象表への挿入)

UPDATE文(対象表の更新)

DELETE文(対象表からの行削除)

ASSIGN LIST文(対象表からのリスト作成)

リバランスユティリティ(pdrbal)

操作できません。

データベース再編成ユティリティ(pdrorg)による再編成

フレキシブルハッシュ分割の分割表に対して再編成を実行する場合,操作できないときがあります。詳細は,マニュアル「HiRDB コマンドリファレンス」の「データベース再編成ユティリティ(pdrorg)」を参照してください。

(c) 表T2及び表T3が検査保留状態の場合

表T2及び表T3が検査保留状態の場合,各表に対して制限される操作を次の表に示します。

表11‒19 表T2及び表T3が検査保留状態の場合,各表に対して制限される操作

操作対象表

制限される操作

制限の内容

表T1

UPDATE(対象表の更新)

表T2及び表T3に定義されている参照制約動作がCASCADEで,参照制約動作の操作対象となるRDエリアの表情報が検査保留状態のときは操作できません。ただし,同値更新のときは操作できます。

表T2及び表T3に定義されている参照制約動作指定がRESTRICTの場合,操作できます。参照表T2を参照し,整合性チェックを行います。

DELETE(対象表からの行削除)

表T2

SELECT文(対象表の検索及び対象表から作成したリストの検索)

次の条件をどちらも満たす場合だけ,操作できます。それ以外は操作できません。

  • 操作対象表が分割表で,分割条件がキーレンジ分割又はFIXハッシュ分割

  • 操作対象となるRDエリアが検査保留状態でない

INSERT文(対象表への挿入)

UPDATE文(対象表の更新)

DELETE文(対象表からの行削除)

ASSIGN LIST文(対象表からのリスト作成)

リバランスユティリティ(pdrbal)

操作できません。

データベース再編成ユティリティ(pdrorg)による再編成

フレキシブルハッシュ分割の分割表に対して再編成を実行する場合,操作できないときがあります。詳細は,マニュアル「HiRDB コマンドリファレンス」の「データベース再編成ユティリティ(pdrorg)」を参照してください。

表T3

SELECT文(対象表の検索及び対象表から作成したリストの検索)

次の条件をどちらも満たす場合だけ,操作できます。それ以外は操作できません。

  • 操作対象表が分割表で,分割条件がキーレンジ分割又はFIXハッシュ分割

  • 操作対象となるRDエリアが検査保留状態でない

INSERT文(対象表への挿入)

UPDATE文(対象表の更新)

DELETE文(対象表からの行削除)

ASSIGN LIST文(対象表からのリスト作成)

リバランスユティリティ(pdrbal)

操作できません。

データベース再編成ユティリティ(pdrorg)による再編成

フレキシブルハッシュ分割の分割表に対して再編成を実行する場合,操作できないときがあります。詳細は,マニュアル「HiRDB コマンドリファレンス」の「データベース再編成ユティリティ(pdrorg)」を参照してください。

(5) 分割表又はインナレプリカ機能を使用している場合

RDエリア単位に検査保留状態を管理しているため,分割表やインナレプリカ機能を使用していて,実際に操作するRDエリアの表情報が検査保留状態の場合,その分割表や世代に対する操作は制限されることがあります。それぞれについて説明します。

(a) 分割表の場合

分割表で,データを格納している一部のRDエリアが検査保留状態の場合の例を次の図に示します。

図11‒36 分割表で,RDエリア単位に検査保留状態を管理する場合のデータ操作可否

[図データ]

〔説明〕

分割表Aに対してSELECT文を実行する場合,実際に操作するデータがRDエリア2(表情報が検査保留状態)にあると,SELECT文はエラーになります。RDエリア1及び3にあるデータに対する操作の場合,SELECT文は正常に実行できます。

分割表の場合の注意事項

pd_check_pendingオペランドにUSEを指定していて,参照表のデータを分割格納しているRDエリアを再初期化する場合,再初期化後に整合性チェックユティリティで表単位の整合性チェックを実行してください。

(b) インナレプリカ機能を使用している場合

インナレプリカ機能を使用していて,ある世代の一部のRDエリアが検査保留状態の場合の例を次の図に示します。

図11‒37 インナレプリカ機能を使用していて,RDエリア単位に検査保留状態を管理する場合のデータ操作可否

[図データ]

〔説明〕

世代番号1(RDエリアの表情報が検査保留状態のRDエリアを含む世代)に対する操作をする場合で,実際に操作するデータがレプリカRDエリア2-1にあるとき,そのSQLはエラーになります。

(6) 検査保留状態を使用する場合の注意