エクスポート・ダンプ・ファイルを使用したデータベースのトランスポート
エクスポート・ダンプ・ファイルを使用してデータベースをトランスポートできます。
次のタスクのリストでは、エクスポート・ダンプ・ファイルを使用したデータベースのトランスポート処理の概要を示します。各タスクの詳細は、後続の例で示します。
-
ソース・データベースで、各ユーザー定義表領域を読取り専用モードに構成し、データベースをエクスポートします。
次のパラメータが指定された値に設定されていることを確認します。
-
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 ...
-
親トピック: Oracle Databaseの移行