Oracle Data Pumpを使用して、Oracle XML DBで使用するXMLType
表をエクスポートおよびインポートできます。
注意:
元のエクスポート・ユーティリティ(exp
)およびインポート・ユーティリティ(imp
)を使用すると、Oracle Database 11gより前のデータベース・リリースにデータを移行できます。ただし、これらの元のユーティリティは、バイナリXMLとして格納されている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ユーティリティ』を参照してください。
登録されたXML Schemaに基づいたOracle XML DBリポジトリ・リソースのデータを格納する表をエクスポートまたはインポートする場合は、そのXMLデータのみがエクスポートされます。リポジトリ構造はエクスポート中に失われるため、これらの表がインポートされたときは階層に対応していません。
登録されたXML Schemaに基づくOracle XML DBリポジトリ・リソースの場合、XMLデータを格納するXMLType
表はエクスポートおよびインポートできます。
ただし、エクスポートされるのはXMLデータのみです。リポジトリ構造は、エクスポート中に失われます。フォルダ階層、行レベルのセキュリティ(RLS)ポリシーおよびパス索引トリガーの関係は、階層対応表にエクスポートされません。これらの表のインポート時には階層対応していません。
コマンドexpdp
およびimpdp
とXMLType
データを使用する場合のガイドラインおよび例を示します。
ここに示す例では、コマンドライン・コマンドexpdp
およびimpdp
を使用します。このようなコマンドをユーザー名およびコマンド・パラメータとともに発行すると、パスワードの入力を要求されます。この例では、この入力要求は示されていません。
Oracle Data Pumpを使用したエクスポートおよびインポートはOracle Databaseユーティリティで説明されています。
表モード・エクスポートおよび表モード・インポート、ダンプ・ファイルの送受信の実行の例をそれぞれ示します。
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
ここで示す例では、スキーマ・モード・エクスポートおよびインポートを実行します。スキーマ
・モード・エクスポートを実行する際には、ロール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