※ 本記事は、Alonso Alavez, Madhupriya Ravishankar, Rodrigo Fuentesによる”Transportable Binary XML – modern XML document storage in Oracle Database 23ai“を翻訳したものです。
2024年6月5日
Oracle Databaseの従来のXMLストレージ
2010年、Oracle Databaseでは、Oracle Database 11g (11.2.0.2)を使用してXMLドキュメントの格納および使用を最適化するためのネイティブXMLストレージ機能が導入されました。ネイティブのXMLTypeストレージに対するOracleのアプローチは、純粋にドキュメント中心で、コンパクト・スキーマ対応XML (CSX)または非トランスポータブル・バイナリXMLと呼ばれていました。このバイナリ形式は、すべてのXMLドキュメントがバイナリ形式でエンコードされ、バイナリ・データをエンコードおよびデコードするキーが単一の中央ディクショナリに格納される、中央のトークン表セット・アプローチに基づいて構築されています。このような設計は、単一のデータベース内のストレージとパフォーマンスに優れています。トークンをエンコードおよびデコードするための作業が重複することはなく、常に1つの参照のみが存在します。トークンのハッシュは最も高価なタスクの1つであるため、この方法では多くの時間を節約できます。ただし、自然な結果として、バイナリXMLデータのデコードに関連するすべての操作が中央ディクショナリにアクセスする必要があります。
トランスポータブル・バイナリXMLとは
CSXはXMLTypeデータを簡潔に圧縮しますが、中央ディクショナリ(トークン表)およびスキーマ・レジストリを使用すると、シャーディング、クロス・コンテナ、リモート・データベース・リンク、さらには堅牢なインポート/エクスポート機能などの分散およびリモート・アーキテクチャを容易に採用できます。中央ディクショナリが直接アクセスできないシナリオでは、課題が発生します。これらの課題を克服するために、Oracle Database 23aiでは、トランスポータブル・バイナリXML (TBX)をストレージ・オプションとして導入しました。これは、CSX上に構築されたが、中央ディクショナリに依存しないバリアントです。
TBXは、この依存関係がなくてもはるかに柔軟でスケーラブルであり、バイナリ・ストアドXMLドキュメントを分散環境でトランスポータブルに使用できるようになります。トランスポータブル・バイナリXMLは、Oracle Database 23ai以降、XMLドキュメントをOracle Databaseにネイティブに格納するための推奨方法です。次に、トランスポータブル・バイナリXMLの使用方法と、以前のレガシー・バイナリXML記憶域形式を移行する方法について説明します。
トランスポータブル・バイナリXMLの使用
Oracle Database 23ai以降では、トランスポータブル・バイナリXMLがデフォルトのXML記憶域タイプです。XML列の記憶域タイプを明示的に指定する必要はありません。ただし、TBXを明示的に指定する場合、DDLは次のようになります:
CREATE TABLE tx( ID NUMBER, XMLDOC XMLTYPE) XMLTYPE COLUMN XMLDOC STORE AS TRANSPORTABLE BINARY XML;
表にTBXとして格納されたXMLType列があることを確認するには、表を記述するだけです:
DESCRIBE TX Name Null? Type ------------------ -------- ----------------------------------------- ID NUMBER XMLDOC SYS.XMLTYPE STORAGE TRANSPORTABLE BINARY
トランスポータブル・バイナリ XMLは、トランスポータブルでないバイナリXMLストレージとの完全なデータ処理互換性を提供します。通常、すべてのXML演算子およびSQLは、動作を変更することなく、以前のように動作し続けます。トランスポータブル・バイナリXMLは、XMLドキュメントのデータベースへの格納方法およびXMLドキュメントの内部処理方法のみを変更します。
トランスポータブル・バイナリXMLの唯一の変化は、既存の制約を解除することであり、Oracle Shardingのような最新のアーキテクチャでバイナリXMLドキュメントを有効化することです。
トランスポータブル・バイナリXMLおよびOracle Sharding
シャーディングは、複数の独立したサーバーまたはインスタンス間でデータをパーティション化することでデータベースをスケーリングするために使用されるデータベース・アーキテクチャ手法で、それぞれが合計データ(シャード)の一部を保持します。シャードはすべて、1つのインスタンス(コーディネータ)によって調整され、すべての情報が収集されて単一のデータベースとして表示されます。

