13.12.5 RDエリアの分割(境界値指定の場合)
境界値で分割した表の,特定の格納範囲のデータを複数のRDエリアに分割します。機能の詳細を次に示します。
(1) 上限値
分割機能での上限値を次の表に示します。
項目 |
上限値 |
上限値を超えた場合の動作 |
---|---|---|
分割の対象にできるRDエリア数 |
1 |
ALTER TABLEをエラーとします。 |
1回の操作で分割できる数 |
16 |
|
分割した結果の総分割RDエリア数(重複を含む) |
4,096 |
|
分割した結果の総境界値上限数(otherを含む) |
4,096 |
(2) 分割対象RDエリアの決定方法
ALTER TABLEのCHANGE RDAREAに指定された分割対象の境界値によって,その格納条件に合致するRDエリアを分割対象のRDエリアとします。境界値が指定されれば,対象となるRDエリアが特定できるため,RDエリアの指定は必要ありません。ALTER TABLEの指定と分割対象RDエリアの決定方法を次の表に示します。
指定内容 |
条件 |
指定可否 |
分割対象RDエリアの決定方法 |
---|---|---|---|
境界値 |
表定義中に指定された境界値あり |
○ |
指定された境界値を格納しているRDエリアを分割対象とします。 |
表定義中に指定された境界値なし |
× |
− |
|
'MAX' |
− |
○ |
最大境界値より大きい分割キー値のデータを格納しているRDエリアを分割対象とします。 |
- (凡例)
-
○:指定できます。
×:指定できません。
−:該当しません。
(3) 分割後のRDエリアの決定方法
ALTER TABLEのCHANGE RDAREAに指定された,変更後の境界値とRDエリアの指定によって,格納するRDエリアを決定します。このとき,分割後の境界値の指定は,昇順になっている必要があり,指定した境界値の最大値は,分割前の境界値と等しくなければなりません。また,分割したすべての境界値が,分割前の格納条件の範囲内でなければなりません。ALTER TABLEの指定値と分割後のRDエリアの決定方法を次の表に示します。表で参照される,分割前後の境界値の条件を図「分割前後の境界値の条件(境界値指定の場合)」に示します。
分割前の境界値 |
分割後の境界値の指定 |
条件 |
指定可否 |
分割対象RDエリアの決定方法 |
---|---|---|---|---|
最小境界値 (図の1.) |
境界値 |
分割後の境界値が最小境界値より小さい値(図の4.) |
○ |
指定された格納条件とRDエリアを分割後のRDエリアとします。 |
分割後の境界値が最小境界値以上の値(図の1.,2.,3.,5.) |
× |
ALTER TABLEをエラーとします。 |
||
省略 |
なし |
○ |
分割された格納条件の中の,最大値の範囲の格納対象を指定されたRDエリアとします。 |
|
中間境界値又は最大境界値(図の2.) |
境界値 |
分割後の境界値が分割前の境界値の一つ前の境界値以下(分割前の境界値が200の場合:図の1.,4.) |
× |
ALTER TABLEをエラーとします。 |
分割後の境界値が分割前の境界値より小さく,一つ前の境界値より大きい値(分割前の境界値が200の場合:図の5.) |
○ |
指定された格納条件とRDエリアを分割後のRDエリアとします。 |
||
分割後の境界値が分割前の境界値以上の値(分割前の境界値が200の場合:200以上) |
× |
ALTER TABLEをエラーとします。 |
||
省略 |
なし |
○ |
分割された格納条件の中の,最大値の範囲の格納対象を指定されたRDエリアとします。 |
|
'MAX' (図の3.) |
境界値 |
分割後の境界値が最大境界値より小さい値(図の1.,2.,4.,5.) |
× |
ALTER TABLEをエラーとします。 |
分割後の境界値が最大境界値より大きい値(図の3.) |
○ |
指定された格納条件とRDエリアを分割後のRDエリアとします。 |
||
省略 |
なし |
○ |
最大境界値より大きいデータの格納対象を指定されたRDエリアとします。 |
- (凡例)
-
○:指定できます。
×:指定できません。
図13‒21 分割前後の境界値の条件(境界値指定の場合)
分割後のRDエリアは,分割前のRDエリアを再利用しても,新たに用意したものであってもかまいません。また,変更後のRDエリアは複数の格納範囲を同じRDエリアに格納できます。このとき,指定によっては,システムが自動的に境界値を統合したり,ALTER TABLEをエラーにしたりできます。システムの処置のパターンを次に示します。
-
指定されたとおりに分割します
分割した結果,連続した格納範囲を同じRDエリアに格納しない指定となっている場合,指定されたとおりに分割します。
-
自動的に格納範囲を統合します
分割対象の格納範囲の,前後の格納範囲を格納するRDエリアを分割後のRDエリアに指定した場合,次のときはシステムで自動的に連続した境界値を統合します。
-
分割対象の格納範囲の,直前の格納範囲のRDエリアと分割後の先頭の格納範囲のRDエリアが同じ
-
分割対象の格納範囲の,直後の格納範囲のRDエリアと分割後の最後の格納範囲のRDエリアが同じ
-
-
ALTER TABLEをエラーとします
指定した分割後のRDエリアの中で,連続した複数の境界値を同じRDエリアに格納するような分割はできません。このとき,ALTER TABLEをエラーとします。このような場合は,ユーザが境界値の範囲を統合して一つのRDエリアに格納するようにALTER TABLEを修正して再実行します。
複数の格納範囲を同じRDエリアに格納するときのシステムの処置を次の表に示します。
変更後RDエリアの指定 |
指定されたRDエリアの中で分割対象の格納範囲以外で使用されているRDエリア |
分割統合後の結果 |
システムの処置 |
||
---|---|---|---|---|---|
指定した分割後のRDエリアだけに着目すると,連続した複数の境界値を同じRDエリアに格納していない |
分割前の表で使われていないRDエリアを指定 |
− |
− |
− |
指定されたとおりに分割します。 図「複数の格納範囲を同じRDエリアに格納するときのシステムの処置の例1(その1)」の例1−1が該当します。 |
分割前の表で使われているRDエリアを指定 |
分割対象の格納範囲でしか使用されていない |
− |
− |
指定されたとおりに分割します。 図「複数の格納範囲を同じRDエリアに格納するときのシステムの処置の例1(その1)」の例1−2が該当します。 |
|
分割対象の格納範囲以外で使用されている |
分割後の先頭に指定 |
分割対象の格納範囲の直前のRDエリアと同じ |
直前の境界値と格納範囲を統合します。 図「複数の格納範囲を同じRDエリアに格納するときのシステムの処置の例2」の例2−1が該当します。 |
||
分割対象の格納範囲の直前のRDエリアと異なる |
指定されたとおりに分割します。 図「複数の格納範囲を同じRDエリアに格納するときのシステムの処置の例1(その1)」の例1−3が該当します。 |
||||
分割の中間に指定 |
− |
指定されたとおりに分割します。 図「複数の格納範囲を同じRDエリアに格納するときのシステムの処置の例1(その2)」の例1−4が該当します。 |
|||
分割の最後に指定 |
分割対象の格納範囲の直後のRDエリアと同じ |
直後の境界値と格納範囲を統合します。 図「複数の格納範囲を同じRDエリアに格納するときのシステムの処置の例2」の例2−2が該当します。 |
|||
分割対象の格納範囲の直後のRDエリアと異なる |
指定されたとおりに分割します。 図「複数の格納範囲を同じRDエリアに格納するときのシステムの処置の例1(その2)」の例1−5が該当します。 |
||||
指定した分割後のRDエリアだけに着目すると,連続した複数の境界値を同じRDエリアに格納している |
− |
− |
− |
− |
ALTER TABLEをエラーとします。 図「複数の格納範囲を同じRDエリアに格納するときのシステムの処置の例3」の例3−1が該当します。 |
(凡例)−:該当しません。
(4) 表と表以外のRDエリアの対応
分割格納条件を変更する表に分割キーインデクスなどが定義されている場合,インデクスなどのデータをRDエリアに格納する必要があるため,表格納用RDエリアと同様に分割しなければなりません。表と表以外のRDエリアの指定方法(境界値分割での格納条件の分割)を次の表に示します。表に示すリソースが複数定義されている場合はすべてが対象となります。正しく指定されていない場合,ALTER TABLEをエラーとします。表と表以外のRDエリアの対応の例を次の図に示します。この例では,表と表以外のRDエリアを三つに分割しています。
リソース名 |
指定方法 |
|
---|---|---|
列 |
BLOB列 |
表格納用RDエリアと1対1で指定します。 表格納用RDエリアが重複指定されている場合は,表に対応するよう重複指定します。また,既存の表格納用RDエリアを変更後に使用する場合は,同じ境界値に対応するように既存のインデクス,LOB格納用RDエリアを指定しなければなりません。 |
インデクス |
クラスタキーインデクス プライマリキーインデクス(プライマリキー及びクラスタキーを定義したインデクスを含む) B-treeインデクス |
(5) 分割するRDエリア内のデータの扱い
境界値による格納範囲を分割する場合,基本的にはシステムが自動的にRDエリアの該当する表のデータを削除します。ただし,条件によってはデータを削除しないで残すこともできます。
-
データの削除
境界値による格納範囲を分割する場合,分割するRDエリア内のデータの一部は,分割後はそのRDエリアに格納される格納範囲外のデータとなってしまう可能性があるため,分割対象とした格納範囲のRDエリア内のデータは削除します。ただし,削除するのは分割格納条件を変更する表のデータだけです(同じRDエリアに含まれる別の表のデータは削除されません)。RDエリア内のデータを削除する場合,次のどちらかの方法でデータを削除します。
-
すべての定義情報の削除
分割前のRDエリアが,分割した結果,分割対象の表で使用されなくなった場合,ディクショナリ中の,その表が格納条件ごとに使用するRDエリアの情報(SQL_DIV_TABLE表)から,分割前のRDエリアの情報を削除します。また,RDエリア内で管理している,表の情報も削除します。この結果,そのRDエリア内にあった,分割対象の表のデータはすべて削除されます。イメージ的には特定RDエリアに対してDROP TABLEを実行するのと同じです。
-
データだけの削除
分割前のRDエリアを分割後も分割対象の表で使用する場合,ディクショナリの情報やRDエリア内で管理している情報は削除しないで,RDエリア内の分割対象とした表のデータだけを削除します。表のデータを削除する場合,分割対象の格納範囲のRDエリアがほかの格納範囲で使用されていると,その格納範囲のデータも削除します。イメージ的には特定RDエリアに対してPURGE TABLEを実行するのと同じです。
なお,RDエリア内のデータを削除する場合,対応する次のRDエリア内のデータもすべて削除します。
-
インデクス格納用RDエリア内のインデクスキー
-
BLOB列格納用RDエリア内のデータ
また,インナレプリカ機能を使用している場合,すべての世代のデータを削除します。
-
-
データの保存
「1.データの削除」で示したとおり,境界値による格納条件を分割する場合,基本的には分割前のRDエリア内のデータは削除します。しかし,次の条件をすべて満たす場合は,RDエリア内のデータをそのまま使用できるため,データを削除しないようにすることもできます。
-
分割前のRDエリアを分割後のRDエリアの一部としてそのまま使用する場合
-
分割前のRDエリア内にある境界値以下のデータしかない場合
-
分割した結果,分割前のRDエリアのすべてのデータが分割後の格納範囲と一致している場合
RDエリア内のデータを削除するかどうかは,ALTER TABLEのWITHOUT PURGE句の指定によって選択できます。WITHOUT PURGE句の指定とデータの扱いを次の表に示します。ただし,システムでは,分割した結果,RDエリア内のすべてのデータが分割後の格納範囲と一致しているかどうかをチェックしません。
表13‒12 WITHOUT PURGE句の指定とデータの扱い(境界値指定の場合) 変更前後のRDエリアの関係
WITHOUT PURGE句の指定可否
WITHOUT PURGE句の指定あり
WITHOUT PURGE句の指定なし
分割前のRDエリアを分割後のRDエリアに含みます。
指定できます。
分割前のRDエリアのデータを削除しません。
分割前のRDエリアのデータを削除します。
分割前のRDエリアを分割後のRDエリアに含みません。
指定できません。
該当しません。
WITHOUT PURGE指定なしの場合のデータの削除対象RDエリアの例を次の図に示します。この例では,WITHOUT PURGEを指定していないため,分割前のRDエリアのデータは削除されます。
図13‒27 WITHOUT PURGE指定なしの場合のデータの削除対象RDエリアの例 -
- データを削除しない場合の注意事項
-
分割前のRDエリアのデータが,分割格納条件を変更した結果,格納範囲以外となった場合,ALTER TABLE実行時はデータの妥当性をチェックしません。したがって,格納範囲外のデータがRDエリアにあることになり,SQL実行時などHiRDBが正しく動作しません。
このため,WITHOUT PURGEを指定して分割格納条件を変更する場合は,十分に注意する必要があります。分割前のRDエリアのデータが分割後の格納範囲となることが保証できない場合は,分割前のRDエリアのデータをアンロードし,WITHOUT PURGE指定なしで分割格納条件を変更し,その後アンロードしていたデータを分割したRDエリアにロードする必要があります。誤って分割した場合の回復方法については,「分割後の格納条件に合わないデータが残った場合の回復手順」を参照してください。
変更対象RDエリアのデータの扱い(WITHOUT PURGE指定がある場合)の例を次の図に示します。この例では,WITHOUT PURGEが有効な場合,分割前のRDエリアは削除されないで,再利用されます。
図13‒28 変更対象RDエリアのデータの扱い(WITHOUT PURGE指定がある場合)の例 - データを削除する場合の注意事項
-
分割前のRDエリアが,ほかの格納範囲でも格納されるような指定の場合,ほかの格納範囲のデータも削除します。分割前のRDエリアを分割後のRDエリアに含む場合も,含まない場合も同じです。RDエリアのデータを削除する場合の例を次の図に示します。
図13‒29 RDエリアのデータを削除する場合の例