プライマリ・コンテンツに移動
Oracle® XML DB開発者ガイド
12cリリース1 (12.1)
B71282-04
目次へ移動
目次
索引へ移動
索引

前
次

37 Oracle XML DBデータのエクスポートとインポート

Oracle Data Pumpを使用して、Oracle XML DBで使用するXMLType表をエクスポートおよびインポートできます。

注意:

元のエクスポート・ユーティリティ(exp)およびインポート・ユーティリティ(imp)を使用すると、Oracle Database 11gより前のデータベース・リリースにデータを移行できます。ただし、これらの元のユーティリティは、バイナリXMLとして格納されているXMLTypeデータの使用をサポートしていません。

37.1 XMLType表のエクスポートおよびインポートの概要

Oracle XML DBは、XML Schemaに基づくかどうかに関係なく、XMLデータを格納するXMLType表および列のエクスポートおよびインポートをサポートします。

Oracle Data Pumpにより、データベース間でデータとメタデータを高速で移動できます。Oracle Data Pumpを使用するには、2つのモード(トランスポータブル表領域モードとトランスポータブル表領域以外のモード)があります。

トランスポータブル表領域モードでは、XMLTypeデータに関して、XMLType記憶域モデルを変更できないという制約があります。

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

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

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

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

Oracle XML DBは、XML Schemaに基づくかどうかに関係なく、XMLデータを格納するXMLType表および列のエクスポートおよびインポートをサポートします。表がXML Schemaに基づいている場合、表のデータを定義するために使用されたXML Schemaに依存します。オブジェクト・リレーショナル記憶域の場合、このXML Schemaに、データを格納するために使用されたSQLオブジェクト型への依存関係があることもあります。

そのため、XML Schemaに基づくXMLType表を持つユーザーをエクスポートすると、次もエクスポートされます。

  • SQLオブジェクト型(オブジェクト・リレーショナル記憶域が使用されている場合)

  • XML Schema

  • XML表

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

注意:

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

XMLType記憶域モデルに関係なく、ダンプ・ファイルの形式はテキストまたは自己記述的なバイナリXMLにトークン・マップ・プリアンブルを加えたもののいずれかになります。デフォルトでは、自己記述的なバイナリXMLが使用されます。

Oracle Data Pumpがこのデータをダンプ・ファイルに格納する方法は、エクスポート・パラメータdata_optionsの値に依存します(このパラメータに対して唯一有効な値は、xml_clobsです)。エクスポート・コマンドラインでこの値を指定すると、XMLTypeデータがすべてダンプ・ファイルにテキスト形式で格納されます。それ以外の場合、ダンプ・ファイルではバイナリXMLが使用されます。

注意:

エクスポート・パラメータdata_optionsの値xml_clobsは、Oracle Database 12cリリース1 (12.1.0.1)から非推奨になりました。

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

注意:

XMLType記憶域モデルを使用しているかどうかにかかわらず、オプションtable_exists_action=appendを指定して、同じダンプ・ファイルからXMLType表に複数回インポートしないでください。XMLType表内の列は常に一意のオブジェクト識別子を使用してエクスポートおよびインポートされるため、これを行うと一意制約違反エラーが発生します。

table_exists_actionの詳細は、『Oracle Databaseユーティリティ』を参照してください。

37.2 Oracle XML DBリポジトリのエクスポート/インポートの制限事項

登録されたXML Schemaに基づいたOracle XML DBリポジトリ・リソースのデータを格納する表をエクスポートまたはインポートする場合は、そのXMLデータのみがエクスポートされます。リポジトリ構造はエクスポート中に失われるため、これらの表がインポートされたときは階層に対応していません。

登録されたXML Schemaに基づくOracle XML DBリポジトリ・リソースの場合、XMLデータを格納するXMLType表はエクスポートおよびインポートできます。

ただし、エクスポートされるのはXMLデータのみです。リポジトリ構造は、エクスポート中に失われます。フォルダ階層、行レベルのセキュリティ(RLS)ポリシーおよびパス索引トリガーの関係は、階層対応表にエクスポートされません。これらの表のインポート時には階層対応していません。

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

コマンドexpdpおよびimpdpXMLTypeデータを使用する場合のガイドラインおよび例を示します。

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

Oracle Data Pumpを使用したエクスポートおよびインポートはOracle Databaseユーティリティで説明されています。

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

表モード・エクスポートおよび表モード・インポート、ダンプ・ファイルの送受信の実行の例をそれぞれ示します。

XMLType表は、それを定義するために使用されたXML Schemaに依存します。同様に、そのXML Schemaはそれ用に作成または指定されたSQLオブジェクト型に依存します。XMLType表をインポートするには、対応するXML SchemaおよびSQLオブジェクト型が存在する必要があります。

TABLEモード・エクスポートを使用すると、表関連のメタデータおよびデータのみがエクスポートされます。このデータを正常にインポートできるようにするには、関連するXML Schemaとオブジェクト型が作成済であることを確認する必要があります。

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

  • スキーマuser23を使用したデータベース

  • バイナリXMLとして格納されているXMLType列を持つ表user23.tab41

  • READおよびWRITE権限が、expdpまたはimpdpを実行しているユーザーに対して与えられているディレクトリ・オブジェクトdpump_dir

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

注意:

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

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

このインポートの際にtab41という名前の表がすでに存在している場合は、table_exists_action = appendと指定すると、その表に行が追加されます。パラメータ値appendを使用すると、データは必ず新しい領域にロードされます。既存の領域が再利用されることはありません。このため、ロード操作後にはデータの圧縮が必要になることがあります。

関連項目:

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

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

expdp system directory=dpump_dir dumpfile=tab41.dmp tables=user23.tab41 

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

impdp system tables=user23.tab41 directory=dpump_dir dumpfile=tab41.dmp table_exists_action=append

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

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

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

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

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

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

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

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

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

  • XML Schema、ipo

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

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

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

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

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

注意:

XML Schemaをエクスポート元と同じデータベースにインポートするときに、このXML Schemaがインポート時にもOracle XML DBに登録されている場合、impdpパラメータtransform=oid:nも指定しないかぎり、remap_schemaを使用しないでください。パラメータtransformの詳細は、『Oracle Databaseユーティリティ』を参照してください。

例37-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;

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

expdp x4a directory=tkxm_xmldir dumpfile=x4a.dmp

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

impdp x4a directory=tkxm_xmldir dumpfile=x4a.dmp

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

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