このアーキテクチャは、共有なしのアーキテクチャに基づいています。つまり、各シャードは他のシャードについて何も認識しません。各シャードは、独立した単一のデータベースとしても使用できます。表レベルで自己カプセル化された自己デコード/エンコーディング・バイナリ記憶域としてトランスポータブル・バイナリXMLを使用すると、ネイティブのXMLTypeをシャーディングとともに使用できます。これにより、XMLドキュメントをワイヤを介して制限なく他のデータベースに送信できます。トランスポータブル・バイナリXMLは、Oracle Sharding環境でサポートされている唯一のXMLTypeストレージ形式です。他のXMLTypeストレージ・タイプを指定すると、エラーがスローされます。
トランスポータブル・バイナリXMLを使用してXMLType列を持つシャード表を作成するには、DDLは次のようになります:
CREATE SHARDED TABLE SHARDEDTAB ( SHDKEY NUMBER NOT NULL, CTRY_CODE VARCHAR2(3) NOT NULL, XMLDOC XMLTYPE, CONSTRAINT SHARD_PK PRIMARY KEY (SHDKEY, CTRY_CODE) ) PARTITION BY LIST (CTRY_CODE) ( PARTITION P_REG_1 VALUES (‘RG1’) TABLESPACE TBS1, PARTITION P_REG_2 VALUES (‘RG2’) TABLESPACE TBS2, PARTITION P_REG_3 VALUES (‘RG3’) TABLESPACE TBS3 ) XMLTYPE COLUMN XMLDOC STORE AS SECUREFILE TRANSPORTABLE BINARY XML;
表は、中央リポジトリを必要とせずに、新しいトランスポータブル・バイナリXMLをXMLドキュメントの格納形式として使用して、参加しているすべてのデータベース(シャード)にシャードされます。TBXは、システムまたはコンポジット・シャーディング環境でもサポートされています。興味がある場合は、Oracleのシャーディング・データベース・スキーマ設計の概要を確認してください。
トランスポータブル・バイナリXMLおよび検索索引
TBXと連携して、Oracle Database 23aiでは、TBX専用のXML検索索引の新しい簡略化されたSQL構文が導入されました。大規模な非構造化XML文書に対して全文検索機能または範囲検索機能(あるいはその両方)が必要で、新しいトランスポータブル・バイナリXML格納形式を採用した場合、Oracleでは、XML検索索引を使用してXMLデータを索引付けすることをお薦めします。
全文検索と範囲検索の両方のXML検索索引を作成するには、次のDDLのような構文を使用できます:
CREATE SEARCH INDEX myXMLDocumentsSearchIndex
ON myXMLDocumentsTable(myXMLTypeColumn)
FOR XML PARAMETERS ('SEARCH_ON TEXT_VALUE (BINARY_DOUBLE, VARCHAR2, TIMESTAMP)');
この例では、指定されたデータ型BINARY_DOUBLE、VARCHAR2およびTIMESTAMPに対して、全文検索コンポーネントと範囲検索コンポーネントの両方を有効にします。
ワークロードおよびビジネス要件が不明な場合は、XMLドキュメント内の共通データ型の検索および範囲スキャンのための索引を作成することをお薦めします。
SQL where句内のXMLExists式で、関係演算子(>、<、<= 、>= または=)を使用した全文検索および範囲検索の検索索引のユース・ケースは、内部処理の性質が若干異なるため、特定の要件にあわせてXML検索索引構造を最適化できます。
テキスト検索のみを目的としている場合は、CREATE SEARCH INDEX文でFOR XML句を指定して、XML検索索引を作成できます。前述のように、このようなXML検索索引は、TBXとして格納されたXMLドキュメントにのみ作成でき、CTXAPPデータベース・ロールが付与されている必要があります。
テキスト検索用のドキュメントのみを索引付けする検索索引を作成する構文は、次の例のように単純です。
CREATE SEARCH INDEX myXMLDocumentsSearchIndex ON myXMLDocumentsTable(myXMLTypeColumn) FOR XML;
または、より詳細な構文を使用します。これはわかりやすい理由でのみ行います。前の例に示すように、これがデフォルトです:
CREATE SEARCH INDEX myXMLDocumentsSearchIndex ON myXMLDocumentsTtable(myXMLTypeColumn) FOR XML PARAMETERS (‘SEARCH_ON TEXT’);
XMLドキュメント内で範囲スキャン専用の索引を作成する場合は、検索するデータ型のリストを指定するだけです:
CREATE SEARCH INDEX myXMLDocumentsSearchIndex
ON MyXMLDocumentsTable(myXMLTypeColumn)
FOR XML PARAMETERS ('SEARCH_ON VALUE (BINARY_DOUBLE, VARCHAR2, TIMESTAMP)');
トランスポータブル・バイナリXMLへの変換
将来のアプリケーションやシステムにTBXを採用する方法は簡単にわかりますが、Oracle DatabaseでXMLストレージを使用して構築された既存のアプリケーションの多くは、Oracle Database 23aiにアップグレードされます。レガシーXMLストレージ形式を使用してすべての表をTBXに移行することをお薦めします。
この移行には様々なオプションがあります:
- 単純なCTAS (Create Table As Select)を実行して、レガシーXMLデータ型をTBXにキャストできます。これは最も実用的なアプローチです。ただし、アプリケーションのダウンタイムが発生し、索引などのすべての依存構造を手動で再構築する必要があります。
- オンライン再定義はCTASアプローチに似ていますが、オンライン・モードで移行を実行できます。
- DataPumpには、データ・インポート時に記憶域の移行を行うための特定のインポート・パラメータがあります。TRANSFORM = XMLTYPE_STORAGE_CLAUSE: ‘” TRANSPORTABLE BINARY XML” 。
- GoldenGateは、異種IT環境におけるリアルタイムのデータ統合およびレプリケーションのためのOracleのフラグシップ製品です。この方法は、データベース全体を移動する場合にのみ適用されます。
まとめ
トランスポータブル・バイナリXMLは、最新のデータベースおよびクラウド・アーキテクチャ用に構築されたOracle Databaseに、最適化されたバイナリXMLストレージの新世代を導入します。その効率的なバイナリ形式は、ストレージ要件を低減するだけでなく、分散アーキテクチャおよびデータ処理に適用できるようにします。トランスポータブル・バイナリXMLは、新しいXML検索索引付けとともに、Oracleデータベース内の拡張統合XMLサポートを提供し、XMLデータに依存する高パフォーマンス環境およびアプリケーションにとって理想的なプラットフォームとなります。
OracleのXMLドキュメント用の新しいTBXストレージの詳細、またはXML検索索引をより深く理解する場合は、次の資料が用意されています:
- トランスポータブル・バイナリXML記憶域については、ここでこのドキュメントとレガシー記憶域形式について説明します。
- XML検索索引の詳細は、ここを参照してください。
- XMLについて知っていても、その機能についてリフレッシュが必要な場合は、Oracle LiveLabs、特にXML用に作成したものを確認することをお薦めします。
さあ、XMLデータを活用し、情報へと変えていきましょう。
