DataPump(expdp/impdp)を使用したデータ移行手順
本項では、DataPump(expdp/impdp)を使用したデータ移行手順について説明します。オリジナルのexp/impは、Oracle Database
11gからは原則としてサポートされなりOracleの推奨がDataPumpとなるため、今後はDataPumpを使用するケースが増えてくると思います。また本項ではexpdp/impdpの使用方法を中心に紹介しますが、PL/SQLパッケージとして「DBMS_DATAPUMP」、「DBMS_METADATA」のAPIも用意されています。
作業前の前提条件
catexp.sqlまたはcatalog.sqlスクリプトが実行されたことの確認
スクリプトを実行すると、次の処理が行われ、データベースはエクスポートおよびインポート操作に備えて調整されます。
・データ・ディクショナリへの必要なエクスポート・ビューおよびインポート・ビューの作成
・EXP_FULL_DATABASEロールおよびIMP_FULL_DATABASEロールの作成
・EXP_FULL_DATABASEおよびIMP_FULL_DATABASEロールへのすべての必要な権限の割当て
・DBAロールへのEXP_FULL_DATABASEおよびIMP_FULL_DATABASEの割当て
・インストールされているcatexp.sqlのバージョンの記録
エクスポート・ファイルを書き込むための十分なディスクまたはテープ記憶域が存在することの確認
十分な領域がないと、エクスポート・ユーティリティは書込み失敗エラーが発生して終了します。どれくらいの空き容量が必要なのか分からない場合は、表のサイズから必要な最大領域を見積もることもできます。表のサイズは、Oracleデータ・ディクショナリのUSER_SEGMENTSビューで確認できます。
必要なアクセス権限を所有していることの確認
エクスポート、インポートユーティリティを使用するには、Oracle Databaseに対するCREATE SESSION権限が必要です。また別のユーザーが所有している表をエクスポートするには、EXP_FULL_DATABASEロールを有効にする必要があります。
|
本項で紹介する移行手順は、『スキーマモード』になります。システム更改に伴い、ハードウェアやソフトウェアのバージョン変更はもちろんのこと、データベースのインスタンスやユーザの統合や分離も想定されます。そういったケースでも柔軟に対応が可能な『スキーマモード』での移行手順を紹介したいと思います。
【前提】今回の移行対象ユーザは、「DPOYO」とします。
@ ディレクトリオブジェクトの作成 (作業対象サーバ:移行元、移行元)
$ sqlplus / as sysdba
SQL> create directory dpump_dir as '/tmp';
SQL> select directory_name, directory_path from dba_directories where
directory_name='DPUMP_DIR';
|
「移行元」と「移行先」の両環境でダンプファイルを出力するディレクトリオブジェクトを作成します。「CREATE DIRCTORY」実行後、ディレクトリオブジェクトが作成されたことを確認します。
A ディレクトリオブジェクトへアクセス権限付与 (作業対象サーバ:移行元、移行先)
SQL> grant read, write on directory dpump_dir to system;
|
「移行元」と「移行先」の両環境で、エクスポート・インポート処理を実行するユーザへディレクトリオブジェクトへのアクセス権限を付与します。今回紹介する手順ではsystemユーザで処理を実行するため、systemユーザへディレクトリオブジェクトへの読み込み・書き込み権限を付与します。
B 移行対象ユーザのオブジェクト一覧を確認 (作業対象サーバ:移行元)
SQL> select object_name, object_type from dba_objects where owner='DPOYO' order by object_name;
$ exit
|
上記のSQLの出力結果は、正しくオブジェクトが移行されたかを確認する際の比較データに使用するためファイルに保存しておきます。
C エクスポート (作業対象サーバ:移行元)
$ expdp system/****** directory=dpump_dir dumpfile=dpoyo.dmp logfile=dpoyo.log
schemas='DPOYO'
$ grep '^ORA-' *.log
|
※カレントディレクトリにダンプファイルとログファイルが作成されます。またエクスポート中にORAエラーが発生していないことを確認します。
D ダンプファイルの移動 (作業対象サーバ:移行元⇒移行先)
手段は様々ですが、ネットワーク経由もしくは物理的に運送し新環境にAのダンプファイルを配置します。
※ネットワーク経由でダンプファイルを転送する場合は、圧縮処理をお勧めします。
E インポート (作業対象サーバ:移行先)
$ impdp system/****** directory=dpump_dir dumpfile=dpoyo.dmp logfile=dpoyo.log
schemas='DPOYO';
$ grep '^ORA-' *.log
|
※インポート中にORAエラーが発生していないことを確認します。
<E-1 表が既に存在した場合のアクションを指定したインポート>
$ impdp system/****** directory=dpump_dir dumpfile=dpoyo.dmp logfile=dpoyo.log
schemas='DPOYO' table_exists_action=truncate |
※「TABLE_EXISTS_ACTION」は、Importユーティリティに対して作成しようとしている表がすでに存在する場合に行う操作を指定します。上記の例では、既存の行を削除した後、ソースから行をインポートします。
<E-2 インポートは実行せず、SQL(DDL)ファイルを作成>
$ impdp system/****** directory=dpump_dir dumpfile=dpoyo.dmp sqlfile=dpoyo.sql |
※ダンプファイルからImportで実行するすべてのSQL(DDL)ファイルを作成します。上記の例では、「dpoyo.dmp」ファイルを読み込んでから「dpoyo.sql」ファイルを作成しています。
F インポート後のオブジェクト一覧を確認 (作業対象サーバ:移行先)
$ sqlplus / as sysdba
SQL> select object_name, object_type from dba_objects where owner='DPOYO'
order by object_name;
$ exit
|
※インポート後に、POYOスキーマオブジェクトを出力し、Bと差分がないことを確認します。
◎ エクスポート/インポート(exp/imp)を用いたデータ移行
|-エクスポート/インポート(exp/imp)について
|-移行モードごとの移行対象オブジェクトについて
|-exp/impを使用したデータ移行手順
◎ DataPump(expdp/impdp)を用いたデータ移行
|-DataPump(expdp/impdp)について
|-DataPump(expdp/impdp)を使用したデータ移行手順
◎ SQL*Loaderを用いたデータ移行
|-SQL*Loaderについて
|-SQL*Loaderを使用したデータ移行手順
◎ OracleGoldenGateを用いたデータ移行
|-OracleGoldenGateについて
|
スポンサードリンク
|