この章では、Oracle XML DBで使用するために、Oracle Data Pumpを使用してXMLType表をエクスポートおよびインポートする方法を説明します。
|
注意: 元のエクスポート・ユーティリティおよびインポート・ユーティリティは、リリース11.1より前のバージョンへデータを移行するためにOracle Database 11gリリース1(11.1)でもサポートされています。 |
この章では、次の項目について説明します。
Oracle Data Pumpテクノロジにより、1つのデータベースから他のデータベースへのデータおよびメタデータの高速移動が可能になります。Oracle Data Pumpには、expdpおよびimpdpという2つのコマンドライン・クライアントがあり、それぞれデータ・ポンプ・エクスポート・ユーティリティおよびデータ・ポンプ・インポート・ユーティリティを起動します。expdpおよびimpdpクライアントは、PL/SQLパッケージDBMS_DATAPUMP で提供されているプロシージャを使用して、コマンドラインに入力されたパラメータを渡してエクスポートおよびインポートのコマンドを実行します。これらのパラメータにより、完全なデータベースまたはデータベースのサブセットの、データおよびメタデータのエクスポートとインポートが可能になります。
新しいデータ・ポンプ・エクスポート・ユーティリティおよびインポート・ユーティリティ(それぞれコマンドexpdpおよびimpdpにより起動)は、元のエクスポート・ユーティリティ(exp)およびインポート・ユーティリティ(imp)と外観は似ていますが、完全に別のものです。
|
関連項目: 元のExportユーティリティおよびImportユーティリティを使用する場合の詳細は、『Oracle Databaseユーティリティ』の「オリジナルのエクスポートおよびインポート」を参照してください。 |
データ・ポンプ・エクスポート・ユーティリティ(expdpで起動)は、ダンプ・ファイル・セットと呼ばれるオペレーティング・システムのファイル・セットにデータおよびメタデータをアンロードします。ダンプ・ファイル・セットは、データ・ポンプ・インポート・ユーティリティ(impdpで起動)でのみインポートできます。
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データが格納されたデータベースへインポートできます。
XML Schemaに基づくかどうかにかかわらず、XMLType表をエクスポートできます。表がXML Schemaに基づいている場合、表のデータを定義するために使用されたXML Schemaに依存します。構造化記憶域の場合、このXML Schemaに、データを格納するために使用されたSQLオブジェクト型への依存関係があることもあります。そのため、XML Schemaに基づくXMLType表を持つユーザーをエクスポートすると、次もエクスポートされます。
SQLオブジェクト型(構造化記憶域が使用されている場合)
XML Schema
XML表
次のガイドラインは、階層対応表(Oracle XML DBリポジトリ・データの基礎となる表)のエクスポートに適用されます。
階層対応表の行レベルのセキュリティ(RLS)ポリシーおよびパス索引トリガーはエクスポートされません。これらの表のインポート時には階層対応していません。
階層対応表の非表示列ACLOIDおよびOWNERIDはエクスポートされません。インポートされたデータベースではこれらの列の値が異なる場合があるため、それらの値を再初期化する必要があります。
トランスポータブル表領域機能を使用して、XML Schemaに基づくか基づかないかにかかわらず、Oracleデータベース間で表領域セットを移動できます。トランスポータブル表領域モードを使用してエクスポートをすると、指定された表領域セット内の表のメタデータ(および依存オブジェクト)のみがアンロードされます。その後、表領域のデータ・ファイルを他のOracleデータベースにコピーし、トランスポータブル表領域のインポートを実行できます。一般的に、ここでは、表領域の作成および表領域メタデータの再作成のみが行われるため、非常に高速に処理されます。
expdpのTRANSPORT_TABLESPACESパラメータを使用して、オブジェクトのメタデータがソース・データベースからターゲット・データベースへエクスポートされる対象となる表領域名のリストを指定します。
トランスポータブル表領域をエクスポートして、それをリリース・レベルの低いデータベースにインポートすることはできません。ターゲット・データベースのリリース・レベルは、ソース・データベースと同じかそれよりも高いレベルである必要があります。
エクスポート時には、Oracle XML DBリポジトリ階層情報が失われます(「階層対応(リポジトリ)表のエクスポート」を参照)。インポート時、インポートされるデータにより参照されているXML Schemaもすべてインポートされます。
Oracle XML DBでは、従来のリレーショナル・データベース構造ではなく、階層構造のデータベースにコンテンツを格納するフォルダリング・メカニズムがサポートされます。フォルダリングを使用すると、表名や列名などではなく、パス名およびURIを使用してデータ(リポジトリ・ソース)を参照できます。expdpまたはimpdpを使用する場合、このフォルダリング・メカニズムは完全にはサポートされません。
ただし、登録されたXML Schemaに基づくリソースの場合、データを格納するXMLType表はエクスポートおよびインポートできます。エクスポート中、XMLデータのみがエクスポートされ、Oracle XML DB Foldering階層内の関係は失われます。
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オブジェクト型が必要です。表モード・エクスポートを使用すると、表関連のメタデータおよびデータのみがエクスポートされます。これらのデータを正常にインポートできるようにするには、XML Schemaとオブジェクト型の両方が作成済であることを確認する必要があります。
この項に示す例では、次のようなデータベースを使用していることを前提としています。
サンプル・スキーマを持つデータベース
非構造化記憶域形式(CLOB)であるXMLType列を持つ表foo
READおよびWRITE権限がサンプル・スキーマに対して与えられているディレクトリ・オブジェクトdpump_dir
例36-1は、TABLESパラメータを使用して指定した表モード・エクスポートを示しています。これにより表fooがfoo.dmpダンプ・ファイルにエクスポートされます。
|
注意: 表モードでは、expdpコマンドでスキーマ接頭辞を指定しないと、エクスポート側のスキーマがデフォルトで使用されます。 |
例36-2は表モード・インポートを示しています。これにより、表fooがfoo.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は、すべてのオブジェクトをソース・スキーマからターゲット・スキーマにロードします。