15 データのトランスポート
データのトランスポートにより、1つのデータベースから他へデータを移動します。
- データのトランスポートについて
データベース、表領域、表、パーティションおよびサブパーティションのレベルでデータをトランスポートできます。 - データベースのトランスポート
新しいOracle Databaseインスタンスへデータベースをトランスポートできます。 - データベース間での表領域のトランスポート
表領域をデータベース間でトランスポートできます。 - データベース間での表、パーティションまたはサブパーティションのトランスポート
表、パーティションおよびサブパーティションをデータベース間でトランスポートできます。 - プラットフォーム間でのデータの変換
トランスポータブル操作を実行するときに、ソース・プラットフォームとターゲット・プラットフォームでendiannessが異なる場合は、トランスポートするデータをターゲット・プラットフォームの形式に変換する必要があります。ソース・プラットフォームとターゲット・プラットフォームでendiannessが同じ場合は、データ変換は必要ありません。データを変換するには、DBMS_FILE_TRANSFER
パッケージまたはRMANCONVERT
コマンドを使用できます。 - データファイルを転送するためのガイドライン
データファイルを転送するときにはガイドラインに従う必要があります。
親トピック: Oracle Databaseの構造と記憶域
15.1 データのトランスポートについて
データベース、表領域、表、パーティションおよびサブパーティションのレベルでデータをトランスポートできます。
- データのトランスポートの目的
データのトランスポートは、同じデータのエクスポート/インポートまたはアンロード/ロードを実行するよりはるかに高速です。高速になるのは、ユーザー定義の表領域では実際のデータをすべて含むデータファイルがターゲットの場所にコピーされ、データ・ポンプを使用してデータベース・オブジェクトのメタデータのみを新しいデータベースに転送するためです。 - データのトランスポート: 使用例
データのトランスポートは、次のような場合に役立ちます。 - プラットフォーム間でのデータ・トランスポート
プラットフォーム間でデータをトランスポートできます。 - データのトランスポートに関する一般的な制限事項
データのトランスポートに関する一般的な制限事項があります。また、フル・トランスポータブル・エクスポート/インポート、トランスポータブル表領域またはトランスポータブル表に固有の制限事項もあります。 - データのトランスポートの互換性に関する注意事項
データをトランスポートする場合、Oracle Databaseはターゲット・データベースが稼働する最低限の互換性レベルを計算します。
親トピック: データのトランスポート
15.1.1 データのトランスポートの目的
データのトランスポートは、同じデータのエクスポート/インポートまたはアンロード/ロードを実行するよりはるかに高速です。高速になるのは、ユーザー定義の表領域では実際のデータをすべて含むデータファイルがターゲットの場所にコピーされ、データ・ポンプを使用してデータベース・オブジェクトのメタデータのみを新しいデータベースに転送するためです。
データは、次のいずれかのレベルでトランスポートできます。
-
データベース
フル・トランスポータブル・エクスポート/インポート機能を使用すると、データベース全体を異なるデータベース・インスタンスに移動できます。
-
表領域
トランスポータブル表領域機能を使用すると、表領域セットをデータベース間で移動できます。
-
表、パーティションおよびサブパーティション
トランスポータブル表機能を使用すると、表、パーティションおよびサブパーティションのセットをデータベース間で移動できます。
トランスポータブル表領域およびトランスポータブル表では、ユーザー定義表領域に存在するデータのみがトランスポートされます。ただし、フル・トランスポータブル・エクスポート/インポートでは、ユーザー定義表領域と管理表領域(SYSTEM
やSYSAUX
など)の両方に存在するデータがトランスポートされます。フル・トランスポータブル・エクスポート/インポートでは、ユーザー定義表領域内に含まれるオブジェクトのメタデータ、および管理表領域内に含まれるユーザー定義オブジェクトのメタデータとデータの両方がトランスポートされます。特に、フル・トランスポータブル・エクスポート/インポートにおいては、エクスポート・ダンプ・ファイルにはユーザー定義表領域内に含まれるオブジェクトのメタデータのみが含められますが、これには管理表領域内に含まれるユーザー定義オブジェクトのメタデータとデータの両方が含まれます。
親トピック: データのトランスポートについて
15.1.2 データのトランスポート: 使用例
データのトランスポートは、次のような場合に役立ちます。
- フル・トランスポータブル・エクスポート/インポートの使用例
フル・トランスポータブル・エクスポート/インポート機能は、いくつかの使用例で役立ちます。 - トランスポータブル表領域またはトランスポータブル表の使用例
トランスポータブル表領域またはトランスポータブル表機能は、いくつかの使用例で役立ちます。
親トピック: データのトランスポートについて
15.1.2.1 フル・トランスポータブル・エクスポート/インポートの使用例
フル・トランスポータブル・エクスポート/インポート機能は、いくつかの使用例で役立ちます。
- 非CDBのCDBへの移動
マルチテナント・アーキテクチャを使用すると、Oracle Databaseを、ユーザーが作成した1つ以上のプラガブル・データベース(PDB)を含むマルチテナント・コンテナ・データベース(CDB)として機能させることができます。データベースをトランスポートすることによって、非CDBをデータベース(CDB)に移動できます。 - 新しいコンピュータ・システムへのデータベースの移動
フル・トランスポータブル・エクスポート/インポートを使用すると、データベースを別のコンピュータ・システムに移動できます。ハードウェアをアップグレードしたり、データベースを異なるプラットフォームに移動するために、データベースを新しいコンピュータ・システムに移動できます。 - Oracle Databaseの新しいリリースへのアップグレード
フル・トランスポータブル・エクスポート/インポートを使用すると、データベースをOracle Database 11g リリース2 (11.2.0.3)以上からOracle Database 19cにアップグレードできます。
親トピック: データのトランスポート: 使用例
15.1.2.1.1 非CDBのCDBへの移動
マルチテナント・アーキテクチャを使用すると、Oracle Databaseを、ユーザーが作成した1つ以上のプラガブル・データベース(PDB)を含むマルチテナント・コンテナ・データベース(CDB)として機能させることができます。データベースをトランスポートすることによって、非CDBをデータベース(CDB)に移動できます。
トランスポートされたデータベースは、CDBに関連付けられたプラガブル・データベース(PDB)になります。フル・トランスポータブル・エクスポート/インポートでは、Oracle Database 19c CDBに、Oracle Database 11g リリース2 (11.2.0.3)以上を効率的に移動できます。
関連項目:
-
エクスポート・ダンプ・ファイルを使用して非CDBをCDBにトランスポートする手順の説明は、エクスポート・ダンプ・ファイルを使用したデータベースのトランスポートを参照してください
-
ネットワーク経由で非CDBをCDBにトランスポートする手順の説明は、ネットワーク経由でのデータベースのトランスポートを参照してください。
15.1.2.1.2 新しいコンピュータ・システムへのデータベースの移動
フル・トランスポータブル・エクスポート/インポートを使用すると、データベースを別のコンピュータ・システムに移動できます。ハードウェアをアップグレードしたり、データベースを異なるプラットフォームに移動するために、データベースを新しいコンピュータ・システムに移動できます。
15.1.2.1.3 Oracle Databaseの新しいリリースへのアップグレード
フル・トランスポータブル・エクスポート/インポートを使用すると、データベースをOracle Database 11g リリース2 (11.2.0.3)以上からOracle Database 19cにアップグレードできます。
そのためには、Oracle Database 19cをインストールし、空のデータベースを作成します。次に、フル・トランスポータブル・エクスポート/インポートを使用して、Oracle Database 11gリリース2 (11.2.0.3)データベースをOracle Database 19cデータベースにトランスポートします。
15.1.2.2 トランスポータブル表領域またはトランスポータブル表の使用例
トランスポータブル表領域またはトランスポータブル表機能は、いくつかの使用例で役立ちます。
- トランスポータブル表領域またはトランスポータブル表に適用される使用例
一部の使用例では、トランスポータブル表領域またはトランスポータブル表のいずれかが役立ちます。また、トランスポータブル表領域のみが役立つ場合、またはトランスポータブル表のみが役立つ場合もあります。 - データ・ウェアハウスのためのパーティションのトランスポートと連結
トランスポータブル表およびトランスポータブル表領域を使用して、データ・ウェアハウスのためにパーティションを連結できます。 - 構造化データのCDでの公開
トランスポータブル表領域とトランスポータブル表の両方で、構造化データをCDで公開できます。 - 複数データベースで同じ表領域を読取り専用でマウントする方法
トランスポータブル表領域を使用して、表領域を読取り専用で複数のデータベースにマウントできます。 - 履歴データのアーカイブ
トランスポータブル表領域またはトランスポータブル表を使用する場合、トランスポートされるデータは任意のOracle Databaseにインポートできる自己完結型のファイル・セットです。そのため、トランスポータブル表領域およびトランスポータブル表の手順を使用して、企業データ・ウェアハウスに旧データまたは履歴データをアーカイブできます。 - トランスポータブル表領域を使用したTSPITRの実行
トランスポータブル表領域を使用して、表領域のPoint-in-Timeリカバリ(TSPITR)を実行できます。 - 個々の表のコピーまたは移動
トランスポータブル表を使用して、表を含む表領域全体をトランスポートしないで、表または表セットを別のデータベースに移動できます。トランスポータブル表を使用して、個々のパーティションとサブパーティションを別のデータベースにコピーまたは移動することもできます。
親トピック: データのトランスポート: 使用例
15.1.2.2.1 トランスポータブル表領域またはトランスポータブル表に適用される使用例
場合によっては、トランスポータブル表領域かトランスポータブル表のどちらかが役立つことがあります。また、トランスポータブル表領域のみが役立つ場合、またはトランスポータブル表のみが役立つ場合もあります。
表15-1に、各使用例で使用できる機能を示します。
表15-1 トランスポータブル表領域およびトランスポータブル表の使用例
使用例 | トランスポータブル表領域 | トランスポータブル表 |
---|---|---|
はい |
はい |
|
はい |
はい |
|
はい |
はい |
|
はい |
不可 |
|
不可 |
はい |
次の項では、これらの使用例について詳しく説明します。
15.1.2.2.2 データ・ウェアハウスのためのパーティションのトランスポートと連結
トランスポータブル表およびトランスポータブル表領域を使用して、データ・ウェアハウスのためにパーティションを連結できます。
標準的な企業のデータ・ウェアハウスには、1つ以上の大きいファクト表が含まれています。これらのファクト表は、企業データ・ウェアハウスを履歴データベースにするために、日付別にパーティション化されていることがあります。この場合、索引を作成すると、スター・クエリーを高速化できます。履歴データベースから最も古いパーティションを削除するたびにグローバル索引を再作成しなくても済むように、この種の履歴パーティション表についてローカル索引を作成することをお薦めします。
たとえば、1か月分のデータをデータ・ウェアハウスに毎月ロードする場合を考えます。データ・ウェアハウスには、sales
という大型のファクト表があり、次の列が含まれています。
CREATE TABLE sales (invoice_no NUMBER, sale_year INT NOT NULL, sale_month INT NOT NULL, sale_day INT NOT NULL) PARTITION BY RANGE (sale_year, sale_month, sale_day) (partition jan2011 VALUES LESS THAN (2011, 2, 1), partition feb2011 VALUES LESS THAN (2011, 3, 1), partition mar2011 VALUES LESS THAN (2011, 4, 1), partition apr2011 VALUES LESS THAN (2011, 5, 1), partition may2011 VALUES LESS THAN (2011, 6, 1), partition jun2011 VALUES LESS THAN (2011, 7, 1));
次のようにして、ローカルの非同一キー索引を作成します。
CREATE INDEX sales_index ON sales(invoice_no) LOCAL;
最初は、すべてのパーティションは空で、同じデフォルト表領域にあります。パーティションを毎月1つ作成し、パーティション表sales
に連結する必要があります。
現在が2011年7月で、7月分の売上データをパーティション表にロードするとします。ステージング・データベース内で、sales
表と同じ列の型を持つ表jul_sales
を作成します。必要に応じて、この表を作成する前に新しい表領域ts_jul
を作成し、この表領域に表を作成することもできます。表jul_sales
は、CREATE
TABLE
... AS
SELECT
文を使用して作成できます。jul_sales
を作成して移入した後に、sales
表内のローカル索引と同じ列に索引を付けて、この表の索引jul_sale_index
を作成することもできます。データ・ウェアハウス環境でステージング表を作成し、移入する方法の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。
表を作成し、索引を構築した後、次のいずれかの方法で表のデータをデータ・ウェアハウスにトランスポートします。
-
トランスポータブル表を使用して
jul_sales
表をデータ・ウェアハウスにトランスポートできます。 -
ts_jul
表領域を作成した場合は、トランスポータブル表領域を使用して表領域ts_jul
をデータ・ウェアハウスにトランスポートできます。
データ・ウェアハウスでは、7月分の売上データ用のsales
表にパーティションを追加します。これにより、ローカルの非同一キー索引用にも1つのパーティションが作成されます。
ALTER TABLE sales ADD PARTITION jul2011 VALUES LESS THAN (2011, 8, 1);
トランスポートされた表jul_sales
を新しいパーティションに変換して、表sales
に連結します。
ALTER TABLE sales EXCHANGE PARTITION jul2011 WITH TABLE jul_sales INCLUDING INDEXES WITHOUT VALIDATION;
この文により、新しいデータがパーティション表に連結され、7月分の売上データが新しいパーティションjul2011
に格納されます。また、索引jul_sale_index
がsales
表のローカル索引のパーティションに変換されます。この文では、構造情報を操作するだけであり、データベースのポインタを切り替えれば済むので、結果は即時に返されます。新しいパーティション内のデータが旧パーティション内のデータとオーバーラップしないことがわかっている場合は、WITHOUT VALIDATION
句を指定してください。この句を指定しないと、新しいパーティションの範囲を検証するために、そこに含まれる新しいデータがすべて検査されます。
sales
表のすべてのパーティションが同じステージング・データベースから取り込まれる場合(ステージング・データベースが破壊されることはありません)、変換文は常に成功します。ただし、一般に、パーティション表のデータが異なるデータベースから取り込まれる場合は、変換操作が失敗する可能性があります。たとえば、sales
のjan2011
パーティションが同じステージング・データベースから取り込まれていない場合は、前述の変換操作が失敗して次のエラーが返されることがあります。
ORA-19728: data object number conflict between table JUL_SALES and partition JAN2011 in table SALES
この競合を解決するには、次の文を発行して、競合しているパーティションを移動します。
ALTER TABLE sales MOVE PARTITION jan2011;
次に、変換操作を再試行してください。
交換が成功した後は、jul_sales
とjul_sale_index
を削除しても安全です(どちらも空になっています)。これで、7月分の売上データはデータ・ウェアハウスに正常にロードされたことになります。
15.1.2.2.3 構造化データのCDでの公開
トランスポータブル表領域とトランスポータブル表の両方で、構造化データをCDで公開できます。
データファイルやエクスポート・ダンプ・ファイルなどの公開するデータをCDにコピーできます。これにより、このCDを配布できます。トランスポータブル表領域を使用している場合は、データをCDにコピーする前にトランスポータブル・セットを生成する必要があります。
顧客は、このCDを受け取ったら、CDからディスク記憶域にデータファイルをコピーすることなく、既存のデータベースにCDの内容を追加できます。たとえば、Microsoft WindowsシステムでD:ドライブがCDドライブであるとします。データファイルcatalog.f
およびエクスポート・ダンプ・ファイルexpdat.dmp
のデータを次のようにインポートできます。
impdp user_name/password DUMPFILE=expdat.dmp DIRECTORY=dpump_dir
TRANSPORT_DATAFILES='D:\catalog.f'
CDは、データベースの稼働中に取り出すことができます。この場合、そのデータへの後続の問合せでは、CD上のデータファイルをオープンできないことを示すエラーが返されます。ただし、このデータベースの他の部分への操作は影響を受けません。CDをドライブに戻すと、データは再び読取り可能になります。
CDを取り出すのは、読取り専用表領域のデータファイルを削除するのと同じことです。データベースを停止して再起動すると、削除されたデータファイルが見つからず、データベースをオープンできないことを示すメッセージが表示されます(初期化パラメータREAD_ONLY_OPEN_DELAYED
をTRUE
に設定していない場合)。READ_ONLY_OPEN_DELAYED
がTRUE
に設定されている場合は、データを問い合せるときにのみ、このファイルが読み込まれます。したがって、CDからデータをトランスポートする場合は、そのCDがデータベースに永続的に連結されないかぎり、READ_ONLY_OPEN_DELAYED
初期化パラメータをTRUE
に設定します。
15.1.2.2.4 複数データベースで同じ表領域を読取り専用でマウントする方法
トランスポータブル表領域を使用すると、複数のデータベースで1つの表領域を読取り専用でマウントできます。
これにより、データを別々のディスクに複製しなくても、異なるデータベースで同じデータを共有できます。表領域のデータファイルは、どのデータベースからもアクセス可能にする必要があります。データベースの破損を回避するために、表領域はマウント先のすべてのデータベース内で読取り専用のままにしてください。表領域のデータファイルはオペレーティング・システム・レベルで読取り専用にする必要があります。
次に、複数のデータベースで同じ表領域を読取り専用でマウントする方法を2つ示します。
-
表領域の元のデータベースが表領域を共有するデータベースと異なる場合。
ソース・データベースでトランスポータブル・セットを生成し、すべてのデータベースからアクセス可能なディスクにそのトランスポータブル・セットを格納し、その後、表領域をマウントする各データベースにメタデータをインポートします。
-
表領域が、その表領域を共有するデータベースの1つに属する場合。
データファイルがすでに共有ディスクに格納されているとします。表領域がすでに格納されているデータベース上で、この表領域を読取り専用にしてトランスポータブル・セットを生成し、データファイルは共有ディスク上の同じ位置に残したまま、表領域を他のデータベースにインポートします。
ディスクを複数のコンピュータからアクセス可能にするには、いくつかの方法があります。クラスタ・ファイル・システムまたはRAWディスクのいずれかを使用できます。ネットワーク・ファイル・システム(NFS)を使用することも可能ですが、NFSの停止中にユーザーが共有表領域を問い合せると、NFS操作がタイムアウトになるまでデータベースが停止することがあります。
後で、一部のデータベースから読取り専用表領域を削除できます。読取り専用表領域を削除しても、表領域のデータファイルは変更されません。したがって、削除操作によって表領域が破損することはありません。表領域をマウントしているデータベースが1つしかない場合を除き、表領域は読取り/書込み可能にしないでください。
15.1.2.2.5 履歴データのアーカイブ
トランスポータブル表領域またはトランスポータブル表を使用する場合、トランスポートされるデータは任意のOracle Databaseにインポートできる自己完結型のファイル・セットです。そのため、トランスポータブル表領域およびトランスポータブル表の手順を使用して、企業データ・ウェアハウスに旧データまたは履歴データをアーカイブできます。
関連項目:
詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。
15.1.2.2.6 トランスポータブル表領域を使用したTSPITRの実行
トランスポータブル表領域を使用して、表領域のpoint-in-timeリカバリ(TSPITR)を実行できます。
関連項目:
トランスポータブル表領域を使用してTSPITRを実行する方法は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください
15.1.3 プラットフォーム間でのデータ・トランスポート
プラットフォーム間でデータをトランスポートできます。
プラットフォーム間でデータをトランスポートする機能を使用すると、次のことが可能です。
-
データベースをプラットフォーム間で移行できます。
-
コンテンツ・プロバイダは、簡単にかつ効率的に構造化データを公開し、別のプラットフォームでOracle Databaseを実行している顧客に配布できます。
-
データ・ウェアハウス環境からデータ・マート(多くの場合、小規模プラットフォームで実行されている)へのデータの配布を簡素化できます。
-
異なるオペレーティング・システムまたはプラットフォーム上のOracle Databaseインストール間で読取り専用表領域を共有できます。この場合、次の各項で説明するように、それらのプラットフォームおよびendiannessが同じプラットフォームからストレージ・システムにアクセスできることが前提となります。
多くのプラットフォーム(すべてではありません)では、クロス・プラットフォームでのデータのトランスポートがサポートされます。V$TRANSPORTABLE_PLATFORM
ビューを問い合せると、サポートされているプラットフォームを参照して、各プラットフォームのendian形式(バイトの並び順)を確認できます。次の問合せを実行すると、プラットフォーム間でのデータのトランスポートがサポートされているプラットフォームが表示されます。
COLUMN PLATFORM_NAME FORMAT A40 COLUMN ENDIAN_FORMAT A14 SELECT PLATFORM_ID, PLATFORM_NAME, ENDIAN_FORMAT FROM V$TRANSPORTABLE_PLATFORM ORDER BY PLATFORM_ID; PLATFORM_ID PLATFORM_NAME ENDIAN_FORMAT ----------- ---------------------------------------- -------------- 1 Solaris[tm] OE (32-bit) Big 2 Solaris[tm] OE (64-bit) Big 3 HP-UX (64-bit) Big 4 HP-UX IA (64-bit) Big 5 HP Tru64 UNIX Little 6 AIX-Based Systems (64-bit) Big 7 Microsoft Windows IA (32-bit) Little 8 Microsoft Windows IA (64-bit) Little 9 IBM zSeries Based Linux Big 10 Linux IA (32-bit) Little 11 Linux IA (64-bit) Little 12 Microsoft Windows x86 64-bit Little 13 Linux x86 64-bit Little 15 HP Open VMS Little 16 Apple Mac OS Big 17 Solaris Operating System (x86) Little 18 IBM Power Based Linux Big 19 HP IA Open VMS Little 20 Solaris Operating System (x86-64) Little 21 Apple Mac OS (x86-64) Little
ソース・プラットフォームとターゲット・プラットフォームが同じendiannessの場合、データはデータ変換なしでソース・プラットフォームからターゲット・プラットフォームにトランスポートされます。
ソース・プラットフォームとターゲット・プラットフォームでendiannessが異なる場合は、トランスポートするデータをターゲット・プラットフォームの形式に変換する必要があります。次のいずれかの方法使用してデータを変換できます。
-
DBMS_FILE_TRANSFER
パッケージのGET_FILE
またはPUT_FILE
プロシージャこれらのプロシージャのいずれかを使用して、ソース・プラットフォームとターゲット・プラットフォーム間でデータファイルを移動する場合、各データファイル内の各ブロックがターゲット・プラットフォームのendiannessに変換されます。変換はターゲット・プラットフォームで発生します。
-
RMAN
CONVERT
コマンドソース・プラットフォームまたはターゲット・プラットフォームでRMAN
CONVERT
コマンドを実行します。このコマンドにより、トランスポートするデータがターゲット・プラットフォームの形式に変換されます。ノート:
UNDOセグメントを含むデータファイルでは、異なるendian形式間でのデータファイルの変換はサポートされていません。
データファイルのデータを別のプラットフォームにトランスポートする前に、そのデータが属しているプラットフォームをデータファイル・ヘッダーで識別する必要があります異なるプラットフォームのOracle Databaseインストール間で読取り専用表領域をトランスポートするには、少なくとも1回データファイルを読取り/書込みにします。
関連項目:
親トピック: データのトランスポートについて
15.1.4 データのトランスポートに関する一般的な制限事項
データのトランスポートに関する一般的な制限事項があります。また、フル・トランスポータブル・エクスポート/インポート、トランスポータブル表領域またはトランスポータブル表に固有の制限事項もあります。
データをトランスポートする場合は、次の一般的な制限事項に注意してください。
-
ソース・データベースとターゲット・データベースで、互換性のあるデータベース文字セットを使用している必要があります。具体的には、次の内容のいずれかを満たしている必要があります。
-
ソース・データベースとターゲット・データベースのデータベース文字セットが同じです。
-
ソース・データベース文字セットがターゲット・データベース文字セットの厳格な(バイナリ)サブセットであり、かつ、次の3つの条件が満たされています。
-
ソース・データベースは、Oracle Database 10g リリース1 (10.1.0.3)以上です。
-
トランスポート対象の表領域に、文字長セマンティクスが使用される表の列が含まれていないか、またはソースとターゲットの両方のデータベースにおいて、データベース文字セットの最大文字幅が同じです。
-
トランスポート対象のデータには
CLOB
データ型の列が含まれていないか、またはソース・データベースとターゲット・データベースにおいて、データベース文字セットが両方ともシングルバイトであるか、両方ともマルチバイトです。
-
-
ソース・データベース文字セットがターゲット・データベース文字セットの厳格な(バイナリ)サブセットであり、かつ、次の2つの条件が満たされています。
-
ソース・データベースは、Oracle Database 10g リリース1 (10.1.0.3)以前です。
-
ソース・データベースとターゲット・データベース文字セットにおいて、最大文字幅が同じです。
-
ノート:
Oracle Databaseによって認識される文字セット間のサブセットとスーパーセットの関係は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
-
-
ソースとターゲットのデータベースで、互換性のある各国語文字セットを使用している必要があります。具体的には、次の内容のいずれかを満たしている必要があります。
-
ソースとターゲットのデータベースの各国語文字セットが同じです。
-
ソース・データベースはOracle Database 10g リリース1 (10.1.0.3)以上であり、トランスポート対象の表領域には
NCHAR
、NVARCHAR2
、NCLOB
のデータ型の列が含まれていません。
-
-
トランスポータブル・エクスポート操作を実行する場合は、次の制限が適用されます。
-
エクスポートを実行するユーザーのデフォルトの表領域を、転送対象となっている表領域のいずれかにすることはできません。
-
エクスポートを実行するユーザーのデフォルトの表領域を、書込み可能にする必要があります。
-
-
非CDBで、ターゲット・データベースに同じ名前の表領域が含まれている場合は、表領域をトランスポートできません。
CDBで、ターゲットのコンテナに同じ名前の表領域が含まれている場合は、表領域をトランスポートできません。ただし、異なるコンテナには同じ名前の表領域を格納できます。
REMAP_TABLESPACE
インポート・パラメータを使用して、データベース・オブジェクトを異なる表領域にインポートできます。または、トランスポート操作を実行する前に、トランスポート対象の表領域またはターゲットの表領域のいずれかの名前を変更できます。Oracle Database 12cリリース2 (12.2)以降では、Recovery Manager (RMAN)の
RECOVER
コマンドで、表領域を再マッピングしながら表を異なるスキーマに移動できます。詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。 -
CDBでは、デフォルトのデータ・ポンプ・ディレクトリ・オブジェクト
DATA_PUMP_DIR
はPDBでは機能しません。データ・ポンプ・エクスポートおよびインポートで使用する明示的なディレクトリ・オブジェクトをPDB内に定義する必要があります。 -
XMLTypeを含むデータのトランスポートには、次の制限事項があります。
-
ターゲット・データベースにXML DBがインストールされている必要があります。
-
XMLType表が参照するスキーマをXML DB標準スキーマにすることはできません。
-
トランスポートされたXMLType表のスキーマがターゲット・データベース内に存在しない場合は、スキーマがインポートおよび登録されます。ターゲット・データベース内にすでにスキーマが存在する場合は、インポート中にメッセージが表示されます。
-
XMLTypeを含むデータのメタデータは、データ・ポンプのみを使用してエクスポートおよびインポートする必要があります。
次の問合せでは、XMLTypeを含む表領域のリストが返されます。
select distinct p.tablespace_name from dba_tablespaces p, dba_xml_tables x, dba_users u, all_all_tables t where t.table_name=x.table_name and t.tablespace_name=p.tablespace_name and x.owner=u.username;
XMLTypeの詳細は、『Oracle XML DB開発者ガイド』を参照してください。
-
-
解釈がアプリケーション固有で、データベースに対して不透明なタイプ(
RAW
、BFILE
など)は、トランスポートできますが、クロス・プラットフォームのトランスポート操作では変換されません。このタイプの実際の構造はアプリケーションのみが認識するため、このタイプが新規プラットフォームに移動した後、アプリケーションではendiannessの問題に対処する必要があります。OPAQUE型を使用するタイプとオブジェクトも、直接的または間接的にこの制限の影響を受けます。 -
TIMESTAMP
WITH
LOCAL
TIME
ZONE
(TSLTZ)データを含む表がある表領域をタイム・ゾーンが異なるデータベース間でトランスポートする場合、TSLTZデータを含む表はトランスポートされません。エラー・メッセージで、トランスポートされなかった表の説明が示されます。ただし、表領域内のTSLTZデータを含まない表はトランスポートされます。データベースのタイム・ゾーンを確認するには、次の問合せを使用します。
SELECT DBTIMEZONE FROM DUAL;
ALTER
DATABASE
SQL文を使用すると、データベースのタイム・ゾーンを変更できます。データ・ポンプを使用すると、トランスポート操作の完了後に、TSLTZデータを含む表の従来のエクスポート/インポートを実行できます。
-
プラットフォーム間でのトランスポート操作の一部として、アナリティック・ワークスペースは使用できません。ソース・プラットフォームおよびターゲット・プラットフォームが別な場合、Data Pumpエクスポート/インポートを使用し、アナリティック・ワークスペースをエクスポートおよびインポートします。アナリティック・ワークスペースの詳細は、『Oracle OLAP DMLリファレンス』を参照してください。
ノート:
データ・ポンプ・エクスポート・ユーティリティexpdp
またはインポート・ユーティリティimpdp
は、Oracleサポート・サービスから要求された場合以外、SYSDBA
として起動しないでください。SYSDBA
は内部的に使用され、一般ユーザーとは異なる特別な機能を持ちます。
15.1.5 データのトランスポートの互換性に関する注意事項
データをトランスポートする場合、Oracle Databaseはターゲット・データベースが稼働する最低限の互換性レベルを計算します。
ターゲット・データベースが同じプラットフォームにある場合も、別のプラットフォームにある場合も、トランスポータブル表領域を使用して、同じ互換性または高い互換性が設定されているターゲット・データベースにソース・データベースから表領域または表をトランスポートできます。ソース・データベースの互換性レベルがターゲット・データベースの互換性レベルよりも高い場合、データ・トランスポート操作が失敗します。
次の表に、様々な使用例でのソース・データベースとターゲット・データベースの互換性の最低要件を示します。ソース・データベースとターゲット・データベースの互換性設定は同一である必要はありません。
表15-2 トランスポート・シナリオの互換性の最低要件
トランスポートの使用例 | ソースの最低のデータベース互換性 | ターゲットの最低のデータベース互換性 |
---|---|---|
フル・トランスポータブル・エクスポート/インポートを使用したデータベースのトランスポート |
12.0 (Oracle Database 12c以降のデータベースの 12 (11.2.0.3以降のデータベースの |
12.0 ( |
トランスポータブル表領域を使用した、同じプラットフォーム上のデータベース間での表領域のトランスポート |
8.0 ( |
8.0 ( |
トランスポータブル表領域を使用した、ターゲット・データベースとデータベース・ブロック・サイズが異なる表領域のトランスポート |
9.0 ( |
9.0 ( |
トランスポータブル表領域を使用した、異なるプラットフォーム上のデータベース間での表領域のトランスポート |
10.0 ( |
10.0 ( |
データベース間での表のトランスポート |
11.2.0 (Oracle Database 12c以降のデータベースの |
11.2.0 ( |
ノート:
-
フル・トランスポータブル・エクスポートおよびインポートを使用する場合、ソース・データベースはOracle Database 11gリリース2 (11.2.0.3)以降のデータベースであり、ターゲット・データベースはOracle Database 12c以降のデータベースである必要があります。
-
Oracle Database 11gリリース2 (11.2.0.3)以降のデータベースからOracle Database 12c以降のデータベースにトランスポートする場合は、
VERSION
Oracle Data Pumpエクスポート・パラメータを12
以上に設定する必要があります。 -
Oracle Database 19cデータベースからOracle Database 19cデータベース以降のリリースにトランスポートする場合は、
COMPATIBLE
初期化パラメータを19.0.0
以上に設定する必要があります。
親トピック: データのトランスポートについて
15.2 データベースのトランスポート
新しいOracle Databaseインスタンスへデータベースをトランスポートできます。
- フル・トランスポータブル・エクスポート/インポートの概要
フル・トランスポータブル・エクスポート/インポート機能を使用すると、データベース全体を別のOracle Databaseインスタンスにコピーできます。 - フル・トランスポータブル・エクスポート/インポートに関する制限事項
フル・トランスポータブル・エクスポート/インポートには制限事項があります。 - エクスポート・ダンプ・ファイルを使用したデータベースのトランスポート
エクスポート・ダンプ・ファイルを使用してデータベースをトランスポートできます。 - ネットワーク経由でのデータベースのトランスポート
ネットワーク経由でデータベースをトランスポートできます。
親トピック: データのトランスポート
15.2.1 フル・トランスポータブル・エクスポート/インポートの概要
フル・トランスポータブル・エクスポート/インポート機能を使用すると、データベース全体を別のOracle Databaseインスタンスにコピーできます。
データ・ポンプを使用すると、エクスポート・ダンプ・ファイルを生成し、必要に応じてダンプ・ファイルをターゲット・データベースにトランスポートした後、エクスポート・ダンプ・ファイルをインポートできます。また、データ・ポンプを使用すると、ネットワークを介してデータベースをコピーすることもできます。
トランスポートするデータベース内の表領域は、ディクショナリ管理表領域またはローカル管理表領域のいずれかになります。データベース内の表領域は、ターゲット・データベースの標準ブロック・サイズと同じブロック・サイズにする必要はありません。
ノート:
この方法でデータベースをトランスポートする場合は、エクスポートが完了するまで、データベース内のユーザー定義表領域を読取り専用モードにする必要があります。これが望ましくない場合は、トランスポータブル表領域をバックアップ機能から使用できます。詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。
関連項目:
親トピック: データベースのトランスポート
15.2.2 フル・トランスポータブル・エクスポート/インポートに関する制限事項
フル・トランスポータブル・エクスポート/インポートには制限事項があります。
フル・トランスポータブル・エクスポート/インポートに関する次の制限事項に注意してください。
-
フル・トランスポータブル・エクスポート/インポートには、「データのトランスポートに関する一般的な制限事項」で説明されている一般的な制限事項が適用されます。
-
フル・トランスポータブル・エクスポート/インポートでは、ダイレクト・パスや外部表などの従来のデータ・ポンプ・エクスポート/インポートを使用して、管理表領域内のユーザー定義のデータベース・オブジェクトをエクスポートおよびインポートできます。管理表領域は、Oracle Databaseに用意された
SYSTEM
表領域やSYSAUX
表領域などの非ユーザー表領域です。 -
フル・トランスポータブル・エクスポート/インポートでは、管理表領域(
SYSTEM
やSYSAUX
など)とユーザー定義表領域の両方で定義されているデータベース・オブジェクトはトランスポートできません。たとえば、パーティション表は、ユーザー定義表領域と管理表領域の両方に格納されることがあります。データベースにこのようなデータベース・オブジェクトがある場合は、それらのすべてのデータベース・オブジェクトが、管理表領域またはユーザー定義表領域のいずれかに格納されるように再定義した後、トランスポートできます。データベース・オブジェクトを再定義できない場合は、従来のデータ・ポンプ・エクスポート/インポートを使用できます。 -
フル・トランスポータブル・エクスポート/インポートを使用して、ネットワーク経由でデータベースをトランスポートする場合に、監査証跡情報自体がユーザー定義表領域に格納されていると、管理表領域(
SYSTEM
やSYSAUX
など)に格納されている表に対して監査を有効にできません。詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。 -
トランザクション・ガードが有効になっている場合、フル・トランスポータブル・データベース・インポートは実行できません。全データベースのインポートの間はトランザクション・ガードを無効にしてください。
関連トピック
親トピック: データベースのトランスポート
15.2.3 エクスポート・ダンプ・ファイルを使用したデータベースのトランスポート
エクスポート・ダンプ・ファイルを使用してデータベースをトランスポートできます。
次のタスクのリストでは、エクスポート・ダンプ・ファイルを使用したデータベースのトランスポート処理の概要を示します。各タスクの詳細は、後続の例で示します。
-
ソース・データベースで、各ユーザー定義表領域を読取り専用モードに構成し、データベースをエクスポートします。
次のパラメータが指定された値に設定されていることを確認します。
-
TRANSPORTABLE=ALWAYS
-
FULL=Y
ソース・データベースがOracle Database 11gデータベース(11.2.0.3以降)の場合、
VERSION
パラメータを12
以上に設定する必要があります。ソース・データベースに暗号化された表領域、または暗号化された列を含む表が格納された表領域が含まれている場合は、
ENCRYPTION_PWD_PROMPT=YES
を指定するか、ENCRYPTION_PASSWORD
パラメータを指定する必要があります。エクスポート・ダンプ・ファイルには、ユーザー定義表領域に格納されたオブジェクトのメタデータ、および管理表領域(
SYSTEM
やSYSAUX
など)に格納されたユーザー定義オブジェクトのメタデータとデータの両方が含まれています。 -
-
エクスポート・ダンプ・ファイルをトランスポートします。
エクスポート・ダンプ・ファイルをターゲット・データベースへアクセス可能な場所にコピーします。
-
データベース内のユーザー定義表領域すべてのデータファイルをトランスポートします。
データファイルをターゲット・データベースへアクセス可能な場所にコピーします。
ソース・プラットフォームとターゲット・プラットフォームが異なる場合は、
V$TRANSPORTABLE_PLATFORM
ビューに対して問合せを実行して、各プラットフォームのendian形式をチェックできます(「プラットフォーム間でのデータのトランスポート」を参照)。ソース・プラットフォームのendian形式がターゲット・プラットフォームのendian形式と異なる場合は、次のいずれかの方法を使用してデータファイルを変換します。
-
DBMS_FILE_TRANSFER
パッケージのGET_FILE
またはPUT_FILE
プロシージャを使用して、データファイルを転送します。これらのプロシージャを使用すると、データファイルがターゲット・プラットフォームのendian形式に自動的に変換されます。 -
RMAN
CONVERT
コマンドを使用して、データファイルをターゲット・プラットフォームのendian形式に変換します。ノート:
UNDOセグメントを含むデータファイルでは、異なるendian形式間でのデータファイルの変換はサポートされていません。
詳細は、「プラットフォーム間でのデータの変換」を参照してください。
-
-
(オプション)ソース・データベースでユーザー定義表領域を読取り/書込みモードに戻します。
-
ターゲット・データベースで、データベースをインポートします。
インポートが完了したとき、ユーザー定義表領域は読取り/書込みモードになります。
例
データベースをトランスポートするためのこれらのタスクは、この例で詳しく説明します。この例では、ソース・プラットフォームがSolarisで、ターゲット・プラットフォームがMicrosoft Windowsであることを前提としています。
また、ソース・プラットフォームには次のデータファイルと表領域があるとします。
表領域 | タイプ | データファイル |
---|---|---|
sales |
ユーザー定義 |
/u01/app/oracle/oradata/mydb/sales01.dbf |
customers |
ユーザー定義 |
/u01/app/oracle/oradata/mydb/cust01.dbf |
employees |
ユーザー定義 |
/u01/app/oracle/oradata/mydb/emp01.dbf |
SYSTEM |
管理 |
/u01/app/oracle/oradata/mydb/system01.dbf |
SYSAUX |
管理 |
/u01/app/oracle/oradata/mydb/sysaux01.dbf |
この例では、さらに次のことを想定しています。
-
ターゲット・データベースは、ソース・データベースからデータを移入する新しいデータベースです。ソース・データベースの名前は
mydb
です。 -
ソース・データベースとターゲット・データベースの両方がOracle Database 19cデータベースです。
エクスポート・ダンプ・ファイルを使用してデータベースをトランスポートするには、次のタスクを実行します。
- タスク1 エクスポート・ダンプ・ファイルの作成
-
次のステップを実行して、エクスポート・ダンプ・ファイルを生成します。
-
SQL*Plusを起動し、管理者として、あるいは
ALTER
TABLESPACE
またはMANAGE
TABLESPACE
システム権限を持つユーザーとしてデータベースに接続します。 -
データベース内のすべてのユーザー定義表領域を読取り専用にします。
ALTER TABLESPACE sales READ ONLY; ALTER TABLESPACE customers READ ONLY; ALTER TABLESPACE employees READ ONLY;
-
DATAPUMP_EXP_FULL_DATABASE
ロールを持つユーザーとしてデータ・ポンプ・エクスポート・ユーティリティを起動し、フル・トランスポータブル・エクスポート/インポート・オプションを指定します。SQL> HOST $ expdp user_name full=y dumpfile=expdat.dmp directory=data_pump_dir transportable=always logfile=export.log Password: password
トランスポータブル・オプションを使用するかどうかを設定する
TRANSPORTABLE=ALWAYS
を常に指定する必要があります。この例では、次のデータ・ポンプ・パラメータを指定します。
-
FULL
パラメータでは、データベース全体をエクスポートすることを指定します。 -
DUMPFILE
パラメータでは、作成する構造情報エクスポート・ダンプ・ファイルの名前をexpdat.dmp
と指定します。 -
DIRECTORY
パラメータでは、オペレーティング・システムまたはOracle Automatic Storage Managementのダンプ・ファイルの場所を示すディレクトリ・オブジェクトを指定します。DIRECTORY
オブジェクトはデータ・ポンプを起動する前に作成し、ディレクトリに対するREAD
およびWRITE
オブジェクト権限をエクスポート・ユーティリティを実行するユーザーに付与する必要があります。CREATE
DIRECTORY
コマンドの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。非CDBで、ディレクトリ・オブジェクト
DATA_PUMP_DIR
が自動的に作成されます。このディレクトリへの読取りおよび書込みアクセス権がDBA
ロールに(したがって、ユーザーSYS
およびSYSTEM
に)自動的に付与されます。ただし、ディレクトリ・オブジェクト
DATA_PUMP_DIR
は、PDBでは自動的には作成されません。このため、PDBにインポートする場合は、PDBにディレクトリ・オブジェクトを作成し、データ・ポンプを実行するときにそのディレクトリ・オブジェクトを指定します。関連項目:
-
DIRECTORY
パラメータを省略する場合のデフォルト・ディレクトリの詳細は、『Oracle Databaseユーティリティ』を参照してください。 -
PDBの詳細は、『Oracle Multitenant管理者ガイド』を参照してください
-
-
LOGFILE
パラメータでは、エクスポート・ユーティリティによって書き込まれるログ・ファイルのファイル名を指定します。この例では、ログ・ファイルの書込み先はダンプ・ファイルと同じディレクトリですが、ログ・ファイルは別の場所に書き込むことができます。
Oracle Database 11g リリース2 (11.2.0.3)またはOracle Database 11g以上のデータベースでフル・トランスポータブル・エクスポートを実行するには、次の例のように、
VERSION
パラメータを使用します。expdp user_name full=y dumpfile=expdat.dmp directory=data_pump_dir transportable=always version=12 logfile=export.log
フル・トランスポータブル・インポートは、Oracle Database 12c以降のデータベースでのみサポートされます。
ノート:
この例では、データ・ポンプ・ユーティリティを使用してエクスポートするのは、ユーザー定義表領域のデータ・ディクショナリの構造情報(メタデータ)のみです。実際のデータは管理表領域(
SYSTEM
およびSYSAUX
)についてのみアンロードされるため、この操作は大規模なユーザー定義表領域の場合にも比較的短時間で完了します。 -
-
ログ・ファイルでエラーを確認し、ターゲット・データベースにトランスポートする必要があるダンプ・ファイルとデータファイルをノートにとります。
expdp
により、これらのファイルの名前とパスが次のようなメッセージに出力されます。****************************************************************************** Dump file set for SYSTEM.SYS_EXPORT_TRANSPORTABLE_01 is: /u01/app/oracle/admin/mydb/dpdump/expdat.dmp ****************************************************************************** Datafiles required for transportable tablespace SALES: /u01/app/oracle/oradata/mydb/sales01.dbf Datafiles required for transportable tablespace CUSTOMERS: /u01/app/oracle/oradata/mydb/cust01.dbf Datafiles required for transportable tablespace EMPLOYEES: /u01/app/oracle/oradata/mydb/emp01.dbf
-
完了した後、終了してSQL*Plusに戻ります。
$ exit
関連項目:
データ・ポンプ・ユーティリティの使用方法は、『Oracle Databaseユーティリティ』を参照してください
-
- タスク2 エクスポート・ダンプ・ファイルのトランスポート
-
ダンプ・ファイルを、
DATA_PUMP_DIR
ディレクトリ・オブジェクトで指し示されているディレクトリ、または他の任意のディレクトリにトランスポートします。新しい場所はターゲット・データベースへアクセス可能であることが必要です。ターゲット・データベースで、次の問合せを実行して
DATA_PUMP_DIR
の場所を確認します。SELECT * FROM DBA_DIRECTORIES WHERE DIRECTORY_NAME = 'DATA_PUMP_DIR'; OWNER DIRECTORY_NAME DIRECTORY_PATH ---------- ---------------- ----------------------------------- SYS DATA_PUMP_DIR C:\app\orauser\admin\orawin\dpdump\
- タスク3 ユーザー定義表領域のデータファイルのトランスポート
-
データベースのユーザー定義表領域のデータファイルをターゲット・データベースへアクセス可能な場所にトランスポートします。
この例では、次のデータファイルをソース・データベースからターゲット・データベースに転送します。
-
sales01.dbf
-
cust01.dbf
-
emp01.dbf
ソース・プラットフォームとは異なるプラットフォームにデータベースをトランスポートする場合は、ソースおよびターゲット・プラットフォームの両方でプラットフォーム間のデータベース・トランスポートがサポートされているかどうかを確認し、それぞれのプラットフォームのendiannessを判別します。両方のプラットフォームのendiannessが同じ場合、変換は必要ありません。同じでない場合は、ソース・データベースまたはターゲット・データベースのどちらかでデータベース内の各表領域を変換する必要があります。
データベースを異なるプラットフォームにトランスポートする場合は、各プラットフォームで次の問合せを実行できます。問合せで行が返される場合、そのプラットフォームではプラットフォーム間の表領域トランスポートがサポートされています。
SELECT d.PLATFORM_NAME, ENDIAN_FORMAT FROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE d WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME;
ソース・プラットフォームでの問合せの結果は次のとおりです。
PLATFORM_NAME ENDIAN_FORMAT ---------------------------------- -------------- Solaris[tm] OE (32-bit) Big
ターゲット・プラットフォームからの問合せの結果は、次のとおりです。
PLATFORM_NAME ENDIAN_FORMAT ---------------------------------- -------------- Microsoft Windows IA (32-bit) Little
この例では、endian形式が異なることがわかります。したがって、この場合、データベースをトランスポートするには変換が必要です。
DBMS_FILE_TRANSFER
パッケージのGET_FILE
またはPUT_FILE
プロシージャを使用して、データファイルを転送します。これらのプロシージャを使用すると、データファイルがターゲット・プラットフォームのendian形式に自動的に変換されます。データファイルを、ターゲット・データベースの既存データファイルの場所にトランスポートします。UNIXおよびLinuxプラットフォームでは、この場所は通常、/u01/app/oracle/oradata/dbname/または+DISKGROUP/dbname/datafile/です。また、RMANCONVERT
コマンドを使用してデータファイルを変換できます。詳細は、「プラットフォーム間でのデータの変換」を参照してください。ノート:
表領域のendiannessを変換する必要がない場合は、任意のファイル転送方法を使用してファイルを転送できます。
-
- タスク4 (オプション)表領域を読取り/書込みモードに戻す
-
次のように、トランスポートした表領域をソース・データベースで再び読取り/書込みモードにします。
ALTER TABLESPACE sales READ WRITE; ALTER TABLESPACE customers READ WRITE; ALTER TABLESPACE employees READ WRITE;
インポート・プロセスが成功したことを先に確認するために、このタスクを延期することができます。
- タスク5 ターゲット・データベースでのデータベースのインポート
-
DATAPUMP_IMP_FULL_DATABASE
ロールを持つユーザーとしてデータ・ポンプ・インポート・ユーティリティを起動し、フル・トランスポータブル・エクスポート/インポート・オプションを指定します。impdp user_name full=Y dumpfile=expdat.dmp directory=data_pump_dir transport_datafiles= '/u01/app/oracle/oradata/mydb/sales01.dbf', '/u01/app/oracle/oradata/mydb/cust01.dbf', '/u01/app/oracle/oradata/mydb/emp01.dbf' logfile=import.log Password: password
この例では、次のデータ・ポンプ・パラメータを指定します。
-
FULL
パラメータでは、データベース全体をFULL
モードでインポートすることを指定します。 -
DUMPFILE
パラメータでは、インポートされるユーザー定義表領域のメタデータおよび管理表領域のメタデータとデータの両方が含まれるエクスポート・ファイルを指定します。 -
DIRECTORY
パラメータでは、エクスポート・ダンプ・ファイルの場所を識別するディレクトリ・オブジェクトを指定します。DIRECTORY
オブジェクトはデータ・ポンプを起動する前に作成し、ディレクトリに対するREAD
およびWRITE
オブジェクト権限をインポート・ユーティリティを実行するユーザーに付与する必要があります。CREATE
DIRECTORY
コマンドの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。非CDBで、ディレクトリ・オブジェクト
DATA_PUMP_DIR
が自動的に作成されます。このディレクトリへの読取りおよび書込みアクセス権がDBA
ロールに(したがって、ユーザーSYS
およびSYSTEM
に)自動的に付与されます。ただし、ディレクトリ・オブジェクト
DATA_PUMP_DIR
は、PDBでは自動的には作成されません。このため、PDBにインポートする場合は、PDBにディレクトリ・オブジェクトを作成し、データ・ポンプを実行するときにそのディレクトリ・オブジェクトを指定します。関連項目:
-
DIRECTORY
パラメータを省略する場合のデフォルト・ディレクトリの詳細は、『Oracle Databaseユーティリティ』を参照してください。 -
PDBの詳細は、『Oracle Multitenant管理者ガイド』を参照してください
-
-
TRANSPORT_DATAFILES
パラメータによって、インポートするすべてのデータファイルを識別します。多くのデータファイルがある場合は、
PARFILE
パラメータで指定されたパラメータ・ファイルでTRANSPORT_DATAFILES
パラメータを複数回指定できます。 -
LOGFILE
パラメータでは、インポート・ユーティリティによって書き込まれるログ・ファイルのファイル名を指定します。この例では、ログ・ファイルの書込み先はダンプ・ファイルの読取り元と同じディレクトリですが、ログ・ファイルは別の場所に書き込むことができます。
この文が正常に実行された後、インポート・ログ・ファイルをチェックして、予期しないエラーが発生していないことを確認します。
多数のデータファイルを扱う場合、データファイル名のリストを文の行で指定することは煩雑です。また、文の行制限を超える場合もあります。このような場合には、インポート・パラメータ・ファイルを使用できます。たとえば、次のようにしてデータ・ポンプ・インポート・ユーティリティを起動できます。
impdp user_name parfile='par.f'
たとえば、
par.f
には次の行が含まれる場合があります。FULL=Y DUMPFILE=expdat.dmp DIRECTORY=data_pump_dir TRANSPORT_DATAFILES= '/u01/app/oracle/oradata/mydb/sales01.dbf', '/u01/app/oracle/oradata/mydb/cust01.dbf', '/u01/app/oracle/oradata/mydb/emp01.dbf' LOGFILE=import.log
ノート:
-
インポート中に、メタデータのロードのためにユーザー定義表領域を一時的に読取り/書込みにすることがあります。インポート中にデータに対するユーザー変更が行われないことを確認してください。インポートが正常に完了したとき、すべてのユーザー定義表領域は読取り/書込みになります。
-
ネットワーク・データベース・インポートを実行する場合は、
TRANSPORTABLE
パラメータをalways
に設定する必要があります。 -
CDB内のPDBにインポートする場合は、ユーザー名の後にPDBの接続識別子を指定します。たとえば、PDBの接続識別子が
hrpdb
である場合は、Oracle Data Pumpインポート・ユーティリティを実行するとき、次のように入力します。impdp user_name@hrpdb ...
-
親トピック: データベースのトランスポート
15.2.4 ネットワーク経由でのデータベースのトランスポート
ネットワーク経由でデータベースをトランスポートできます。
ネットワーク経由でデータベースをトランスポートするには、NETWORK_LINK
パラメータを使用してインポートを実行しますが、インポートはデータベース・リンクを使用して実行され、ダンプ・ファイルは関連しません。
次のタスクのリストでは、ネットワーク経由での、データベースのトランスポート処理の概要を示します。各タスクの詳細は、後続の例で示します。
-
ターゲット・データベースからソース・データベースへデータベース・リンクを作成します。
インポート操作は、ターゲット・データベースで
DATAPUMP_IMP_FULL_DATABASE
ロールを持つユーザーが実行する必要があり、データベース・リンクは、ソース・データベースでDATAPUMP_EXP_FULL_DATABASE
ロールを持つユーザーに接続する必要があります。ソース・データベースのユーザーは、SYSDBA
管理権限を持つユーザーにすることはできません。データベース・リンクが接続ユーザー・データベース・リンクである場合は、ターゲット・データベース上のユーザーをSYSDBA
管理権限を持つユーザーにはできません。接続ユーザー・データベース・リンクの詳細は、「データベース・リンクのユーザー」を参照してください。 -
ソース・データベースで、データベース内のユーザー定義表領域を読取り専用にします。
-
データベース内のユーザー定義表領域すべてのデータファイルをトランスポートします。
データファイルをターゲット・データベースへアクセス可能な場所にコピーします。
ソース・プラットフォームとターゲット・プラットフォームが異なる場合は、
V$TRANSPORTABLE_PLATFORM
ビューに対して問合せを実行して、各プラットフォームのendian形式をチェックできます(「プラットフォーム間でのデータのトランスポート」を参照)。ソース・プラットフォームのendian形式がターゲット・プラットフォームのendian形式と異なる場合は、次のいずれかの方法を使用してデータファイルを変換します。
-
DBMS_FILE_TRANSFER
パッケージのGET_FILE
またはPUT_FILE
プロシージャを使用して、データファイルを転送します。これらのプロシージャを使用すると、データファイルがターゲット・プラットフォームのendian形式に自動的に変換されます。 -
RMAN
CONVERT
コマンドを使用して、データファイルをターゲット・プラットフォームのendian形式に変換します。ノート:
UNDOセグメントを含むデータファイルでは、異なるendian形式間でのデータファイルの変換はサポートされていません。
詳細は、「プラットフォーム間でのデータの変換」を参照してください。
-
-
ターゲット・データベースで、データベースをインポートします。
データ・ポンプ・ユーティリティを起動して、ユーザー定義表領域のメタデータおよび管理表領域のメタデータとデータの両方をインポートします。
次のパラメータが指定された値に設定されていることを確認します。
-
TRANSPORTABLE=ALWAYS
-
TRANSPORT_DATAFILES=
list_of_datafiles
-
FULL=Y
-
NETWORK_LINK=
source_database_link
source_database_link
をソース・データベースへのデータベース・リンクの名前に置き換えます。 -
VERSION=12
ソース・データベースがOracle Database 11g リリース2 (11.2.0.3)またはOracle Database 11g以上のデータベースである場合、
VERSION
パラメータが必要で、これを12
に設定する必要があります。ソース・データベースがOracle Database 12c以降のデータベースの場合は、VERSION
パラメータは必要ありません。
ソース・データベースに暗号化された表領域、または暗号化された列を含む表が格納された表領域が含まれている場合は、
ENCRYPTION_PWD_PROMPT=YES
を指定するか、ENCRYPTION_PASSWORD
パラメータを指定する必要があります。データ・ポンプ・ネットワーク・インポートでは、ユーザー定義表領域に格納されたオブジェクトのメタデータ、および管理表領域(
SYSTEM
やSYSAUX
など)に格納されたユーザー定義オブジェクトのメタデータとデータの両方がコピーされます。インポートが完了したとき、ユーザー定義表領域は読取り/書込みモードになります。
-
-
(オプション)ソース・データベースでユーザー定義表領域を読取り/書込みモードに戻します。
例
データベースをトランスポートするタスクについては、次のデータファイルと表領域を想定した例で詳細に説明します。
表領域 | タイプ | データファイル |
---|---|---|
sales |
ユーザー定義 |
/u01/app/oracle/oradata/mydb/sales01.dbf |
customers |
ユーザー定義 |
/u01/app/oracle/oradata/mydb/cust01.dbf |
employees |
ユーザー定義 |
/u01/app/oracle/oradata/mydb/emp01.dbf |
SYSTEM |
管理 |
/u01/app/oracle/oradata/mydb/system01.dbf |
SYSAUX |
管理 |
/u01/app/oracle/oradata/mydb/sysaux01.dbf |
この例では、さらに次のことを想定しています。
-
ターゲット・データベースは、ソース・データベースからデータを移入する新しいデータベースです。ソース・データベースの名前は
sourcedb
です。 -
ソース・データベースとターゲット・データベースは、endiannessが同一の同じプラットフォームで実行されている必要があります。
プラットフォームのendiannessをチェックするには、次の問合せを実行します。
SELECT d.PLATFORM_NAME, ENDIAN_FORMAT FROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE d WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME;
-
sales
表領域は暗号化されています。他の表領域は暗号化されていません。 -
ソース・データはOracle Database 11g リリース2 (11.2.0.3)データベースで、ターゲット・データベースはOracle Database 19cデータベースです。
ノート:
この例では、Oracle Database 11g リリース2 (11.2.0.3)をCDB内の新しいOracle Database 19c PDBにトランスポートするために必要なタスクを説明しています。これらのタスクでは、非CDBを別の非CDBにトランスポートする方法も示されています。
関連項目:
ネットワーク経由でデータベースをトランスポートするには、次のタスクを実行します。
- タスク1 ターゲット・データベースからソース・データベースへのデータベース・リンクの作成
-
次のステップを実行して、ターゲット・データベースからソース・データベースへデータベース・リンクを作成します。
-
ソース・データベースとターゲット・データベースの間にネットワーク接続が構成されていることを確認します。
詳細は、『Oracle Database Net Services管理者ガイド』を参照してください。
-
SQL*Plusを起動し、データ・ポンプ・インポートによってデータベースをトランスポートする管理者としてターゲット・データベースに接続します。データベースをトランスポートするには、このユーザーに
DATAPUMP_IMP_FULL_DATABASE
ロールが必要です。手順は、「SQL*Plusを使用したデータベースへの接続」を参照してください。
-
データベース・リンクを作成します。
CREATE PUBLIC DATABASE LINK sourcedb USING 'sourcedb';
USING句でソース・データベースのサービス名を指定します。
インポート操作中、データベース・リンクをソース・データベースで
DATAPUMP_EXP_FULL_DATABASE
ロールを持つユーザーに接続する必要があります。ソース・データベースのユーザーは、SYSDBA
管理権限を持つユーザーにすることはできません。
-
- タスク2 ユーザー定義表領域を読取り専用にする
-
ステップは次のとおりです。
-
SQL*Plusを起動し、管理者として、あるいは
ALTER
TABLESPACE
またはMANAGE
TABLESPACE
システム権限を持つユーザーとしてソース・データベースに接続します。手順は、「SQL*Plusを使用したデータベースへの接続」を参照してください。
-
データベース内のすべてのユーザー定義表領域を読取り専用にします。
ALTER TABLESPACE sales READ ONLY; ALTER TABLESPACE customers READ ONLY; ALTER TABLESPACE employees READ ONLY;
-
- タスク3 ユーザー定義表領域のデータファイルのトランスポート
-
データファイルを、ターゲット・データベースの既存データファイルの場所にトランスポートします。
UNIXおよびLinuxプラットフォームでは、この場所は通常、/u01/app/oracle/oradata/dbname/または+DISKGROUP/dbname/datafile/です。
この例では、次のデータファイルをソース・データベースからターゲット・データベースに転送します。
-
sales01.dbf
-
cust01.dbf
-
emp01.dbf
関連項目:
-
- タスク4 ターゲット・データベースでのデータベースのインポート
-
DATAPUMP_IMP_FULL_DATABASE
ロールを持つユーザーとしてデータ・ポンプ・インポート・ユーティリティを起動し、フル・トランスポータブル・エクスポート/インポート・オプションを指定します。impdp user_name full=Y network_link=sourcedb transportable=always transport_datafiles= '/u01/app/oracle/oradata/mydb/sales01.dbf', '/u01/app/oracle/oradata/mydb/cust01.dbf', '/u01/app/oracle/oradata/mydb/emp01.dbf' encryption_pwd_prompt=YES version=12 logfile=import.log Password: password
この例では、次のデータ・ポンプ・パラメータを指定します。
-
FULL
パラメータでは、データベース全体をFULL
モードでインポートすることを指定します。 -
NETWORK_LINK
パラメータでは、ネットワーク・インポートに使用されるデータベース・リンクを指定します。 -
TRANSPORTABLE
パラメータでは、インポートでトランスポータブル・オプションを使用することを指定します。 -
TRANSPORT_DATAFILES
パラメータによって、インポートするすべてのデータファイルを識別します。多くのデータファイルがある場合は、
PARFILE
パラメータで指定されたパラメータ・ファイルでTRANSPORT_DATAFILES
パラメータを複数回指定できます。 -
ENCRYPTION_PWD_PROMPT
パラメータは、暗号化パスワードの入力を要求するようデータ・ポンプに指示し、データ・ポンプはネットワーク接続経由で送信されるデータとメタデータを暗号化します。暗号化された表領域または暗号化された列を含む表がインポート操作に含まれている場合は、ENCRYPTION_PWD_PROMPT
パラメータまたはENCRYPTION_PASSWORD
パラメータが必須になります。 -
ソース・データベースは、Oracle Database 11g リリース2 (11.2.0.3)またはOracle Database 11g以上のデータベースであるため、
VERSION
パラメータを12
に設定します。 -
LOGFILE
パラメータでは、インポート・ユーティリティによって書き込まれるログ・ファイルのファイル名を指定します。
この文が正常に実行された後、インポート・ログ・ファイルをチェックして、予期しないエラーが発生していないことを確認します。
多数のデータファイルを扱う場合、データファイル名のリストを文の行で指定することは煩雑です。また、文の行制限を超える場合もあります。このような場合には、インポート・パラメータ・ファイルを使用できます。
暗号化された表領域または暗号化された列を含む表がインポート操作に含まれている場合も、インポート・パラメータ・ファイルを使用することをお薦めします。この場合、インポート・パラメータ・ファイルで
ENCRYPTION_PWD_PROMPT=YES
を指定します。たとえば、次のようにしてデータ・ポンプ・インポート・ユーティリティを起動できます。
impdp user_name parfile='par.f'
たとえば、
par.f
には次の行が含まれる場合があります。FULL=Y NETWORK_LINK=sourcedb TRANSPORTABLE=always TRANSPORT_DATAFILES= '/u01/app/oracle/oradata/mydb/sales01.dbf', '/u01/app/oracle/oradata/mydb/cust01.dbf', '/u01/app/oracle/oradata/mydb/emp01.dbf' ENCRYPTION_PWD_PROMPT=YES VERSION=12 LOGFILE=import.log
ノート:
関連項目:
インポート・ユーティリティの使用方法は、『Oracle Databaseユーティリティ』を参照してください。
-
- タスク5 (オプション)ユーザー定義表領域を読取り/書込みモードに戻す
-
次のように、ユーザー定義表領域をソース・データベースで再び読取り/書込みモードにします。
ALTER TABLESPACE sales READ WRITE; ALTER TABLESPACE customers READ WRITE; ALTER TABLESPACE employees READ WRITE;
インポート・プロセスが成功したことを先に確認するために、このタスクを延期することができます。
親トピック: データベースのトランスポート
15.3 データベース間での表領域のトランスポート
データベース間で表領域をトランスポートできます。
ノート:
トランスポータブル表領域セットを別のプラットフォーム上のOracle Databaseにインポートするには、両方のデータベースの互換性が10.0.0以上に設定されている必要があります。リリース・レベルをまたいだ表領域のトランスポートにおけるデータベース互換性の詳細は、「データのトランスポートの互換性に関する注意事項」を参照してください。
- トランスポータブル表領域の概要
トランスポータブル表領域機能を使用すると、表領域セットを別のOracle Databaseにコピーできます。 - トランスポータブル表領域に関する制限事項
この項では、トランスポータブル表領域の制限事項を示します。 - データベース間での表領域のトランスポート
表領域または表領域セットをデータベース間でトランスポートできます。
親トピック: データのトランスポート
15.3.1 トランスポータブル表領域の概要
トランスポータブル表領域機能を使用すると、表領域セットを別のOracle Databaseにコピーできます。
トランスポートする表領域は、ディクショナリ管理表領域またはローカル管理表領域のいずれかになります。トランスポートする表領域は、ターゲット・データベースの標準ブロック・サイズと同じブロック・サイズにする必要はありません。これらの使用例の説明は、「データのトランスポート: 使用例」を参照してください。
表領域をトランスポートする方法は、次の2通りあります。
-
手動で、この項で説明されているステップを実行します。これには、SQL*Plusおよびデータ・ポンプへのコマンドの発行が含まれます。
-
Oracle Enterprise Manager Cloud Controlの「表領域のトランスポート」ウィザードの使用。
「表領域のトランスポート」ウィザードを実行するには:
-
DATAPUMP_EXP_FULL_DATABASE
ロールを持つユーザーでCloud Controlにログインします。 -
データベース・ホームページにアクセスします。
-
「スキーマ」メニューから、「データベースのエクスポート/インポート」を選択し、次に「表領域のトランスポート」を選択します。
-
ノート:
-
この方法で表領域をトランスポートする場合は、トランスポート処理が完了するまで、トランスポート対象の表領域を読取り専用モードにする必要があります。これが望ましくない場合は、トランスポータブル表領域をバックアップ機能から使用できます。詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。
-
トランスポータブル表領域にはデータ・ポンプを使用する必要があります。XMLTypeデータをOracle Database 10g リリース2 (10.2)以前のデータベースに下位移行できるのは、元のインポート・ユーティリティ(IMP)とエクスポート・ユーティリティ(EXP)を使用できる環境がある場合のみです。これらのユーティリティの詳細は『Oracle Databaseユーティリティ』を、XMLTypesの詳細は『Oracle XML DB開発者ガイド』を参照してください。
関連項目:
-
データ・ウェアハウス環境でトランスポータブル表領域を使用する方法の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。
親トピック: データベース間での表領域のトランスポート
15.3.2 トランスポータブル表領域に関する制限事項
この項では、トランスポータブル表領域の制限事項を示します。
トランスポータブル表領域に関する次の制限事項に注意してください。
-
トランスポータブル表領域には、「データのトランスポートに関する一般的な制限事項」で説明されている一般的な制限事項が適用されます。
-
表領域セットをトランスポートする場合、基礎になるオブジェクトを持つオブジェクト(マテリアライズド・ビューなど)またはオブジェクトを含むオブジェクト(パーティション表など)は、それらのオブジェクトがすべて表領域セットに含まれている場合のみトランスポートできます。
-
トランスポータブル表領域では、タイム・ゾーン・ファイルのバージョンが異なるプラットフォーム間で、
TIMESTAMP
WITH
TIMEZONE
(TSTZ)データを含む表をトランスポートできません。トランスポータブル表領域操作では、これらの表をスキップします。これらの表は、従来と同じようにエクスポートおよびインポートできます。詳細は、『Oracle Databaseユーティリティ』を参照してください。
-
トランスポータブル表領域セットに、
SYSTEM
やSYSAUX
などの管理表領域を含めることはできません。 -
トランスポータブル表領域には、TDE列暗号化を使用して暗号化された列を含む表を含めることはできません
-
表領域がTDEを使用して暗号化されている場合、この表領域は同じエンディアン形式を使用するプラットフォームにのみトランスポートできます。エンディアン間で移動させる必要がある場合は、表領域を復号化してトランスポートし、再暗号化する必要があります。Oracle Databaseリリース12.2以降では、これらの操作はオンラインで実行できます。
親トピック: データベース間での表領域のトランスポート
15.3.3 データベース間での表領域のトランスポート
データベース間で表領域または表領域のセットをトランスポートできます。
次のタスクのリストでは、表領域のトランスポート処理の概要を示します。各タスクの詳細は、後続の例で示します。
例15-1 例
表領域をトランスポートするタスクについては、次のデータファイルと表領域を想定した例で詳細に説明します。
表領域 | データファイル |
---|---|
|
|
|
|
- タスク1: 自己完結型の表領域セットの選択
トランスポータブル・セットのデータベース・オブジェクトとトランスポータブル・セット外のデータベース・オブジェクトの間に、論理的または物理的な依存関係がある場合があります。トランスポートできるのは、自己完結型である表領域セットのみです。つまり、表領域セット内のデータベース・オブジェクトは、その表領域セット外のデータベース・オブジェクトのいずれにも依存しません。 - タスク2: トランスポータブル表領域セットの生成
トランスポートする表領域セットが自己完結型であることを確認した後で、トランスポータブル表領域セットを生成します。 - タスク3: エクスポート・ダンプ・ファイルのトランスポート
ダンプ・ファイルを、DATA_PUMP_DIR
ディレクトリ・オブジェクトで指し示されているディレクトリ、または他の任意のディレクトリにトランスポートします。新しい場所はターゲット・データベースへアクセス可能であることが必要です。 - タスク4: 表領域セットのトランスポート
表領域のデータファイルをターゲット・データベースへアクセス可能なディレクトリにトランスポートします。 - タスク5: (オプション)表領域を読取り/書込みモードに戻す
トランスポートした表領域をソース・データベースで再び読取り/書込みモードにします。 - タスク6: 表領域セットのインポート
トランスポータブル表領域に対する操作を完了するために、表領域セットをインポートします。
親トピック: データベース間での表領域のトランスポート
15.3.3.1 タスク1: 自己完結型の表領域セットの選択
トランスポータブル・セットのデータベース・オブジェクトとトランスポータブル・セット外のデータベース・オブジェクトの間に、論理的または物理的な依存関係がある場合があります。トランスポートできるのは、自己完結型である表領域セットのみです。つまり、表領域セット内のデータベース・オブジェクトは、その表領域セット外のデータベース・オブジェクトのいずれにも依存しません。
次に、自己完結した表領域に違反する例を示します。
-
表領域セット内に、そのセットに含まれない表に関する索引が含まれている場合。
ノート:
表に対応する索引が表領域セットの外部にある場合は、違反になりません。
-
パーティション表の一部が表領域セットに含まれている場合。
コピーする表領域セットは、パーティション化した表のすべてのパーティションが含まれている状態、またはまったく含まれていない状態にしてください。パーティション表のサブセットをトランスポートするには、パーティションを表に変換する必要があります。
パーティションの変換の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。
-
参照整合性制約がセット境界を越えて別の表を指している場合。
表領域セットをトランスポートするときには、参照整合性制約を含めるかどうかを選択できます。ただし、そうすることによって、表領域セットの自己完結性に影響を与える場合があります。制約をトランスポートしなければ、その制約はポインタとはみなされません。
-
表領域セット内の表に、そのセットに含まれない
LOB
を指すLOB
列が含まれている場合 -
ユーザーAが登録されたXML DBスキーマ(*.xsd)にユーザーBが登録されたグローバル・スキーマをインポートする際、ユーザーAのデフォルト表領域が表領域A、ユーザーBのデフォルト表領域が表領域Bで、表領域Aのみが表領域セットに含まれている場合。
表領域セットが自己完結型かどうかを判別するには、オラクル社が提供するDBMS_TTS
パッケージのTRANSPORT_SET_CHECK
プロシージャを実行します。このプロシージャを実行するには、EXECUTE_CATALOG_ROLE
ロール(最初はSYS
に付与されている)を付与されている必要があります。
DBMS_TTS.TRANSPORT_SET_CHECK
プロシージャを実行するときは、自己完結かどうかを調べるトランスポータブル・セットの表領域のリストを指定します。制約を含むかどうかを指定することもできます。厳密または完全な完結であるかを調べる場合は、TTS_FULL_CHECK
パラメータをTRUE
に設定する必要があります。
厳密または完全な完結のチェックは、トランスポータブル・セットから外部への参照のみではなく、外部からトランスポータブル・セットへの参照も捕捉する必要がある場合に実行します。依存オブジェクトがトランスポータブル・セットに完全に含まれているか、またはトランスポータブル・セットの外部にのみ存在することが必要な場合は、表領域のPoint-in-Timeリカバリ(TSPITR)を実行します。
たとえば、表t
を含んでいるが、その索引i
を含んでいない表領域に対してTSPITRを実行すると、トランスポート後に索引とデータの整合性がなくなるため、これは違反になります。完全完結チェックを実行することにより、トランスポータブル・セットからの依存関係またはトランスポータブル・セットへの依存関係がないことが保証されます。詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』のTSPITRの例を参照してください。
ノート:
デフォルトでは、トランスポータブル表領域は、完全完結しているかどうかではなく自己完結しているかどうかがチェックされます。
次の文を使用して、表領域sales_1
およびsales_2
が自己完結しているかどうかを、参照整合性制約を考慮して(TRUE
を指定して)調べます。
EXECUTE DBMS_TTS.TRANSPORT_SET_CHECK('sales_1,sales_2', TRUE);
DBMS_TTS.TRANSPORT_SET_CHECK
プロシージャを実行した後に、TRANSPORT_SET_VIOLATIONS
ビューからすべての違反を選択して表示できます。表領域セットが自己完結している場合、このビューは空になります。次の例は、表領域セットの境界を超えている外部キー定数dept_fk
と、表領域セットに部分的に含まれているパーティション表jim.sales
という、2つの違反がある場合を示しています。
SELECT * FROM TRANSPORT_SET_VIOLATIONS; VIOLATIONS --------------------------------------------------------------------------- Constraint DEPT_FK between table JIM.EMP in tablespace SALES_1 and table JIM.DEPT in tablespace OTHER Partitioned table JIM.SALES is partially contained in the transportable set
sales_1
およびsales_2
をトランスポータブルにする前に、これらの違反を解決する必要があります。次のタスクで説明するように、整合性制約違反を回避するための選択肢の1つとして、整合性制約をエクスポートしない方法があります。
関連項目:
-
DBMS_TTS
パッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。 -
TSPITRにおける
DBMS_TTS
パッケージの使用の詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。
親トピック: データベース間での表領域のトランスポート
15.3.3.2 タスク2: トランスポータブル表領域セットの生成
トランスポートする表領域セットが自己完結型であることを確認した後で、トランスポータブル表領域セットを生成します。
トランスポータブル表領域セットを生成するには:
親トピック: データベース間での表領域のトランスポート
15.3.3.3 タスク3: エクスポート・ダンプ・ファイルのトランスポート
ダンプ・ファイルを、DATA_PUMP_DIR
ディレクトリ・オブジェクトで指し示されているディレクトリ、または他の任意のディレクトリにトランスポートします。新しい場所はターゲット・データベースへアクセス可能であることが必要です。
ターゲット・データベースで、次の問合せを実行してDATA_PUMP_DIR
の場所を確認します。
SELECT * FROM DBA_DIRECTORIES WHERE DIRECTORY_NAME = 'DATA_PUMP_DIR'; OWNER DIRECTORY_NAME DIRECTORY_PATH ---------- ---------------- ----------------------------------- SYS DATA_PUMP_DIR C:\app\orauser\admin\orawin\dpdump\
親トピック: データベース間での表領域のトランスポート
15.3.3.4 タスク4: 表領域セットのトランスポート
表領域のデータファイルをターゲット・データベースへアクセス可能なディレクトリにトランスポートします。
この例では、次のファイルをソース・データベースからターゲット・データベースに転送します。
-
sales_101.dbf
-
sales_201.dbf
ソース・プラットフォームとは異なるプラットフォームに表領域セットをトランスポートする場合は、ソースおよびターゲット・プラットフォームの両方でプラットフォーム間の表領域トランスポートがサポートされているかどうかを確認し、それぞれのプラットフォームのendiannessを判別します。両方のプラットフォームのendiannessが同じ場合、変換は必要ありません。同じでない場合は、ソース・データベースまたはターゲット・データベースでデータ変換を実行する必要があります。
sales_1
およびsales_2
を異なるプラットフォームにトランスポートする場合は、各プラットフォームで次の問合せを実行できます。問合せで行が返される場合、そのプラットフォームではプラットフォーム間の表領域トランスポートがサポートされています。
SELECT d.PLATFORM_NAME, ENDIAN_FORMAT FROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE d WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME;
ソース・プラットフォームでの問合せの結果は次のとおりです。
PLATFORM_NAME ENDIAN_FORMAT ---------------------------------- -------------- Solaris[tm] OE (32-bit) Big
ターゲット・プラットフォームからの結果は、次のとおりです。
PLATFORM_NAME ENDIAN_FORMAT ---------------------------------- -------------- Microsoft Windows IA (32-bit) Little
この例では、endian形式が異なることがわかります。したがって、この場合、データベースをトランスポートするには変換が必要です。DBMS_FILE_TRANSFER
パッケージのGET_FILE
またはPUT_FILE
プロシージャを使用して、データファイルを転送します。これらのプロシージャを使用すると、データファイルがターゲット・プラットフォームのendian形式に自動的に変換されます。データファイルを、ターゲット・データベースの既存データファイルの場所にトランスポートします。UNIXおよびLinuxプラットフォームでは、この場所は通常、/u01/app/oracle/oradata/dbname/または+DISKGROUP/dbname/datafile/です。または、データファイルを変換するために使用することもできます。
ノート:
-
RMAN
CONVERT
コマンドを使用する場合、UNDOセグメントを含むデータファイルでは、異なるendian形式間でのデータファイルの変換はサポートされていません。 -
表領域のendiannessを変換する必要がない場合は、任意のファイル転送方法を使用してファイルを転送できます。
親トピック: データベース間での表領域のトランスポート
15.3.3.5 タスク5: (オプション)表領域を読取り/書込みモードに戻す
トランスポートした表領域をソース・データベースで再び読取り/書込みモードにします。
次の文で、sales_1
およびsales_2
表領域を読取り/書込みモードにします。
ALTER TABLESPACE sales_1 READ WRITE; ALTER TABLESPACE sales_2 READ WRITE;
インポート・プロセスが成功したことを先に確認するために、このタスクを延期することができます。
親トピック: データベース間での表領域のトランスポート
15.3.3.6 タスク6: 表領域セットのインポート
トランスポータブル表領域に対する操作を完了するために、表領域セットをインポートします。
表領域セットをインポートするには:
親トピック: データベース間での表領域のトランスポート
15.4 データベース間での表、パーティションまたはサブパーティションのトランスポート
データベース間で表、パーティションおよびサブパーティションをトランスポートできます。
- トランスポータブル表の概要
トランスポータブル表機能を使用すると、表、パーティションまたはサブパーティションのセットを別のOracle Databaseにコピーできます。トランスポータブル表操作では、指定した表、パーティションまたはサブパーティションのメタデータがターゲット・データベースに移動されます。 - トランスポータブル表に関する制限事項
トランスポータブル表には制限事項があります。 - エクスポート・ダンプ・ファイルを使用した表、パーティションまたはサブパーティションのトランスポート
エクスポート・ファイルを使用して、表、パーティションまたはサブパーティションをデータベース間でトランスポートできます。 - ネットワーク経由での表、パーティションまたはサブパーティションのトランスポート
ネットワーク経由で表をトランスポートするには、NETWORK_LINK
パラメータを使用してインポートを実行しますが、インポートはデータベース・リンクを使用して実行され、ダンプ・ファイルは関連しません。
親トピック: データのトランスポート
15.4.1 トランスポータブル表の概要
トランスポータブル表機能を使用すると、表、パーティションまたはサブパーティションのセットを別のOracle Databaseにコピーできます。トランスポータブル表操作では、指定した表、パーティションまたはサブパーティションのメタデータがターゲット・データベースに移動されます。
トランスポータブル表操作では、指定した表が使用する表領域が自動的に識別されます。データを移動するには、これらの表領域のデータファイルをターゲット・データベースにコピーします。データ・ポンプ・インポートでは、トランスポータブル表操作に含まれない表、パーティションまたはサブパーティションによって占有されているデータファイルのブロックが自動的に解放されます。また、トランスポータブル表操作に含まれない表の依存オブジェクトによって占有されているブロックも自動的に解放されます。
表、パーティションおよびサブパーティションのトランスポートは、次の方法で実行できます。
-
エクスポート・ダンプ・ファイルの使用
エクスポート時に、
TABLES
パラメータを指定し、TRANSPORTABLE
パラメータをALWAYS
に設定します。インポート時には、TRANSPORTABLE
パラメータを指定しないでください。データ・ポンプ・インポートによってトランスポータブル表操作が自動的に認識されます。 -
ネットワーク経由
インポート時に、
TABLES
パラメータを指定し、TRANSPORTABLE
パラメータをALWAYS
に設定し、NETWORK_LINK
パラメータをソース・データベースを識別するように設定します。
15.4.2 トランスポータブル表に関する制限事項
トランスポータブル表には制限事項があります。
トランスポータブル表に関する次の制限事項に注意してください。
-
トランスポータブル表には、「データのトランスポートに関する一般的な制限事項」で説明されている一般的な制限事項が適用されます。
-
同じスキーマに同じ名前の表を含むターゲット・データベースに表をトランスポートすることはできません。ただし、
REMAP_TABLE
インポート・パラメータを使用して、データを異なる表にインポートできます。または、トランスポート操作を実行する前に、トランスポート対象の表またはターゲット表のいずれかの名前を変更できます。Oracle Database 12cリリース2 (12.2)以降では、Recovery Manager (RMAN)の
RECOVER
コマンドで、表を再マッピングしながら表を異なるスキーマに移動できます。詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。 -
タイム・ゾーン・ファイルのバージョンが異なるプラットフォーム間では、
TIMESTAMP
WITH
TIMEZONE
(TSTZ)データを含む表をトランスポートできません。詳細は、『Oracle Databaseユーティリティ』を参照してください。
15.4.3 エクスポート・ダンプ・ファイルを使用した表、パーティションまたはサブパーティションのトランスポート
エクスポート・ファイルを使用して、データベース間で表、パーティションまたはサブパーティションをトランスポートできます。
次のタスクのリストでは、エクスポート・ダンプ・ファイルを使用したデータベース間での表のトランスポート処理の概要を示します。各タスクの詳細は、後続の例で示します。
-
表、パーティションまたはサブパーティションのセットを選択します。
パーティションをトランスポートする場合、トランスポータブル表操作で指定できるのは1つの表のパーティションのみであり、同じ操作で他の表をトランスポートすることはできません。また、トランスポータブル表操作で表のパーティションのサブセットのみをエクスポートすると、インポート時にそれぞれのパーティションが非パーティション表になります。
-
ソース・データベースで、表、パーティションまたはサブパーティションのデータファイルに関連付けられた表領域を読取り専用モードにします。
表の表領域を表示するには、
DBA_TABLES
ビューを問い合せます。表領域のデータファイルを表示するには、DBA_DATA_FILES
ビューを問い合せます。 -
データ・ポンプ・エクスポートを実行します。
-
エクスポート・ダンプ・ファイルをトランスポートします。
エクスポート・ダンプ・ファイルをターゲット・データベースへアクセス可能な場所にコピーします。
-
表、パーティションまたはサブパーティションのデータファイルをトランスポートします。
データファイルをターゲット・データベースへアクセス可能な場所にコピーします。
ソース・プラットフォームとターゲット・プラットフォームが異なる場合は、
V$TRANSPORTABLE_PLATFORM
ビューに対して問合せを実行して、各プラットフォームのendian形式をチェックできます(「プラットフォーム間でのデータのトランスポート」を参照)。ソース・プラットフォームのendian形式がターゲット・プラットフォームのendian形式と異なる場合は、次のいずれかの方法を使用してデータファイルを変換します。
-
DBMS_FILE_TRANSFER
パッケージのGET_FILE
またはPUT_FILE
プロシージャを使用して、データファイルを転送します。これらのプロシージャを使用すると、データファイルがターゲット・プラットフォームのendian形式に自動的に変換されます。 -
RMAN
CONVERT
コマンドを使用して、データファイルをターゲット・プラットフォームのendian形式に変換します。ノート:
UNDOセグメントを含むデータファイルでは、異なるendian形式間でのデータファイルの変換はサポートされていません。
詳細は、「プラットフォーム間でのデータの変換」を参照してください。
-
-
(オプション)ソース・データベースで表領域を読取り/書込みモードに戻します。
-
ターゲット・データベースで、インポートを実行します。
データ・ポンプ・ユーティリティを起動して、表のメタデータをインポートします。
例
データ・ポンプ・ダンプ・ファイルを使用して、表、パーティションおよびサブパーティションをトランスポートするタスクについては、次のパーティションがsh.sales_prt
表に存在することを想定した例で、詳細に説明します。
-
sales_q1_2000
-
sales_q2_2000
-
sales_q3_2000
-
sales_q4_2000
この例では、これらのパーティションの2つをターゲット・データベースにトランスポートします。
次のSQL文では、sh
スキーマのsales_prt
表とそのパーティション、および表の表領域とデータファイルが作成されます。また、この文では、sh
サンプル・スキーマのデータを使用してパーティションにデータが挿入されます。
CREATE TABLESPACE sales_prt_tbs DATAFILE 'sales_prt.dbf' SIZE 20M ONLINE; CREATE TABLE sh.sales_prt (prod_id NUMBER(6), cust_id NUMBER, time_id DATE, channel_id CHAR(1), promo_id NUMBER(6), quantity_sold NUMBER(3), amount_sold NUMBER(10,2)) PARTITION BY RANGE (time_id) (PARTITION SALES_Q1_2000 VALUES LESS THAN (TO_DATE('01-APR-2000','DD-MON-YYYY','NLS_DATE_LANGUAGE = American')), PARTITION SALES_Q2_2000 VALUES LESS THAN (TO_DATE('01-JUL-2000','DD-MON-YYYY','NLS_DATE_LANGUAGE = American')), PARTITION SALES_Q3_2000 VALUES LESS THAN (TO_DATE('01-OCT-2000','DD-MON-YYYY','NLS_DATE_LANGUAGE = American')), PARTITION SALES_Q4_2000 VALUES LESS THAN (TO_DATE('01-JAN-2001','DD-MON-YYYY','NLS_DATE_LANGUAGE = American'))) TABLESPACE sales_prt_tbs; INSERT INTO sh.sales_prt PARTITION(sales_q1_2000) SELECT * FROM sh.sales PARTITION(sales_q1_2000); INSERT INTO sh.sales_prt PARTITION(sales_q2_2000) SELECT * FROM sh.sales PARTITION(sales_q2_2000); INSERT INTO sh.sales_prt PARTITION(sales_q3_2000) SELECT * FROM sh.sales PARTITION(sales_q3_2000); INSERT INTO sh.sales_prt PARTITION(sales_q4_2000) SELECT * FROM sh.sales PARTITION(sales_q4_2000); COMMIT;
この例では、さらに次のことを想定しています。
-
ソース・データベースの名前は
sourcedb
です。 -
ソース・データベースとターゲット・データベースは、endiannessが同一の同じプラットフォームで実行されている必要があります。プラットフォームのendiannessをチェックするには、次の問合せを実行します。
SELECT d.PLATFORM_NAME, ENDIAN_FORMAT FROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE d WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME;
-
sales_q1_2000
パーティションとsales_q2_2000
パーティションのみがターゲット・データベースにトランスポートされます。他の2つのパーティションはトランスポートされません。
エクスポート・ダンプ・ファイルを使用してパーティションをトランスポートするには、次のタスクを実行します。
- タスク1 エクスポート・ダンプ・ファイルの作成
-
次のステップを実行して、エクスポート・ダンプ・ファイルを生成します。
-
SQL*Plusを起動し、管理者として、あるいは
ALTER
TABLESPACE
またはMANAGE
TABLESPACE
システム権限を持つユーザーとしてソース・データベースに接続します。手順は、「SQL*Plusを使用したデータベースへの接続」を参照してください。
-
トランスポートする表を含むすべての表領域を読取り専用にします。
ALTER TABLESPACE sales_prt_tbs READ ONLY;
-
DATAPUMP_EXP_FULL_DATABASE
ロールを持つユーザーとしてデータ・ポンプ・エクスポート・ユーティリティを起動し、トランスポータブル表オプションを指定します。SQL> HOST expdp user_name dumpfile=sales_prt.dmp directory=data_pump_dir tables=sh.sales_prt:sales_q1_2000,sh.sales_prt:sales_q2_2000 transportable=always logfile=exp.log Password: password
トランスポータブル・オプションを使用することを指定する
TRANSPORTABLE=ALWAYS
を常に指定する必要があります。この例では、次の追加のデータ・ポンプ・パラメータを指定します。
-
DUMPFILE
パラメータでは、作成する構造情報エクスポート・ダンプ・ファイルの名前をsales_prt.dmp
と指定します。 -
DIRECTORY
パラメータでは、オペレーティング・システムまたはOracle Automatic Storage Managementのダンプ・ファイルの場所を示すディレクトリ・オブジェクトを指定します。DIRECTORY
オブジェクトはデータ・ポンプを起動する前に作成し、ディレクトリに対するREAD
およびWRITE
オブジェクト権限をエクスポート・ユーティリティを実行するユーザーに付与する必要があります。CREATE
DIRECTORY
コマンドの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。非CDBで、ディレクトリ・オブジェクト
DATA_PUMP_DIR
が自動的に作成されます。このディレクトリへの読取りおよび書込みアクセス権がDBA
ロールに(したがって、ユーザーSYS
およびSYSTEM
に)自動的に付与されます。ただし、ディレクトリ・オブジェクト
DATA_PUMP_DIR
は、PDBでは自動的には作成されません。このため、PDBにインポートする場合は、PDBにディレクトリ・オブジェクトを作成し、データ・ポンプを実行するときにそのディレクトリ・オブジェクトを指定します。関連項目:
-
DIRECTORY
パラメータを省略する場合のデフォルト・ディレクトリの詳細は、『Oracle Databaseユーティリティ』を参照してください。 -
PDBの詳細は、『Oracle Multitenant管理者ガイド』を参照してください
-
-
TABLES
パラメータでは、エクスポートする表、パーティションまたはサブパーティションを指定します。 -
LOGFILE
パラメータでは、エクスポート・ユーティリティによって書き込まれるログ・ファイルのファイル名を指定します。この例では、ログ・ファイルの書込み先はダンプ・ファイルと同じディレクトリですが、ログ・ファイルは別の場所に書き込むことができます。
-
-
ログ・ファイルで予期しないエラーを確認し、ターゲット・データベースにトランスポートする必要があるダンプ・ファイルとデータファイルをノートにとります。
expdp
により、これらのファイルの名前とパスが次のようなメッセージに出力されます。Processing object type TABLE_EXPORT/TABLE/PLUGTS_BLK Processing object type TABLE_EXPORT/TABLE/TABLE Processing object type TABLE_EXPORT/TABLE/END_PLUGTS_BLK Master table "SYSTEM"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded ****************************************************************************** Dump file set for SYSTEM.SYS_EXPORT_TABLE_01 is: /u01/app/oracle/rdbms/log/sales_prt.dmp ****************************************************************************** Datafiles required for transportable tablespace SALES_PRT_TBS: /u01/app/oracle/oradata/sourcedb/sales_prt.dbf Job "SYSTEM"."SYS_EXPORT_TABLE_01" successfully completed at 11:32:13
-
完了した後、終了してSQL*Plusに戻ります。
$ exit
関連項目:
データ・ポンプ・ユーティリティの使用方法は、『Oracle Databaseユーティリティ』を参照してください
-
- タスク2 エクスポート・ダンプ・ファイルのトランスポート
-
ダンプ・ファイルを、ターゲット・データベース上の
DATA_PUMP_DIR
ディレクトリ・オブジェクトで指し示されているディレクトリ、または他の任意のディレクトリにトランスポートします。新しい場所はターゲット・データベースへアクセス可能であることが必要です。この例では、
sales_prt.dmp
ダンプ・ファイルをソース・データベースからターゲット・データベースに転送します。ターゲット・データベースで、次の問合せを実行して
DATA_PUMP_DIR
の場所を確認します。SELECT * FROM DBA_DIRECTORIES WHERE DIRECTORY_NAME = 'DATA_PUMP_DIR'; OWNER DIRECTORY_NAME DIRECTORY_PATH ---------- ---------------- ----------------------------------- SYS DATA_PUMP_DIR /u01/app/oracle/rdbms/log/
- タスク3 表のデータファイルのトランスポート
-
トランスポートする表を含む表領域のデータファイルを、ターゲット・データベースへアクセス可能な場所にトランスポートします。
通常は、データファイルを、ターゲット・データベースの既存データファイルの場所にトランスポートします。UNIXおよびLinuxプラットフォームでは、この場所は通常、/u01/app/oracle/oradata/dbname/または+DISKGROUP/dbname/datafile/です。
この例では、
sales_prt.dbf
データファイルをソース・データベースからターゲット・データベースに転送します。関連項目:
- タスク4 (オプション)表領域を読取り/書込みモードに戻す
-
次のように、トランスポートする表を含む表領域をソース・データベースで再び読取り/書込みモードにします。
ALTER TABLESPACE sales_prt_tbs READ WRITE;
インポート・プロセスが成功したことを先に確認するために、このタスクを延期することができます。
- タスク5 ターゲット・データベースでのパーティションのインポート
-
ターゲット・データベースで、
DATAPUMP_IMP_FULL_DATABASE
ロールを持つユーザーとしてデータ・ポンプ・インポート・ユーティリティを起動し、トランスポータブル表オプションを指定します。impdp user_name dumpfile=sales_prt.dmp directory=data_pump_dir transport_datafiles='/u01/app/oracle/oradata/targetdb/sales_prt.dbf' tables=sh.sales_prt:sales_q1_2000,sh.sales_prt:sales_q2_2000 logfile=imp.log Password: password
この例では、次のデータ・ポンプ・パラメータを指定します。
-
DUMPFILE
パラメータでは、インポートされるデータのメタデータが含まれるエクスポート・ファイルを指定します。 -
DIRECTORY
パラメータでは、エクスポート・ダンプ・ファイルの場所を識別するディレクトリ・オブジェクトを指定します。DIRECTORY
オブジェクトはデータ・ポンプを起動する前に作成し、ディレクトリに対するREAD
およびWRITE
オブジェクト権限をインポート・ユーティリティを実行するユーザーに付与する必要があります。CREATE
DIRECTORY
コマンドの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。非CDBで、ディレクトリ・オブジェクト
DATA_PUMP_DIR
が自動的に作成されます。このディレクトリへの読取りおよび書込みアクセス権がDBA
ロールに(したがって、ユーザーSYS
およびSYSTEM
に)自動的に付与されます。ただし、ディレクトリ・オブジェクト
DATA_PUMP_DIR
は、PDBでは自動的には作成されません。このため、PDBにインポートする場合は、PDBにディレクトリ・オブジェクトを作成し、データ・ポンプを実行するときにそのディレクトリ・オブジェクトを指定します。関連項目:
-
DIRECTORY
パラメータを省略する場合のデフォルト・ディレクトリの詳細は、『Oracle Databaseユーティリティ』を参照してください。 -
PDBの詳細は、『Oracle Multitenant管理者ガイド』を参照してください
-
-
TRANSPORT_DATAFILES
パラメータによって、インポートするすべてのデータファイルを識別します。多くのデータファイルがある場合は、
PARFILE
パラメータで指定されたパラメータ・ファイルでTRANSPORT_DATAFILES
パラメータを複数回指定できます。 -
TABLES
パラメータでは、インポートする表、パーティションまたはサブパーティションを指定します。 -
LOGFILE
パラメータでは、インポート・ユーティリティによって書き込まれるログ・ファイルのファイル名を指定します。この例では、ログ・ファイルの書込み先はダンプ・ファイルの読取り元と同じディレクトリですが、ログ・ファイルは別の場所に書き込むことができます。
この文が正常に実行された後、インポート・ログ・ファイルをチェックして、予期しないエラーが発生していないことを確認します。
多数のデータファイルを扱う場合、データファイル名のリストを文の行で指定することは煩雑です。また、文の行制限を超える場合もあります。このような場合には、インポート・パラメータ・ファイルを使用できます。たとえば、次のようにしてデータ・ポンプ・インポート・ユーティリティを起動できます。
impdp user_name parfile='par.f'
たとえば、
par.f
には次の行が含まれる場合があります。DUMPFILE=sales_prt.dmp DIRECTORY=data_pump_dir TRANSPORT_DATAFILES='/u01/app/oracle/oradata/targetdb/sales_prt.dbf' TABLES=sh.sales_prt:sales_q1_2000,sh.sales_prt:sales_q2_2000 LOGFILE=imp.log
ノート:
-
この例ではパーティションのサブセットをトランスポートするため、パーティションはターゲット・データベースで個別の表としてインポートされます。
-
インポート中、メタデータのロードのために表領域を一時的に読取り/書込みにすることがあります。インポート中にデータに対するユーザー変更が行われないことを確認してください。インポートが正常に完了したとき、すべてのユーザー定義表領域は読取り/書込みになります。
-
ネットワーク・データベース・インポートを実行する場合は、
TRANSPORTABLE
パラメータをalways
に設定する必要があります。
関連項目:
インポート・ユーティリティの使用方法は、『Oracle Databaseユーティリティ』を参照してください。
-
15.4.4 ネットワーク経由での表、パーティションまたはサブパーティションのトランスポート
ネットワーク経由で表をトランスポートするには、NETWORK_LINK
パラメータを使用してインポートを実行し、インポートはデータベース・リンクを使用して実行され、ダンプ・ファイルは関連しません。
次のタスクのリストでは、ネットワーク経由でのデータベース間の表、パーティションおよびサブパーティションのトランスポート処理の概要を示します。各タスクの詳細は、後続の例で示します。
-
表、パーティションまたはサブパーティションのセットを選択します。
パーティションをトランスポートする場合、トランスポータブル表操作で指定できるのは1つの表のパーティションのみであり、同じ操作で他の表をトランスポートすることはできません。また、トランスポータブル表操作で表のパーティションのサブセットのみをエクスポートすると、インポート時にそれぞれのパーティションが非パーティション表になります。
-
ソース・データベースで、表、パーティションまたはサブパーティションのデータファイルに関連付けられた表領域を読取り専用モードにします。
表の表領域を表示するには、
DBA_TABLES
ビューを問い合せます。表領域のデータファイルを表示するには、DBA_DATA_FILES
ビューを問い合せます。 -
表、パーティションまたはサブパーティションのデータファイルをトランスポートします。
データファイルをターゲット・データベースへアクセス可能な場所にコピーします。
ソース・プラットフォームとターゲット・プラットフォームが異なる場合は、
V$TRANSPORTABLE_PLATFORM
ビューに対して問合せを実行して、各プラットフォームのendian形式をチェックできます(「プラットフォーム間でのデータのトランスポート」を参照)。ソース・プラットフォームのendian形式がターゲット・プラットフォームのendian形式と異なる場合は、次のいずれかの方法を使用してデータファイルを変換します。
-
DBMS_FILE_TRANSFER
パッケージのGET_FILE
またはPUT_FILE
プロシージャを使用して、データファイルを転送します。これらのプロシージャを使用すると、データファイルがターゲット・プラットフォームのendian形式に自動的に変換されます。 -
RMAN
CONVERT
コマンドを使用して、データファイルをターゲット・プラットフォームのendian形式に変換します。ノート:
UNDOセグメントを含むデータファイルでは、異なるendian形式間でのデータファイルの変換はサポートされていません。
詳細は、「プラットフォーム間でのデータの変換」を参照してください。
-
-
ターゲット・データベースで、インポートを実行します。
データ・ポンプ・ユーティリティを起動して、表のメタデータをインポートします。
-
(オプション)ソース・データベースで表領域を読取り/書込みモードに戻します。
例
ネットワーク経由で表をトランスポートするタスクについては、表がソース・データベースに存在することを想定した次の例で詳細に説明します。
表 | 表領域 | データファイル |
---|---|---|
|
|
/u01/app/oracle/oradata/sourcedb/emp.dbf |
|
|
/u01/app/oracle/oradata/sourcedb/orders.dbf |
この例では、これらの表をターゲット・データベースにトランスポートします。この例を実行するには、これらの表はソース・データベースに存在する必要があります。
次のSQL文では、hr
スキーマの表およびその表の表領域とデータファイルが作成されます。また、この文では、hr
およびoe
サンプル・スキーマのデータを使用して表にデータが挿入されます。
CREATE TABLESPACE emp_tsp DATAFILE 'emp.dbf' SIZE 1M ONLINE; CREATE TABLE hr.emp_ttbs( employee_id NUMBER(6), first_name VARCHAR2(20), last_name VARCHAR2(25), email VARCHAR2(25), phone_number VARCHAR2(20), hire_date DATE, job_id VARCHAR2(10), salary NUMBER(8,2), commission_pct NUMBER(2,2), manager_id NUMBER(6), department_id NUMBER(4)) TABLESPACE emp_tsp; INSERT INTO hr.emp_ttbs SELECT * FROM hr.employees; CREATE TABLESPACE orders_tsp DATAFILE 'orders.dbf' SIZE 1M ONLINE; CREATE TABLE oe.orders_ttbs( order_id NUMBER(12), order_date TIMESTAMP WITH LOCAL TIME ZONE, order_mode VARCHAR2(8), customer_id NUMBER(6), order_status NUMBER(2), order_total NUMBER(8,2), sales_rep_id NUMBER(6), promotion_id NUMBER(6)) TABLESPACE orders_tsp; INSERT INTO oe.orders_ttbs SELECT * FROM oe.orders; COMMIT;
この例では、さらに次のことを想定しています。
-
ソース・データベースの名前は
sourcedb
です。 -
ソース・データベースとターゲット・データベースは、endiannessが同一の同じプラットフォームで実行されている必要があります。プラットフォームのendiannessをチェックするには、次の問合せを実行します。
SELECT d.PLATFORM_NAME, ENDIAN_FORMAT FROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE d WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME;
ネットワーク経由で表をトランスポートするには、次のタスクを実行します。
- タスク1 ターゲット・データベースからソース・データベースへのデータベース・リンクの作成
-
次のステップを実行して、ターゲット・データベースからソース・データベースへデータベース・リンクを作成します。
-
ソース・データベースとターゲット・データベースの間にネットワーク接続が構成されていることを確認します。
詳細は、『Oracle Database Net Services管理者ガイド』を参照してください。
-
SQL*Plusを起動し、データ・ポンプ・インポートによってデータをトランスポートする管理者としてターゲット・データベースに接続します。データをトランスポートするには、このユーザーに
DATAPUMP_IMP_FULL_DATABASE
ロールが必要です。手順は、「SQL*Plusを使用したデータベースへの接続」を参照してください。
-
データベース・リンクを作成します。
CREATE PUBLIC DATABASE LINK sourcedb USING 'sourcedb';
USING句でソース・データベースのサービス名を指定します。
インポート操作中、データベース・リンクをソース・データベースで
DATAPUMP_EXP_FULL_DATABASE
ロールを持つユーザーに接続する必要があります。ソース・データベースのユーザーは、SYSDBA
管理権限を持つユーザーにすることはできません。
-
- タスク2 表を含む表領域を読取り専用にする
-
ソース・データベースで、次のステップを実行します。
-
SQL*Plusを起動し、管理者として、あるいは
ALTER
TABLESPACE
またはMANAGE
TABLESPACE
システム権限を持つユーザーとしてソース・データベースに接続します。手順は、「SQL*Plusを使用したデータベースへの接続」を参照してください。
-
トランスポートするデータを含むすべての表領域を読取り専用にします。
ALTER TABLESPACE emp_tsp READ ONLY; ALTER TABLESPACE orders_tsp READ ONLY;
-
- タスク3 表のデータファイルのトランスポート
-
トランスポートする表を含む表領域のデータファイルを、ターゲット・データベースへアクセス可能な場所にトランスポートします。
通常は、データファイルを、ターゲット・データベースの既存データファイルの場所にトランスポートします。UNIXおよびLinuxプラットフォームでは、この場所は通常、/u01/app/oracle/oradata/dbname/または+DISKGROUP/dbname/datafile/です。
この例では、
emp.dbf
およびorders.dbf
データファイルをソース・データベースからターゲット・データベースに転送します。関連項目:
- タスク4 ターゲット・データベースでのデータベースのインポート
-
DATAPUMP_IMP_FULL_DATABASE
ロールを持つユーザーとしてデータ・ポンプ・インポート・ユーティリティを起動し、フル・トランスポータブル・エクスポート/インポート・オプションを指定します。impdp user_name network_link=sourcedb transportable=always transport_datafiles= '/u01/app/oracle/oradata/targetdb/emp.dbf' '/u01/app/oracle/oradata/targetdb/orders.dbf' tables=hr.emp_ttbs,oe.orders_ttbs logfile=import.log Password: password
この例では、次のデータ・ポンプ・パラメータを指定します。
-
NETWORK_LINK
パラメータでは、ネットワーク・インポートに使用されるソース・データベースへのデータベース・リンクを指定します。 -
TRANSPORTABLE
パラメータでは、インポートでトランスポータブル・オプションを使用することを指定します。 -
TRANSPORT_DATAFILES
パラメータによって、インポートするすべてのデータファイルを識別します。多くのデータファイルがある場合は、
PARFILE
パラメータで指定されたパラメータ・ファイルでTRANSPORT_DATAFILES
パラメータを複数回指定できます。 -
TABLES
パラメータでは、インポートする表を指定します。 -
LOGFILE
パラメータでは、インポート・ユーティリティによって書き込まれるログ・ファイルのファイル名を指定します。
この文が正常に実行された後、インポート・ログ・ファイルをチェックして、予期しないエラーが発生していないことを確認します。
多数のデータファイルを扱う場合、データファイル名のリストを文の行で指定することは煩雑です。また、文の行制限を超える場合もあります。このような場合には、インポート・パラメータ・ファイルを使用できます。たとえば、次のようにしてデータ・ポンプ・インポート・ユーティリティを起動できます。
impdp user_name parfile='par.f'
たとえば、
par.f
には次の行が含まれる場合があります。NETWORK_LINK=sourcedb TRANSPORTABLE=always TRANSPORT_DATAFILES= '/u01/app/oracle/oradata/targetdb/emp.dbf' '/u01/app/oracle/oradata/targetdb/orders.dbf' TABLES=hr.emp_ttbs,oe.orders_ttbs LOGFILE=import.log
ノート:
インポート中に、メタデータのロードのためにユーザー定義表領域を一時的に読取り/書込みにすることがあります。インポート中にデータに対するユーザー変更が行われないことを確認してください。インポートが正常に完了したとき、すべてのユーザー定義表領域は読取り/書込みになります。
関連項目:
インポート・ユーティリティの使用方法は、『Oracle Databaseユーティリティ』を参照してください。
-
- タスク5 (オプション)表領域を読取り/書込みモードに戻す
-
次のように、トランスポートする表を含む表をソース・データベースで再び読取り/書込みにします。
ALTER TABLESPACE emp_tsp READ WRITE; ALTER TABLESPACE orders_tsp READ WRITE;
15.5 プラットフォーム間でのデータの変換
トランスポータブル操作を実行するときに、ソース・プラットフォームとターゲット・プラットフォームでendiannessが異なる場合は、トランスポートするデータをターゲット・プラットフォームの形式に変換する必要があります。ソース・プラットフォームとターゲット・プラットフォームでendiannessが同じ場合は、データ変換は必要ありません。データを変換するには、DBMS_FILE_TRANSFER
パッケージまたはRMAN CONVERT
コマンドを使用できます。
ノート:
これらの項には記載されていない制限事項が適用されることがあります。詳細は、次のドキュメントを参照してください。
-
プラットフォームのendiannessをチェックする方法の詳細は、「プラットフォーム間でのデータのトランスポート」を参照してください
-
DBMS_FILE_TRANSFER
パッケージに関する制限事項の詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。 -
RMAN
CONVERT
コマンドに関する制限事項の詳細は、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください。
- DBMS_FILE_TRANSFERパッケージを使用したプラットフォーム間でのデータの変換
DBMS_FILE_TRANSFER
パッケージのGET_FILE
またはPUT_FILE
プロシージャを使用すると、データファイルの転送中にプラットフォーム間でデータを変換できます。 - RMANを使用したプラットフォーム間でのデータの変換
RMANCONVERT
コマンドを使用してデータを変換する場合は、データ・ポンプ・エクスポートを実行した後にソース・プラットフォームでデータを変換するか、またはデータ・ポンプ・インポートを実行する前にターゲット・プラットフォームでデータを変換できます。いずれの場合も、データファイルをソース・システムからターゲット・システムに転送する必要があります。
親トピック: データのトランスポート
15.5.1 DBMS_FILE_TRANSFERパッケージを使用したプラットフォーム間でのデータの変換
DBMS_FILE_TRANSFER
パッケージのGET_FILE
またはPUT_FILE
プロシージャを使用すると、データファイルの転送中にプラットフォーム間でデータを変換できます。
これらのプロシージャのいずれかを使用して、ソース・プラットフォームとターゲット・プラットフォーム間でデータファイルを移動する場合、各データファイル内の各ブロックがターゲット・プラットフォームのendiannessに変換されます。
この項では、例を使用して、データファイルを異なるプラットフォームに変換するためにDBMS_FILE_TRANSFER
パッケージを使用する方法を示します。この例では、次のことを想定しています。
-
GET_FILE
プロシージャでデータファイルを転送します。 -
mytable.342.123456789
データファイルを異なるプラットフォームに転送します。 -
ソース・プラットフォームのendiannessはターゲット・プラットフォームのendiannessと異なります。
-
ソース・データベースのグローバル名は
dbsa.example.com
です。 -
ソース・データベースとターゲット・データベースの両方でOracle Automatic Storage Management(Oracle ASM)が使用されています。
ノート:
DBMS_FILE_TRANSFER
パッケージを使用して、endiannessが同じプラットフォーム間でデータファイルを転送することもできます。
GET_FILE
プロシージャを使用して転送することによってデータファイルを変換するには、次のステップを実行します。
ノート:
この例では、宛先データファイル名はmytable
です。Oracle ASMでは、GET_FILE
プロシージャのdestination_file_name
パラメータで完全修飾ファイル名形式を使用できません。
関連項目:
-
DBMS_FILE_TRANSFER
パッケージの使用方法の詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。 -
ASMの完全修飾ファイル名形式の詳細は、『Oracle Automatic Storage Management管理者ガイド』を参照してください。
-
データベース・リンクの作成方法は、『Oracle Database SQL言語リファレンス』を参照してください
親トピック: プラットフォーム間でのデータの変換
15.5.2 RMANを使用したプラットフォーム間でのデータの変換
RMAN CONVERT
コマンドを使用してデータを変換する場合は、データ・ポンプ・エクスポートを実行した後にソース・プラットフォームでデータを変換するか、またはデータ・ポンプ・インポートを実行する前にターゲット・プラットフォームでデータを変換できます。いずれの場合も、データファイルをソース・システムからターゲット・システムに転送する必要があります。
次のRMAN CONVERT
コマンドを使用してデータを変換できます。
-
CONVERT
DATAFILE
-
CONVERT
TABLESPACE
-
CONVERT
DATABASE
ノート:
-
RMAN
CONVERT
コマンドにはデータ型の制約が適用されます。 -
RMAN
CONVERT
コマンドでは、UNDOセグメントを含むデータファイルについて、異なるendian形式間でのデータファイルの変換はサポートされていません。
- エクスポート後のソース・システムでの表領域の変換
例を使用して、表領域を異なるプラットフォームに変換するために、RMANCONVERT
TABLESPACE
コマンドを使用する方法を示します。 - インポート前のターゲット・システムでのデータファイルの変換
例を使用して、データファイルを異なるプラットフォームに変換するために、RMANCONVERT
DATAFILE
コマンドを使用する方法を示します。
親トピック: プラットフォーム間でのデータの変換
15.5.2.1 エクスポート後のソース・システムでの表領域の変換
例を使用して、表領域を異なるプラットフォームに変換するために、RMAN CONVERT
TABLESPACE
コマンドを使用する方法を示します。
この例では、次のことを想定しています。
-
sales_1
およびsales_2
表領域を異なるプラットフォームにトランスポートします。 -
ソース・プラットフォームのendiannessはターゲット・プラットフォームのendiannessと異なります。
-
表領域セットをターゲット・システムにトランスポートする前に、ソース・システムでデータを変換します。
-
ソース・データベースでデータ・ポンプ・エクスポートを完了しています。
ソース・システムで表領域を変換するには、次のステップを実行します。
関連トピック
親トピック: RMANを使用したプラットフォーム間でのデータの変換
15.5.2.2 インポート前のターゲット・システムでのデータファイルの変換
例を使用して、データファイルを異なるプラットフォームに変換するために、RMAN CONVERT
DATAFILE
コマンドを使用する方法を示します。
変換時、データファイルは、表領域名ではなく、ファイル名で指定します。表領域のメタデータがインポートされるまで、ターゲット・インスタンスでは対象の表領域名を認識できません。
この例では、次のことを想定しています。
-
トランスポートする表領域のデータファイルはまだ変換していません。
DBMS_FILE_TRANSFER
パッケージを使用してデータファイルをターゲット・システムに転送した場合、データファイルはファイル転送中に自動的に変換されています。「DBMS_FILE_TRANSFERパッケージを使用したプラットフォーム間でのデータの変換」を参照してください。 -
次のデータファイルを異なるプラットフォームにトランスポートします。
-
C:\Temp\sales_101.dbf
-
C:\Temp\sales_201.dbf
-
-
ソース・プラットフォームのendiannessはターゲット・プラットフォームのendiannessと異なります。
-
データ・ポンプ・インポートを実行する前に、ターゲット・システムでデータを変換します。
-
変換されたデータファイルは、C:\app\orauser\oradata\orawin\(ターゲット・システムの既存データファイルの場所)に配置されます。
ターゲット・システムで表領域を変換するには、次のステップを実行します。
親トピック: RMANを使用したプラットフォーム間でのデータの変換
15.6 データファイルを転送するためのガイドライン
データファイルを転送する際には、ガイドラインに従う必要があります。
ソースとターゲットの両方がファイル・システムの場合は、次の機能を使用してトランスポートできます。
-
フラット・ファイルをコピーする機能(オペレーティング・システムのコピー・ユーティリティやFTPなど)
-
DBMS_FILE_TRANSFER
パッケージ -
RMAN
-
CDで配布する機能
ソースまたはターゲットのいずれかがOracle Automatic Storage Management(Oracle ASM)ディスク・グループの場合は、次の機能を使用して転送できます。
-
XML DBリポジトリの
/sys/asm
仮想フォルダ間でのFTP詳細は、『Oracle Automatic Storage Management管理者ガイド』を参照してください。
-
DBMS_FILE_TRANSFER
パッケージ -
RMAN
管理表領域(SYSTEM
やSYSAUX
など)またはUNDO表領域や一時表領域のデータファイルはトランスポートしないでください。
データを受け取るデータベースの標準ブロック・サイズと異なるブロック・サイズのデータをトランスポートする場合は、最初にDB_
n
K_CACHE_SIZE
初期化パラメータ・エントリを受取り側データベースのパラメータ・ファイル内に設定する必要があります。
たとえば、ブロック・サイズが8KBのデータを標準ブロック・サイズが4KBのデータベースにトランスポートする場合は、DB_8K_CACHE_SIZE
初期化パラメータ・エントリをパラメータ・ファイルに含める必要があります。このエントリがまだパラメータ・ファイルに含まれていない場合は、ALTER SYSTEM SET
文を使用してこのパラメータを設定できます。
DB_
n
K_CACHE_SIZE
初期化パラメータの値の指定方法は、『Oracle Databaseリファレンス』を参照してください。
Oracle Database 12cからは、DBMS_FILE_TRANSFER
パッケージのGET_FILE
またはPUT_FILE
プロシージャを使用して、データファイルの転送中にプラットフォーム間でデータを変換できます。「プラットフォーム間でのデータの変換」を参照してください。
Oracle Database 12cからは、RMANでネットワーク対応のリストアを使用してファイルを転送できます。RMANは、RESTORE
コマンドのFROM
SERVICE
句を使用して、リモート・データベース・インスタンスからネットワーク経由でデータファイルをリストアします。ネットワーク対応リストアの主な利点は、バックアップをディスク上のステージング領域にリストアする必要性およびコピーを転送する必要性がなくなる点です。したがって、ネットワーク対応リストアを使用すると、ディスク領域および時間が節約されます。この手法には、ファイル転送時に、使用されたデータ・ブロックのみを圧縮、暗号化および転送できるという利点もあります。詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。
ノート:
UNIX dd
ユーティリティを使用してデータベース間でRAWデバイス・ファイルをコピーする場合は注意が必要です。Oracle Database 12c以降では、データベース・ファイルに対してRAWデバイスがサポートされていません。dd
ユーティリティは、ソースRAWデバイス・ファイル全体をコピーするために使用するか、またはソースRAWデバイス・ファイルの特定の範囲のみをコピーするようにオプションを指定して起動できます。
データファイルには非表示の制御情報も格納されているため、RAWデバイス・ファイルの実際のデータファイル・サイズを確認するのは困難です。dd
ユーティリティを使用してRAWデバイスを操作する必要がある場合は、ソースRAWデバイス・ファイルの内容全体を指定します。データベース・ファイルの内容をRAWデバイスからASMまたはファイル・システムに移動する場合は、Oracle Database 12c以降でRAWデバイスがサポートされていないため、オラクル社が提供するRMANなどのツールを使用してください。
関連項目:
DBMS_FILE_TRANSFER
パッケージを使用して、トランスポートされるファイルとそのメタデータをコピーする方法は、「データベース・サーバーを使用したファイルのコピー」を参照してください
親トピック: データのトランスポート