ヘッダーをスキップ
Oracle® XML DB開発者ガイド
11gリリース2 (11.2)
B70200-03
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

36 XMLType表のエクスポートおよびインポート

この章では、Oracle XML DBで使用するために、Oracle Data Pumpを使用してXMLType表をエクスポートおよびインポートする方法を説明します。


注意:

元のエクスポート・ユーティリティおよびインポート・ユーティリティでは、Oracle Database 11gリリース2(11.2)より前のデータベース・リリースにデータを移行できます。

この章では、次の項目について説明します。

Oracle Data Pumpの概要

Oracle Data Pumpテクノロジにより、1つのデータベースから他のデータベースへのデータおよびメタデータの高速移動が可能になります。Oracle Data Pumpには、expdpおよびimpdpという2つのコマンドライン・クライアントがあり、それぞれデータ・ポンプ・エクスポート・ユーティリティおよびデータ・ポンプ・インポート・ユーティリティを起動します。expdpおよびimpdpクライアントは、PL/SQLパッケージDBMS_DATAPUMP で提供されているプロシージャを使用して、コマンドラインに入力されたパラメータを渡してエクスポートおよびインポートのコマンドを実行します。これらのパラメータにより、完全なデータベースまたはデータベースのサブセットの、データおよびメタデータのエクスポートとインポートが可能になります。

データ・ポンプ・エクスポート・ユーティリティおよびインポート・ユーティリティ(それぞれコマンドexpdpおよびimpdpにより起動)は、元のエクスポート・ユーティリティ(exp)およびインポート・ユーティリティ(imp)と外観は似ていますが、完全に別のものです。


関連項目:

元のエクスポート・ユーティリティおよびインポート・ユーティリティを使用する場合の詳細は、『Oracle Databaseユーティリティ』を参照してください。

データ・ポンプ・エクスポート・ユーティリティ(expdpで起動)は、ダンプ・ファイル・セットと呼ばれるオペレーティング・システムのファイル・セットにデータおよびメタデータをアンロードします。ダンプ・ファイル・セットは、データ・ポンプ・インポート・ユーティリティ(impdpで起動)でのみインポートできます。

Oracle XML DBにおけるエクスポート/インポートのサポート

Oracle XML DBは、XMLデータを格納するXMLType表および列のエクスポートおよびインポートをサポートします。

XMLType記憶域形式(構造化、非構造化またはバイナリXML)に関係なく、このデータをエクスポートおよびインポートできます。ただし、データ・ポンプはテキスト形式のXMLデータまたはバイナリXMLデータのみをエクスポートまたはインポートします。このため、XMLTypeの構造化記憶域に使用される、基礎となるオブジェクト・リレーショナル表および列はエクスポートされません。それらの表および列は、バイナリ形式に変換され、自己記述的なバイナリXMLデータとしてエクスポートされます。CLOBインスタンス(非構造化記憶域)として格納されているXMLTypeデータはテキスト形式でエクスポートされます。


注意:

Oracle Data Pump for Oracle Database 11gリリース1(11.1)は、XML Schema、XML Schemaに基づくXMLType列またはバイナリXMLデータをリリース11.1より前のバージョンにエクスポートする機能をサポートしていません。

エクスポート形式に関係なく、ダンプ・ファイルの形式はCLOBまたは自己記述的なバイナリXMLにトークン・マップ・プリアンブルを加えたもののいずれかになります。Oracle Data Pumpがこのデータをダンプ・ファイルに格納する方法は、エクスポート・パラメータdata_optionsの値に依存します(このパラメータに対して唯一有効な値は、xml_clobsです)。エクスポート・コマンドラインでこの値を指定すると、XMLTypeデータがすべてダンプ・ファイルにテキスト形式で格納されます。expdpコマンドでxml_clobsパラメータを指定しない場合、表内のXMLType列の形式によってダンプ・ファイル内のデータの形式が決定されます。表36-1は、表内のXMLType列とそれに対応するダンプ・ファイルの形式を示しています。

表36-1 表内のXMLType列の形式とそれに対応するダンプ・ファイルの形式

XMLType列の記憶域モデル XMLデータのダンプ・ファイル・フォーマット

非構造化記憶域

テキスト

構造化記憶域、バイナリXML記憶域またはハイブリッド記憶域(非構造化記憶域および構造化記憶域の混合)

自己記述的なバイナリXML


XMLTypeデータはXMLデータとしてエクスポートおよびインポートされるため、ソース・データベースおよびターゲット・データベースはそのデータに対して異なるXMLType記憶域モデルを使用できます。つまり、ある方式でXMLTypeデータが格納されたデータベースからデータをエクスポートし、それとは異なる方式でXMLTypeデータが格納されたデータベースへインポートできます。


注意:

外部表を使用してインポートする場合、XMLType記憶域モデルを使用しているかどうかにかかわらず、オプションappendを指定して、同じダンプ・ファイルからXMLType表または列に複数回インポートしないでください。そのようなことを行うと、一意性制約違反エラーが発生します。

