pureXML フィーチャーに対する制約事項

pureXML® フィーチャーには、XML 列定義に関する制約事項、パーティション表に表をアタッチする際の制約事項、パーティション・データベース環境での制約事項など、特定の制約事項が適用されます。

XML 列定義に対する制約事項

XML 列は、以下の制約事項に従います。
  • XML 列で索引を作成する場合、GENERATE KEY USING XMLPATTERN 節を使用する必要があり、その索引を複合索引の一部とすることはできません。 複数の索引を 1 つの XML 列に対して作成できます。
  • XML 列を CHECK 制約で参照できるのは VALIDATED 述部と組み合わせた場合のみです。 XML 列における CHECK 制約についての情報は、このトピックの末尾にある関連リンクを参照してください。
  • XML 列は WITH DEFAULT 節で指定されるデフォルト値を持つことはできません。列が NULL 可能である場合、列のデフォルトは NULL です。
  • XML 列は、範囲がクラスター化された表 (RCT) では使用できません。
  • XML 列はキーの列として組み込むことはできません。これには、主キー、外部キー、ユニーク・キー、マルチディメンション・クラスタリング (MDC) 表の ディメンション・キー (ORGANIZE BY DIMENSIONS 節内)、範囲がクラスター化された表の順序付けキー、パーティション表の表パーティション化キー、 およびパーティション・データベース環境内の表の分散キーが含まれます。
  • XML 列が含まれるパーティション表には、表パーティション化キー列として使用できるデータ・タイプの XML 以外の列が少なくとも 1 列含まれていなければなりません。
  • XML 列は、型付き表および型付きビューに組み込むことはできません。
  • XML 列は、生成列では参照できません。
  • XML 列は、両方向スクロール・カーソルの選択リストでは指定できません。
  • XML 列は、XML データの取得時にカーソル・ブロッキングが無効になる原因となります。
  • ALTER TABLE ステートメントを使用して XML 列をドロップする場合、1 つの ALTER TABLE ステートメントで、表内のすべての XML 列をドロップしなければなりません。
  • Db2® V9.7 フィックスパック 1 以降のリリースでは、XML 列で定義された XML データの索引に関する分散統計を収集できます。 以下の制限事項は、XML 列上の分散統計の収集に適用されます。
    • 分散統計は、XML 列で指定された XML データの索引ごとに収集されます。 索引に指定するデータ・タイプは、VARCHAR、DOUBLE、INTEGER、DECIMAL、 TIMESTAMP、または DATE でなければなりません。 分散統計は、タイプ VARCHAR HASHED の XML データの索引に対しては、収集されません。
    • XML データに対する索引ごとの分散統計は、デフォルトで最大 250 の変位値を使用します。 デフォルトを変更するには、 RUNSTATS コマンドを発行するときに、 ON COLUMNS または DEFAULT 節で NUM_QUANTILES パラメーターを使用して値を指定します。 XML 分散統計の収集中、num_quantiles データベース構成パラメーターは無視されます。
    • STATISTICS オプションでデータをロードするとき、XML 分散統計は作成されません。
    • パーティション表で定義された XML データのパーティション索引の場合、XML 分散統計は収集されません。

トリガーに関する制約事項

BEFORE または AFTER トリガーのトリガー本体では、影響を受ける行内にある XML タイプの列を参照する遷移変数を使用できるのは、XMLVALIDATE 関数を使用して妥当性検査する場合だけであり、XML 列値は NULL に設定されるか未変更のままになります。

パーティション表にパーティションをアタッチする際の制約事項

ALTER ATTACH を使用して XML 列が含まれるパーティション表にパーティションをアタッチする場合、アタッチ元となる表 (ソース表) のそれぞれの XML 列の INLINE LENGTH は、アタッチ先となる表 (ターゲット表) の対応する XML 列の INLINE LENGTH と一致しなければなりません。

バージョン 9.5 以前の XML レコード形式を使用する XML 列が表に含まれる場合、バージョン 9.7 以降のレコード形式を使用する XML 列を持つパーティション表に表をアタッチする操作はサポートされません。 表をアタッチする前に、ターゲット・パーティション表のレコード形式と一致するように表の XML レコード形式を更新する必要があります。 次の 2 つの方法のいずれを使用しても、表の XML レコード・フォーマットを更新できます。
  • ADMIN_MOVE_TABLE プロシージャーを使用して、表に対してオンライン表移動を実行します。
  • 以下のステップを実行してください。
    1. EXPORT コマンドを使用して表データのコピーを作成します。
    2. TRUNCATE ステートメントを使用して、表からすべての行を削除し、表に割り振られたストレージを解放します。
    3. LOAD コマンドを使用して、表にデータを追加します。
表の XML レコード・フォーマットを更新した後で、その表をターゲットのパーティション表にアタッチします。

パーティション・データベース環境における制約事項

