7 Oracle Data Pumpを使用したデータの移行

Oracle Data Pumpのエクスポートおよびインポート・ユーティリティを使用して、あるデータベースから別のデータベースにデータを移行します。

Oracle Data Pumpでは、高パフォーマンスのエクスポート(expdp)およびインポート(impdp)ユーティリティが提供されています。これらのユーティリティによってOracle Databaseのアップグレードが容易になります。

参照:

データ・ポンプおよびエクスポート/インポート・ユーティリティの詳細は、『Oracle Databaseユーティリティ』を参照してください。

トピック:

データの移行でのデータ・ポンプおよびエクスポート/インポートの概要

Oracleでは、あるOracle Databaseから別のOracle Databaseにデータを移行(移動)するためのデータ・ポンプ・エクスポートおよびインポートが提供されています。

Oracle Data Pumpを使用してデータを移行すると、次のメリットがあります。

  • オブジェクトおよびオブジェクトの種類に基づいてエクスポートおよびインポートされたメタデータを、INCLUDEおよびEXCLUDEパラメータを使用してフィルタ処理できます。

  • データベースの一部を様々なモード(全体データベース・モード、スキーマ・モード、表モード、表領域モード、トランスポータブル表領域モードなど)でアンロード/ロードできます。

  • インポート操作中のパーティション表の処理方法を、PARTITION_OPTIONSパラメータを使用して指定できます。

  • 全種類のデータ型がサポートされます。

参照:

データ・ポンプ・エクスポートおよびインポートの概要は、『Oracle Databaseユーティリティ』を参照してください。

アップグレード前のOracle Data Pumpによるデータの移行

このOracle Data Pumpの手順を使用して、新しいOracle Databaseソフトウェアをインストールする前にソース・データベースからデータをエクスポートします。次に、アップグレードしたターゲット・データベースにデータをインポートします。

  1. 新しいOracle Databaseソフトウェアをインストールし、パッチの適用で最新Oracleバンドル・パッチまたはパッチ・セット更新(BPまたはPSU)になっていることを確認します。Oracle Databaseのインストール・ステップは、ご使用のオペレーティング・システム固有のOracleマニュアルを参照してください。

  2. 現行データベースに付属のエクスポート・ユーティリティを使用して、現行データベースのデータをエクスポートします。

    エクスポートの実行中と実行後は、現行データベースは更新不可である必要があります。エクスポート実行後にユーザーが現行データベースを更新できるようにする場合は、現行データベースで行われた変更を、インポート完了後に新しいデータベースにコピーするためのプロシージャを設定し、その後で現行データベースを使用可能にする必要があります。

    エクスポートしたデータベースを更新できる一貫性維持点を取得するには、次のいずれかのオプションを使用します。

    • パラメータ・ファイルでFLASHBACK_TIME=SYSTIMESTAMPを設定して、エクスポートする表のデータから取得するイメージが、エクスポートするすべての表の同じ単一の時点における表のデータのコミット済状態を表すようにします。

    • FLASHBACK_SCNを使用して、エクスポートがフラッシュバック問合せユーティリティを有効化するために使用できる特定のシステム変更番号(SCN)を選択します。

    フラッシュバック・オプションを使用すると、UNDOの使用量および保存が増加します。

  3. 新しいデータベースを作成します。新しいデータベースが同じサーバー上にあり、それに現行データベースと同じ名前を付ける場合は、新しいデータベースを作成する前に現行データベースを停止します。

    (オプション)ソース・データベースとは異なる記憶域パラメータを指定できます。新しいデータベースに表領域、ユーザーおよび表を事前に作成し、記憶域パラメータを変更することにより、ディスク領域の使用状況を改善できます。SQL*Plusを使用して表を事前に作成する場合は、元のデータベースとの互換モードで実行するか、またはインポート中に発生する特定のデータ定義の変換を許可するようにします。

  4. SQL*Plusを新しいOracle Database環境で起動し、Oracle Databaseインスタンスを起動します。

    次に例を示します。

    $ SQLPLUS / AS SYSDBA
    SQL> STARTUP
  5. 事前作成された項目がある場合、データ・ポンプ・インポートでTABLE_EXISTS_ACTION=APPENDオプションを指定します。

    注意:

    新しいデータベースをソース・データベースと同じサーバー上に作成し、ソース・データベースのデータファイルを上書きしない場合は、事前に表領域を作成し、データ・ポンプ・インポートで次のパラメータ値を設定する必要があります。

    • データ・ポンプ・インポートでREUSE_DATAFILES=Nを指定

      (オプション) REMAP_DATAFILE、REMAP_TABLESPACEおよびREMAP_TABLEオプションを使用して、ダンプ・ファイル・セットのエクスポート・データベース名に対する参照を、インポート・データベースの競合しない新しい名前に再マップできます。

    • オリジナルのインポート・ユーティリティでDESTROY=Nを指定

  6. 新しいデータベースのインポート・ユーティリティを使用して、現在のデータベースからエクスポートされたオブジェクトをインポートします。情報メッセージやエラー・メッセージをインポート・セッションからファイルに保存するには、次のパラメータを使用します。

    • データ・ポンプ・インポートでLOGFILEパラメータを指定

    • オリジナルのインポート・ユーティリティでLOGパラメータを指定

  7. インポート作業が完了したら、正常に終了した特定のオブジェクトのインポートに関する情報を、インポート・ログ・ファイルで確認します。失敗したものがある場合は、失敗したオブジェクトに関する情報を確認します。

  8. その他のインポート方法を使用するか、データベース・オブジェクトを作成するSQLスクリプトを使用して不完全なインポートをクリーン・アップします(または完全に新規のインポートを開始します)。

    注意:

    データ・ポンプ・エクスポートまたはインポートのジョブでリカバリ不能なエラーが発生した場合は、エラーの原因となった条件を修正した後でジョブを再起動できます。ジョブは、エラーが発生した箇所から自動的に続行されます。

  9. エクスポートの実行後に現行データベースに変更を加える場合は、ユーザーに使用可能にする前に、それらの変更が新しいデータベースに伝播されるようにします。この手順のステップ1を参照してください。

  10. 第4章「Oracle Databaseのアップグレード後の作業」の記載に従って、必要なアップグレード後の作業を完了します。