外部表を使用したインポートの詳細は、『Oracle Databaseユーティリティ』を参照してください。


XML Schemaに基づくXMLType表のエクスポート

XML Schemaに基づくかどうかにかかわらず、XMLType表をエクスポートできます。表がXML Schemaに基づいている場合、表のデータを定義するために使用されたXML Schemaに依存します。構造化記憶域の場合、このXML Schemaに、データを格納するために使用されたSQLオブジェクト型への依存関係があることもあります。そのため、XML Schemaに基づくXMLType表を持つユーザーをエクスポートすると、次もエクスポートされます。

  • SQLオブジェクト型(構造化記憶域が使用されている場合)

  • XML Schema

  • XML表

階層対応(リポジトリ)表のエクスポート

次のガイドラインは、階層対応表(Oracle XML DBリポジトリ・データの基礎となる表)のエクスポートに適用されます。

  • 階層対応表の行レベルのセキュリティ(RLS)ポリシーおよびパス索引トリガーはエクスポートされません。これらの表のインポート時には階層対応していません

  • これらの表の非表示列ACLOIDおよびOWNERIDはエクスポートされません。インポートされたデータベースではこれらの列の値が異なる場合があるため、それらの値を再初期化する必要があります。


関連項目:

RLSポリシーおよびパス索引トリガーの詳細は、「リポジトリ・リソースおよびデータベース表のセキュリティ」を参照してください。

トランスポータブル表領域のエクスポートおよびインポート

トランスポータブル表領域機能を使用して、XML Schemaに基づくか基づかないかにかかわらず、Oracleデータベース間で表領域セットを移動できます。トランスポータブル表領域モードを使用してエクスポートをすると、指定された表領域セット内の表のメタデータ(および依存オブジェクト)のみがアンロードされます。その後、表領域のデータ・ファイルを他のOracleデータベースにコピーし、トランスポータブル表領域のインポートを実行できます。一般的に、ここでは、表領域の作成および表領域メタデータの再作成のみが行われるため、非常に高速に処理されます。

expdpTRANSPORT_TABLESPACESパラメータを使用して、オブジェクトのメタデータがソース・データベースからターゲット・データベースへエクスポートされる対象となる表領域名のリストを指定します。

トランスポータブル表領域をエクスポートして、それをリリース・レベルの低いデータベースにインポートすることはできません。ターゲット・データベースのリリース・レベルは、ソース・データベースと同じかそれよりも高いレベルである必要があります。

エクスポート時には、Oracle XML DBリポジトリ階層情報が失われます(「階層対応(リポジトリ)表のエクスポート」を参照)。インポート時、インポートされるデータにより参照されているXML Schemaもすべてインポートされます。

リポジトリ・リソースおよびフォルダリング・サポート

Oracle XML DBでは、従来のリレーショナル・データベース構造ではなく、階層構造のデータベースにコンテンツを格納するフォルダリング・メカニズムがサポートされます。フォルダリングを使用すると、表名や列名などではなく、パス名およびURIを使用してデータ(リポジトリ・ソース)を参照できます。expdpまたはimpdpを使用する場合、このフォルダリング・メカニズムは完全にはサポートされません。

ただし、登録されたXML Schemaに基づくリソースの場合、データを格納するXMLType表はエクスポートおよびインポートできます。エクスポート中、XMLデータのみがエクスポートされ、Oracle XML DB Foldering階層内の関係は失われます。

データベースの全体エクスポート

Oracle XML DBは、Oracle XML DBリポジトリ用のメタデータ(およびXML Schemaに関連しないデータ)をデータベース・スキーマ(ユーザー・アカウント)XDBに格納します。Oracle Databaseはリポジトリ構造をエクスポートしないため、データベースの全体エクスポートの実行時に、これらのメタデータ表および構造はエクスポートされません。データベースの全体エクスポート時にデータベース・スキーマ(ユーザー)XDB全体がスキップされ、ユーザーXDBが所有するすべてのデータベース・オブジェクトはエクスポートされません。

異なるキャラクタ・セットでのエクスポートおよびインポート

XMLデータは、他のデータベース・オブジェクトの場合と同様に、エクスポート側サーバーのキャラクタ・セットでエクスポートされます。インポート中、このデータはインポート側サーバーのキャラクタ・セットに変換されます。

エクスポート/インポートの構文および例

Oracle Data Pumpを使用したエクスポートおよびインポートは『Oracle Databaseユーティリティ』 で説明されています。この項では、XMLTypeデータにコマンドexpdpおよびimpdpを使用する場合のその他のガイドラインおよび例を示します。Oracle Data Pumpは、CLOBとして格納されているXMLTypeデータを持つ表に関しては、他のすべての表と同じ方法で表のエクスポートおよびインポートを行います。

ここに示す例では、コマンドライン・コマンドexpdpおよびimpdpを使用します。このようなコマンドをユーザー名およびコマンド・パラメータとともに発行すると、パスワードの入力を要求されます。この例では、この入力要求は示されていません。