パーティション・データベース環境で pureXML フィーチャーを使用する場合、以下の規則が適用されます。

  • XML 列を分散キーとして使用することはできません。 そのため、以下の制約事項が当てはまります。
    • XML 列だけが含まれる表を分散することはできません。
    • 分散キーのある表は、主キー、ユニーク制約、またはユニーク索引を XML 列に定義できません。
    • XML 列が含まれる分散キーを持つ表には、分散キーとして使用できるデータ・タイプの XML 以外の列が少なくとも 1 列含まれていなければなりません。
  • XML データを XML データ・ファイルからパーティション表に並列にロードする場合、並列でロードが実行されているすべてのパーティションに対して XML データ・ファイルが読み取り可能でなければなりません。
  • XML データを複数パーティションのデータベースにロードするために LOAD コマンドで CURSOR ファイル・タイプを使用する場合、PARTITION_ONLY モードと LOAD_ONLY モードはサポートされません。
  • NOT ROLLFORWARD RECOVERABLE オプションを指定して REDISTRIBUTE DATABASE PARTITION GROUP コマンドを使用する場合、再配分操作では、XML 列を含む表に対して INDEXING MODE DEFERRED オプションが使用されます。 表に XML 列が含まれていない場合、再配分操作はコマンドの発行時に指定された索引付けモードを使用します。
  • バージョン 9.5 以前の XML レコード・フォーマットを使用する XML 列が含まれる表では、再配分は行えません。 そうした表を新しいフォーマットに変換するには、ADMIN_MOVE_TABLE ストアード・プロシージャーを使用します。

データ行圧縮に関する制約事項

ALTER TABLE または CREATE TABLE ステートメントの COMPRESS YES オプションを使用すると、表のデータ行圧縮が有効になります。 表の XML ストレージ・オブジェクト内にあるデータの圧縮は、バージョン 9.5 以前の XML レコード・フォーマットを使用する XML 列が含まれる表ではサポートされません。 そのような表でデータ行の圧縮を有効にした場合は、表オブジェクト内の表の行データだけが圧縮されます。

表でデータ行圧縮が有効なものの、表の XML ストレージ・オブジェクトを挿入、ロード、また reorg 操作の際に圧縮できない場合、メッセージが db2diag ログ・ファイルに書き込まれます。

表の XML ストレージ・オブジェクトのデータを圧縮可能なものにするには、ADMIN_MOVE_TABLE ストアード・プロシージャーを使用して表を新しいフォーマットに変換してから、そのマイグレーション済みの表に対してデータ行の圧縮を有効にします。

追加の制限

シリアライズされた XML データの使用: データベース内に保管される XML 値のサイズに対するアーキテクチャー上の制限はありませんが、データベースで交換されるシリアライズされた XML データは事実上 2 GB に制限されます。

RUNSTATS コマンドの使用: XML データを使用する ALLOW READ ACCESS ロード操作が完了し、表が SET INTEGRITY ペンディング状態になっている場合に、 その表に対して RUNSTATS コマンドを実行することができます。 このようなシナリオの場合、 RUNSTATS 操作では、前のロード操作による不可視の XML 索引キーを認識することができないため、 エラーが返されます。 回避策として、RUNSTATS コマンド の前に SET INTEGRITY ステートメントを実行してください。

LOAD コマンドの使用 : 以下の場合、LOAD コマンドを使用して XML データをロードする際に、 FOR EXCEPTION 節を使用してロード例外表を指定することはサポートされません。
  • ラベル・ベースのアクセス制御 (LBAC) を使用する場合。
  • パーティション表にデータをロードする場合。

XML 列に対する索引の作成: XML 列の索引の作成と XSLT スタイルシートを使用した変換には、追加の制約事項があります。 詳しくは関連参照トピックを参照してください。詳しくは、『XML データに対する索引の制約事項』および『XML 文書の変換に関する重要な考慮事項』を参照してください。

5000 を 超える maxOccurs 属性値の使用: Db2 バージョン 9.7 フィックスパック 1 以降では、 Db2 XSR に登録された XML スキーマで 5000 を超える 値の maxOccurs 属性を使用する場合、その maxOccurs 属性値は「unbounded」を指定された場合と同様に扱われます。 5000 を超える maxOccurs 属性値を持つ文書エレメントは「無制限」を指定する場合と同じように処理されるため、XMLVALIDATE 関数を使用すると、文書の妥当性検査に使用した XML スキーマに基づく最大値をエレメントの出現回数が超える場合でも、XML 文書は妥当性検査をパスする可能性があります。 追加情報および推奨される回避策については、XMLVALIDATE 関数の情報を確認してください。

RESTORE DATABASE コマンドの使用: SQL スキーマ内のいずれかの表に XML 列が含まれる場合、TRANSPORT オプションを使用して 表スペースと SQL スキーマの転送を行うことはできません。