エクスポート・ダンプ・ファイルを使用したデータベースのトランスポート

エクスポート・ダンプ・ファイルを使用してデータベースをトランスポートできます。

次のタスクのリストでは、エクスポート・ダンプ・ファイルを使用したデータベースのトランスポート処理の概要を示します。各タスクの詳細は、後続の例で示します。

  1. ソース・データベースで、各ユーザー定義表領域を読取り専用モードにし、データベースをエクスポートします。

    次のパラメータが指定された値に設定されていることを確認します。

    • TRANSPORTABLE=ALWAYS

    • FULL=Y

    ソース・データベースがOracle Database 11g リリース2 (11.2.0.3)またはOracle Database 11g以上のデータベースである場合、VERSIONパラメータを12以上に設定する必要があります。

    ソース・データベースに暗号化された表領域、または暗号化された列を含む表が格納された表領域が含まれている場合は、ENCRYPTION_PWD_PROMPT=YESを指定するか、ENCRYPTION_PASSWORDパラメータを指定する必要があります。

    エクスポート・ダンプ・ファイルには、ユーザー定義表領域に格納されたオブジェクトのメタデータ、および管理表領域(SYSTEMSYSAUXなど)に格納されたユーザー定義オブジェクトのメタデータとデータの両方が含まれています。

  2. エクスポート・ダンプ・ファイルをトランスポートします。

    エクスポート・ダンプ・ファイルをターゲット・データベースへアクセス可能な場所にコピーします。

  3. データベース内のユーザー定義表領域すべてのデータファイルをトランスポートします。

    データファイルをターゲット・データベースへアクセス可能な場所にコピーします。

    ソース・プラットフォームとターゲット・プラットフォームが異なる場合は、V$TRANSPORTABLE_PLATFORMビューに対して問合せを実行して、各プラットフォームのendian形式をチェックできます(「プラットフォーム間でのデータのトランスポート」を参照)。

    ソース・プラットフォームのendian形式がターゲット・プラットフォームのendian形式と異なる場合は、次のいずれかの方法を使用してデータファイルを変換します。

    • DBMS_FILE_TRANSFERパッケージのGET_FILEまたはPUT_FILEプロシージャを使用して、データファイルを転送します。これらのプロシージャを使用すると、データファイルがターゲット・プラットフォームのendian形式に自動的に変換されます。

    • RMAN CONVERTコマンドを使用して、データファイルをターゲット・プラットフォームのendian形式に変換します。

      注意:

      UNDOセグメントを含むデータファイルでは、異なるendian形式間でのデータファイルの変換はサポートされていません。

    詳細は、「プラットフォーム間でのデータの変換」を参照してください。

  4. (オプション)ソース・データベースでユーザー定義表領域を読取り/書込みモードに戻します。

  5. ターゲット・データベースで、データベースをインポートします。

    インポートが完了したとき、ユーザー定義表領域は読取り/書込みモードになります。

データベースをトランスポートするためのこれらのタスクは、この例で詳しく説明します。この例では、ソース・プラットフォームが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 18cデータベースです。

エクスポート・ダンプ・ファイルを使用してデータベースをトランスポートするには、次のタスクを実行します。

タスク1   エクスポート・ダンプ・ファイルの作成

次の手順を実行して、エクスポート・ダンプ・ファイルを生成します。

  1. SQL*Plusを起動し、管理者として、あるいはALTER TABLESPACEまたはMANAGE TABLESPACEシステム権限を持つユーザーとしてデータベースに接続します。

  2. データベース内のすべてのユーザー定義表領域を読取り専用にします。

    ALTER TABLESPACE sales READ ONLY;
    
    ALTER TABLESPACE customers READ ONLY;
    
    ALTER TABLESPACE employees READ ONLY;
    
  3. 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にディレクトリ・オブジェクトを作成し、データ・ポンプを実行するときにそのディレクトリ・オブジェクトを指定します。

      関連項目:

    • 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)についてのみアンロードされるため、この操作は大規模なユーザー定義表領域の場合にも比較的短時間で完了します。

  4. ログ・ファイルでエラーを確認し、ターゲット・データベースにトランスポートする必要があるダンプ・ファイルとデータファイルを書き留めます。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
    
  5. 完了した後、終了して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/です。また、RMAN CONVERTコマンドを使用してデータファイルを変換できます。詳細は、「プラットフォーム間でのデータの変換」を参照してください。

注意:

表領域の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にディレクトリ・オブジェクトを作成し、データ・ポンプを実行するときにそのディレクトリ・オブジェクトを指定します。

    関連項目:

  • 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 ...

関連項目: