Hitachi

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


11.20.2 検査制約の定義

検査制約は,定義系SQLのCREATE TABLECHECKを指定し,表の値の制約条件を探索条件で指定します。また,検査保留状態を使用するには,pd_check_pendingオペランドUSEを指定するか,又はオペランドの指定を省略します。

〈この項の構成〉

(1) 検査制約を定義する表の制限事項

検査制約を定義する表の表定義,及び表定義変更時の制限事項を次に示します。

(a) 表定義(CREATE TABLE)時

  • 検査制約は改竄防止表には定義できません。

  • 検査制約は一つの表に254個まで定義できます。255個以上は定義できません。例を次に示します。

    [図データ]

    この場合,検査制約数が254個より多いため,定義できません。表定義時にエラーとなります。

  • 検査制約,及び各検査制約の探索条件中のAND,ORの個数の和は一つの表に254個まで定義できます(ただし,CASE式中の探索条件,及びその探索条件中のAND,ORの個数は除きます)。例を次に示します。

    [図データ]

    この場合,検査制約数は2個ですが,制約名CHECK_T1_C1の探索条件中のANDの数が200,制約名CHECK_T1_C2の探索条件中のANDの数53で,検査制約数と各検査制約の探索条件中のAND,ORの和が255(2+200+53)となり,254個より多いため定義できません。表定義時にエラーとなります。

    なお,表に定義されている検査制約数と各検査制約の探索条件中のAND,ORの和はディクショナリ表のSQL_TABLE表の,N_CHECK_LIMIT列に格納されています。

(b) 表定義変更(ALTER TABLE)時

  • 検査制約表に対して,DROP句及びRENAME句を使用した表定義変更はできません。

  • 検査制約表に対して,CHANGE句を使用した次の変更はできません。

    • データ型やデータ長の変更

    • SPLITの変更

    • 既定値の設定,解除

    • WITH DEFAULTの設定

  • 検査制約表に対して,RENAME句を使用した列名変更はできません。

(2) 検査制約を定義する場合の注意事項

  • SQLオブジェクト用バッファ長の容量見積もり

    検査制約表に対して操作する場合,HiRDBが制約条件をチェックするトリガを生成します。そのため,SQLオブジェクト用バッファを指定するときにHiRDBが生成する制約条件のSQLオブジェクトについても考慮する必要があります。SQLオブジェクト用バッファ長(pd_sql_object_cache_size)の見積もり式については,マニュアル「HiRDB システム定義」を参照してください。

  • バックアップの取得

    バックアップ取得時点の検査保留状態によって,バックアップの取得範囲が異なります。バックアップの取得時点と取得範囲については,マニュアル「HiRDB システム運用ガイド」の「同時にバックアップを取得する必要があるRDエリア」を参照してください。

  • データディクショナリ用RDエリアの再編成

    検査制約表の定義と削除を繰り返すと,データディクショナリ用RDエリアの格納効率が低下します。このような場合,データベース状態解析ユティリティ(pddbst)でデータディクショナリ用RDエリアの格納効率を確認し,必要に応じて再編成してください。



目次