ネットワーク・リンクを使用したOracle Database全体のインポート

このデータベースのエクスポート/インポート方法は、Oracle Data Pumpによる移行の代替方法で、異なるストレージ・システムに移行する場合に役立ちます。

データベース・リンクを設定し、データ・ポンプ・インポート・ユーティリティ(impdp)を使用してソース・データベースから宛先データベースへのデータベース全体のインポートを実行します。この方法を使用してデータを移行すると、ダンプ・ファイルには書き込まれないため、ダンプ・ファイルをコピーする必要はありません。この方法は、異なるストレージ・システムを使用している場合に特に役立ちます。ただし、Oracle Databaseのエクスポート時に以前のリリースのOracle Data Pumpソフトウェアによって適用された制限内で作業を行う必要があります。

注意:

相互運用性のエラーを回避するため、アップグレードを開始する前に、アップグレードするデータベースに適切なパッチ・セットが適用されていることを確認します。

  1. ソース・データベースでエクスポートを実行するユーザーにDATAPUMP_EXP_FULL_DATABASEロールがあることを確認します。

    データベース・リンクの作成時に、このエクスポートを実行するユーザーを指定する必要があります。

  2. インポート先データベースでインポートを実行するユーザーにDATAPUMP_IMP_FULL_DATABASEロールがあることを確認します。

  3. ソース・データベースとインポート先データベースとの間にデータベース・リンクを作成してテストします。

  4. 次のコマンド構文を使用してデータ・ポンプ・エクスポートを開始します(import_userはインポートを実行するユーザーのユーザー名で、db_linkはエクスポートを実行するユーザーが所有するデータベース・リンクの名前です)。

    impdp import_user NETWORK_LINK=db_link FULL=Y NOLOGFILE=Y;
    

    注意:

    インポート・データベースでこのコマンドを実行すると、エクスポートOracle Databaseでデータ・ポンプ・エクスポート操作(expdp)が暗黙的にトリガーされます。

  5. インポート操作のログ・ファイルが、DATA_PUMP_DIRディレクトリに書き込まれます。このディレクトリの場所は、次のコマンドを実行して検出できます。

    SQL> select * from dba_directories where DIRECTORY_NAME like 'DATA_PUMP_DIR';
    

    このコマンドを実行する場合、XDBリポジトリは、データベース全体のエクスポートおよびインポート操作では移動されないことに注意してください。LONG列およびNESTED列も移動されません。ただし、ユーザーが作成したXMLスキーマは移動されます。