表モード・エクスポート/インポートの実行

XMLType表は、それを定義するために使用されたXML Schemaに依存します。同様に、XML Schemaはそれ用に作成または指定されたSQLオブジェクト型に依存します。XMLType表をインポートするには、そのXML SchemaおよびSQLオブジェクト型が必要です。TABLEモード・エクスポートを使用すると、表関連のメタデータおよびデータのみがエクスポートされます。これらのデータを正常にインポートできるようにするには、XML Schemaとオブジェクト型の両方が作成済であることを確認する必要があります。

この項に示す例では、次のようなデータベースを使用していることを前提としています。

  • サンプル・スキーマを持つデータベース

  • 非構造化記憶域形式(CLOB)であるXMLType列を持つ表foo

  • READおよびWRITE権限がサンプル・スキーマに対して与えられているディレクトリ・オブジェクトdpump_dir

例36-1は、TABLESパラメータを使用して指定した表モード・エクスポートを示しています。これにより表foofoo.dmpダンプ・ファイルにエクスポートされます。

例36-1 表モードでのXMLTypeデータのエクスポート

expdp system directory=dpump_dir dumpfile=foo.dmp tables=foo 

注意:

表モードでは、expdpコマンドでスキーマ接頭辞を指定しないと、エクスポート側のスキーマがデフォルトで使用されます。

例36-2は表モード・インポートを示しています。これにより、表foofoo.dmpダンプ・ファイルからインポートされます。

例36-2 表モードでのXMLTypeデータのインポート

impdp system tables=foo directory=dpump_dir dumpfile=foo.dmp table_exists_action=append

このインポートの際にfooという名前の表がすでに存在している場合は、既存の表の最後の行にtable_exists_actionパラメータが追加されます。APPENDを使用すると、データは常に新しい領域にロードされます。たとえ利用可能でも既存の領域は再利用されません。このため、ロード後にはデータの圧縮が必要になることがあります。


関連項目:

Oracle Data Pumpおよびそのコマンドライン・クライアントexpdpおよびimpdpの詳細は、『Oracle Databaseユーティリティ』を参照してください。

スキーマ・モード・エクスポート/インポートの実行

スキーマ・モード・エクスポートを実行する際には、ロールEXP_FULL_DATABASEが割り当てられている場合、データベース・スキーマ、データベース・スキーマ定義、およびそのデータベース・スキーマのシステム権限をエクスポートできます。

この項に示す例では、次のようなデータベースを使用していることを前提としています。

  • ユーザーx4aが表po2を作成済。

  • ユーザーx4aが登録されたXML Schema、ipoを持っており、そのXML SchemaがOrdered Collection Table(OCT)、item_oct2およびsitem_nt2を作成済。

ユーザーx4aは、例36-3に示すようにして表po2を作成します。

例36-3 表po2の作成

CREATE TABLE po2 (po XMLType)
  XMLTYPE COLUMN po
  XMLSCHEMA "ipo.xsd"
  ELEMENT "purchaseOrder"
  VARRAY po.XMLDATA."items"."item"
    STORE AS TABLE item_oct2 ((PRIMARY KEY(NESTED_TABLE_ID, SYS_NC_ARRAY_INDEX$)))
      NESTED TABLE po.XMLDATA."shippedItems"."item" STORE AS sitem_nt2;

その後、例36-4に示すように表po2がデータが移入され、エクスポートされます。

例36-4 スキーマ・モードでのXMLTypeデータのエクスポート

expdp x4a directory=tkxm_xmldir dumpfile=x4a.dmp

例36-4では、次のものすべてがエクスポートされます。

  • XML Schema、ipoの登録時に生成されたすべてのデータ型

  • XML Schema、ipo

  • XML Schema、ipoの登録時に生成された表po2およびOrdered Collection Table(OCT)、item_oct2およびsitem_nt2

  • これらすべての表にあるすべてのデータ

例36-5 スキーマ・モードでのXMLTypeデータのインポート

impdp x4a directory=tkxm_xmldir dumpfile=x4a.dmp

例36-5は、x4a.dmp内のすべてのデータをユーザーx4aがすでに存在する他のデータベースにインポートします。

例36-6例36-5と同じ動作をしますが、ユーザーx4aからユーザーquineへのデータベース・スキーマの再マップも行います。

例36-6 スキーマ・モードでのXMLTypeデータのインポート、スキーマの再マップ

impdp x4a directory=tkxm_xmldir dumpfile=x4a.dmp remap_schema=x4a:quine

例36-6は、x4a.dmp内のすべてのデータ(ユーザーx4aのデータベース・スキーマからエクスポートしたデータ)を、データベース・スキーマquineにインポートします。スキーマを再マップするには、ユーザーx4aがローカル・データベース上でIMP_FULL_DATABASEロールを、ソース・データベース上でEXP_FULL_DATABASEロールを付与されている必要があります。REMAP_SCHEMAは、すべてのオブジェクトをソース・スキーマからターゲット・スキーマにロードします。