注意:

インポート操作によって、新しい宛先サーバーでユーザーが再作成されます。dba_users表のユーザーの作成日には、実際のインポート日が示されます。有効期限は、creation_datepassword_life_time列を加えた値に更新されます。宛先データベースのdba_users表の作成日は、ソース・データベースのdba_users表の値とは異なります。

参照:

最新のパッチ・セットを取得するには、http://support.oracle.comを参照してください

Oracle Databaseのダウングレード時のデータ・ポンプの要件

データ・ポンプを使用して、下位互換性ダンプ・ファイルを取得できます。

ダウングレード処理でOracle Data Pumpを使用する場合、ダウングレード先として可能なOracle Databaseリリースは、最大でもダウングレード元のリリースより1つ前のリリースです。

次のデータ・ポンプ・エクスポートの方法のいずれかを使用して、下位互換性のあるダンプ・ファイルを取得します。

  • 現行のリリースのOracle Databaseホームに含まれるデータ・ポンプ・エクスポート・ユーティリティを使用し、VERSIONパラメータをダウングレードする以前のターゲットのリリースに設定します。

    データ・ポンプ・インポートは、現行のOracle Databaseリリースより後のOracle Data Pumpのバージョンで作成されたダンプ・ファイル・セットを読み取ることができません(ただし、それらのダンプ・ファイル・セットが、ターゲット・データベースのリリース番号に設定されたVERSIONパラメータを使用して作成されている場合を除く)。そのため、ダウングレードを行う際の最適な方法は、VERSIONパラメータをダウングレードするターゲット・データベースのリリース番号に設定して、データ・ポンプ・エクスポートを使用することです。

  • NETWORK_LINKパラメータとVERSIONパラメータを使用して、ダウングレードでデータ・ポンプ・エクスポート・ユーティリティを使用します。

    ダウングレード対象のデータベースの互換性レベルが、作成したエクスポート・ダンプ・ファイル・セットのバージョンよりも古い場合でも、エクスポート元のOracle Databaseの互換性レベルが2つのメジャー・リリース番号の間であればデータベース・リンクを介してデータを転送できます。たとえば、一方のデータベースがOracle Database 18cの場合、もう一方のデータベースは12cリリース1 (12.1)または12cリリース2 (12.2)である必要があります。データ・ポンプ・エクスポートをこのように使用することで、以前のダンプ・ファイル・エクスポート中にVERSIONが互換性のない値に設定されていても回復できます。

    注意:

    新しいリリースのOracle Databaseをインストールした後で、その新しいリリースの機能が使用できるように互換性レベルを上げた場合、それらの新機能を使用するオブジェクトはダウングレードできません。たとえば、Oracle Database 18cで使用できる長い識別子を使用する場合、そうした長い識別子を持つオブジェクトはダウングレードできません。ダウングレード後にそれらのオブジェクトをインポートしようとして、データ・ポンプ・インポート・ユーティリティが長い識別子を使用するオブジェクトの再作成を試行した場合は、エラーが発生します。

    参照:

    VERSIONパラメータの使用方法の詳細は、『Oracle Databaseユーティリティ』を参照してください。