Oracle Data Pump は、Oracle データのダンプファイルへのエクスポートおよび別の Oracle データベースへのインポートを行うことができるユーティリティです。Oracle Data Pump は、Oracle エクスポート/インポートユーティリティとして長期間使用されてきました。Oracle Data Pump は、Oracle データベースから Amazon RDS DB インスタンスに大量のデータを移行する際に推奨される方法でもあります。
このセクションの例では、Oracle データベースにデータをインポートする 1 つの方法を示していますが、Oracle Data Pump では他の手法もサポートしています。詳細については、Oracle Database のドキュメント
このセクションの例では DBMS_DATAPUMP
パッケージを使用します。同じタスクは、Oracle Data Pump コマンドラインユーティリティの impdp
および expdp
を使用して実行できます。これらのユーティリティは、Oracle インスタントクライアントを含む Oracle クライアントインストールの一部としてリモートホストにインストールできます。詳細については、「Oracle Instant Client を使用した Amazon RDS for Oracle DB インスタンスの Data Pumpのインポートまたはエクスポートを実行する方法
トピック
Oracle Data Pump の概要
Oracle Data Pump は、次のコンポーネントで構成されています。
-
コマンドラインクライアントの
expdp
およびimpdp
-
DBMS_DATAPUMP
PL/SQL パッケージ -
DBMS_METADATA
PL/SQL パッケージ
以下のシナリオで Oracle Data Pump を使用できます。
-
Oracle データベース (オンプレミスまたは Amazon EC2 インスタンス) から RDS for Oracle DB インスタンスにデータをインポートする。
-
RDS for Oracle DB インスタンスから Oracle データベース (オンプレミスまたは Amazon EC2 インスタンス) にデータをインポートする。
-
RDS for Oracle DB インスタンス間でデータをインポートする (例: EC2-Classic から VPC へのデータ移行)。
Oracle Data Pump ユーティリティをダウンロードするには、Oracle Technical Network ウェブサイトの「Oracle Database ソフトウェア・ダウンロード
Oracle Data Pump のワークフロー
通常、Oracle Data Pump は、以下の段階を踏んで使用します。
-
ソースデータベースのダンプファイルにデータをエクスポートします。
-
ダンプファイルを、ターゲットの RDS for Oracle DB インスタンスにアップロードします。ダンプファイルを転送するには、Amazon S3 バケットを使用するか、2 つのデータベース間のデータベースリンクを使用します。
-
ダンプファイルから RDS for Oracle DB インスタンスにデータをインポートします。
Oracle Data Pump のベストプラクティス
Oracle Data Pump を使用して RDS for Oracle インスタンスにデータをインポートする場合は、次のベストプラクティスをお勧めします。
-
特定のスキーマやオブジェクトをインポートするには、
schema
またはtable
モードでインポートを実行します。 -
インポートするスキーマをアプリケーションに必要なスキーマに制限します。
-
full
モードでのインポートまたはシステムが管理するコンポーネントのスキーマのインポートは行わないでください。RDS for Oracle では
SYS
またはSYSDBA
管理ユーザーへのアクセスが許可されていないため、これらのアクションによって Oracle データディレクトリが損傷し、データベースの安定性が影響を受ける可能性があります。 -
大量のデータをロードする場合は、以下の操作を実行します。
-
ダンプファイルを、ターゲットの RDS for Oracle DB インスタンスに転送します。
-
インスタンスのDB スナップショットを取得します。
-
インポートをテストして、これが成功することを確認します。
データベースコンポーネントが無効の場合は、DB インスタンスを削除後、DB スナップショットから再作成します。復元された DB インスタンスには、DB スナップショットの作成時に DB インスタンス上でステージングされたダンプファイルがすべて含まれています。
-
-
Oracle Data Pump エクスポートパラメータ
TRANSPORT_TABLESPACES
、TRANSPORTABLE
、またはTRANSPORT_FULL_CHECK
を使用して作成されたダンプファイルはインポートしないでください。RDS for Oracle DB インスタンスでは、これらのダンプファイルのインポートはサポートされていません。 -
SYS
、SYSTEM
、RDSADMIN
、RDSSEC
、RDS_DATAGUARD
の Oracle スケジューラオブジェクトを含み、以下のカテゴリに属するダンプファイルをインポートしないでください。-
ジョブ
-
プログラム
-
スケジュール
-
チェーン
-
ルール
-
評価コンテキスト
-
ルールセット
RDS for Oracle DB インスタンスでは、これらのダンプファイルのインポートはサポートされていません。
-
-
サポートされていない Oracle Scheduler オブジェクトを除外するには、Data Pump エクスポート時に追加のディレクティブを使用します。
DBMS_DATAPUMP
を使用する場合は、METADATA_FILTER
の前にDBMS_METADATA.START_JOB
をさらに追加します。DBMS_DATAPUMP.METADATA_FILTER( v_hdnl, 'EXCLUDE_NAME_EXPR', q'[IN (SELECT NAME FROM SYS.OBJ$ WHERE TYPE# IN (66,67,74,79,59,62,46) AND OWNER# IN (SELECT USER# FROM SYS.USER$ WHERE NAME IN ('RDSADMIN','SYS','SYSTEM','RDS_DATAGUARD','RDSSEC') ) ) ]', 'PROCOBJ' );
expdp
を使用する場合は、次の例に示すexclude
ディレクティブを含むパラメータファイルを作成します。その後、PARFILE=
コマンドでparameter_file
expdp
を使用します。exclude=procobj:"IN (SELECT NAME FROM sys.OBJ$ WHERE TYPE# IN (66,67,74,79,59,62,46) AND OWNER# IN (SELECT USER# FROM SYS.USER$ WHERE NAME IN ('RDSADMIN','SYS','SYSTEM','RDS_DATAGUARD','RDSSEC') ) )"
Oracle Data Pump と Amazon S3 バケットを使用したデータのインポート
次のインポートプロセスでは、Oracle Data Pump と Amazon S3 バケットを使用します。ステップは次のとおりです。
-
Oracle DBMS_DATAPUMP
パッケージを使用して、ソースデータベースのデータをエクスポートします。 -
ダンプファイルを Amazon S3 バケットに配置します。
-
Amazon S3 バケットから、ターゲットの Amazon RDS for Oracle DB インスタンスの
DATA_PUMP_DIR
ディレクトリにダンプファイルをダウンロードします。 -
DBMS_DATAPUMP
パッケージを使用して、コピーしたダンプファイルのデータを RDS for Oracle DB インスタンス内にインポートします。
トピック
Oracle Data Pump と Amazon S3 バケットを使用したデータのインポートの要件
このプロセスには、次の要件があります。
-
Amazon S3 バケットをファイル転送に使用でき、この Amazon S3 バケットが、DB インスタンスと同じ AWS リージョン リージョン内にあることを確認します。手順については、Amazon Simple Storage Service 入門ガイドの「バケットの作成」を参照してください。
-
Amazon S3 バケットにアップロードするオブジェクトは、5 TB 以下にする必要があります。Amazon S3 でオブジェクトを操作する方法については、Amazon Simple Storage Service ユーザーガイドを参照してください。
注記
ダンプファイルが5 TBを超える場合、並列オプションを使用して Oracle Data Pump エクスポートを実行できます。このオペレーションは、個々のファイルの 5 TB の制限を超えないように複数のダンプファイルにデータを分散します。
-
Amazon RDS 統合用の Amazon S3 バケットは、「Amazon S3 と RDS for Oracle を統合する IAM アクセス許可の設定」の手順に従って準備してください。
-
移行元のインスタンスと移行先の DB インスタンスにダンプファイルを保存するための十分なストレージ領域が必要です。
注記
このプロセスでは、DATA_PUMP_DIR
ディレクトリ (すべての Oracle DB インスタンスで事前に設定されているディレクトリ) にダンプファイルをインポートします。このディレクトリはデータファイルと同じストレージボリュームにあります。ダンプファイルをインポートした場合、既存の Oracle データファイルのスペース占有率は高くなります。そのため、DB インスタンスではスペースの追加占有に対応できることを確認する必要があります。インポートしたダンプファイルは、DATA_PUMP_DIR
ディレクトリから自動的に削除またはパージされることはありません。インポートしたダンプファイルを削除するには、Oracle ウェブサイトにある UTL_FILE.FREMOVE
ステップ 1: RDS for Oracle のターゲットの DB インスタンスのデータベースユーザーに特権を付与する
このステップでは、データのインポート先となるスキーマを作成し、ユーザーに必要な特権を付与します。
RDS for Oracle ターゲットインスタンスでユーザーを作成し、必要な特権を付与するには
-
SQL*Plus や Oracle SQL Developer を使用して、データをインポートする先の RDS for Oracle DB インスタンスにマスターユーザーとしてログインします。DB インスタンスへの接続方法については、「Oracle DB インスタンスへの接続」を参照ください。
-
データをインポートする前に、必要なテーブルスペースを作成します。詳細については、「テーブルスペースの作成とサイズ変更」を参照してください。
-
データのインポート先のユーザーアカウントが存在しない場合は、ユーザーアカウントを作成し、必要なアクセス許可とロールを付与します。データを複数のユーザースキーマにインポートする場合は、各ユーザーアカウントを作成し、それぞれ必要な権限およびロールを付与します。
例えば、以下の SQL ステートメントでは、新しいユーザーを作成して、ユーザーが所有するスキーマ内にデータをインポートするために必要な特権とロールを付与します。
を、このステップおよび次のステップのスキーマ名に置き換えます。schema_1
CREATE USER
schema_1
IDENTIFIED BYmy_password
; GRANT CREATE SESSION, RESOURCE TO schema_1; ALTER USER schema_1 QUOTA 100M ON users;注記
セキュリティ上のベストプラクティスとして、ここに示されているプロンプト以外のパスワードを指定してください。
前のステートメントでは、新規ユーザーに特権
CREATE SESSION
とロールRESOURCE
を付与します。インポートするデータベースオブジェクトによっては、特権とロールの追加が必要になる場合があります。
ステップ 2: DBMS_DATAPUMP を使用してデータをダンプファイルにエクスポートする
ダンプファイルを作成するには、DBMS_DATAPUMP
パッケージを使用します。
Oracle データをダンプファイルにエクスポートするには
-
管理ユーザーとして、SQL Plus または Oracle SQL Developer を使用してソースの RDS for Oracle DB インスタンスに接続します。移行元のデータベースが RDS for Oracle DB インスタンスである場合は、Amazon RDS マスターユーザーとして接続します。
-
DBMS_DATAPUMP
プロシージャを呼び出して、データをエクスポートします。次のスクリプトでは、
DATA_PUMP_DIR
ディレクトリ内のsample.dmp
という名前のダンプファイルに
スキーマをエクスポートします。SCHEMA_1
をエクスポートするスキーマの名前に置き換えます。SCHEMA_1
DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN( operation => 'EXPORT', job_mode => 'SCHEMA', job_name => null ); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl , filename => 'sample.dmp' , directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file ); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample_exp.log', directory => 'DATA_PUMP_DIR' , filetype => dbms_datapump.ku$_file_type_log_file ); DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'SCHEMA_EXPR','IN (''
SCHEMA_1
'')'); DBMS_DATAPUMP.METADATA_FILTER( v_hdnl, 'EXCLUDE_NAME_EXPR', q'[IN (SELECT NAME FROM SYS.OBJ$ WHERE TYPE# IN (66,67,74,79,59,62,46) AND OWNER# IN (SELECT USER# FROM SYS.USER$ WHERE NAME IN ('RDSADMIN','SYS','SYSTEM','RDS_DATAGUARD','RDSSEC') ) ) ]', 'PROCOBJ' ); DBMS_DATAPUMP.START_JOB(v_hdnl); END; /注記
Data Pump は非同期的にジョブを開始します。Data Pump ジョブのモニタリングについては、Oracle ドキュメントの「ジョブステータスのモニタリング
」を参照してください。 -
(オプション)
rdsadmin.rds_file_util.read_text_file
プロシージャを呼び出してエクスポートログの内容を表示します。詳細については、「DB インスタンスディレクトリ内のファイルの読み取り」を参照してください。
ステップ 3: Amazon S3 バケットにダンプファイルをアップロードする
Amazon RDS プロシージャ rdsadmin.rdsadmin_s3_tasks.upload_to_s3
を使用して、Amazon S3 バケットにダンプファイルをコピーします。次の例では、DATA_PUMP_DIR
ディレクトリのすべてのファイルを、
という名前の Amazon S3 バケットにアップロードします。amzn-s3-demo-bucket
SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => '
amzn-s3-demo-bucket
', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;
SELECT
ステートメントでは、データ型 VARCHAR2
のタスクの ID が返ります。詳細については、「RDS for Oracle DB インスタンスから Amazon S3 バケットにファイルをアップロードする」を参照してください。
ステップ 4: ダンプファイルを Amazon S3 バケットからターゲット DB インスタンスにダウンロードする
Amazon RDS プロシージャ rdsadmin.rdsadmin_s3_tasks.download_from_s3
を使用して、このステップを実行します。ファイルをディレクトリにダウンロードするとき、ディレクトリに同じ名前のファイルが既に存在する場合、プロシージャ download_from_s3
はダウンロードをスキップします。ダウンロードディレクトリからファイルを削除するには、Oracle ウェブサイトにある UTL_FILE.FREMOVE
ダンプファイルをダウンロードするには
-
SQL*Plus または Oracle SQL Developer を起動し、Amazon RDS ターゲットの Oracle DB インスタンスにマスターとしてログインします。
-
Amazon RDS プロシージャ
rdsadmin.rdsadmin_s3_tasks.download_from_s3
を使用してダンプファイルをダウンロードします。次の例では、
という名前の Amazon S3 バケットからディレクトリamzn-s3-demo-bucket
DATA_PUMP_DIR
にすべてのファイルをダウンロードします。SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => '
amzn-s3-demo-bucket
', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;SELECT
ステートメントでは、データ型VARCHAR2
のタスクの ID が返ります。詳細については、「Amazon S3 バケットから Oracle DB インスタンスにファイルをダウンロードする」を参照してください。
ステップ 5: DBMS_DATAPUMP を使用してダンプファイルをターゲット DB インスタンスにインポートする
DBMS_DATAPUMP
を使用して、RDS for Oracle DB インスタンスにスキーマをインポートします。METADATA_REMAP
などの追加オプションが必要になる場合があります。
ターゲット DB インスタンスにデータをインポートするには
-
SQL*Plus または SQL Developer を起動し、RDS for Oracle DB インスタンスにマスターユーザーとしてログインします。
-
DBMS_DATAPUMP
プロシージャを呼び出して、データをインポートします。次の例では、
sample_copied.dmp
からターゲット DB インスタンスにSCHEMA_1
データをインポートします。DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN( operation => 'IMPORT', job_mode => 'SCHEMA', job_name => null); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample_copied.dmp', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample_imp.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'SCHEMA_EXPR','IN (''
SCHEMA_1
'')'); DBMS_DATAPUMP.START_JOB(v_hdnl); END; /注記
Data Pump ジョブは非同期的に開始されます。Data Pump ジョブのモニタリングについては、Oracle ドキュメントの「ジョブステータスのモニタリング
」を参照してください。インポートログの内容は、 rdsadmin.rds_file_util.read_text_file
の手順を使用して表示できます。詳細については、「DB インスタンスディレクトリ内のファイルの読み取り」を参照してください。 -
ターゲット DB インスタンスのスキーマテーブルを一覧表示して、データのインポートを検証します。
例えば、次のクエリでは、
のテーブル数が返ります。SCHEMA_1
SELECT COUNT(*) FROM DBA_TABLES WHERE OWNER='
SCHEMA_1
';
ステップ 6: クリーンアップ
データをインポートしたら、保管が不要になったファイルは削除できます。
不要なファイルを削除するには
-
SQL*Plus または SQL Developer を起動し、RDS for Oracle DB インスタンスにマスターユーザーとしてログインします。
-
次のコマンドを使用して
DATA_PUMP_DIR
のファイルを一覧表示します。SELECT * FROM TABLE(rdsadmin.rds_file_util.listdir('DATA_PUMP_DIR')) ORDER BY MTIME;
-
DATA_PUMP_DIR
内の不要になったファイルを削除するには、次のコマンドを使用します。EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','
filename
');例えば、次のコマンドは、
sample_copied.dmp
という名前のファイルが削除されます。EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','sample_copied.dmp');
Oracle Data Pump とデータベースリンクを使用したデータのインポート
次のインポートプロセスでは、Oracle Data Pump と Oracle DBMS_FILE_TRANSFER
-
ソースの Oracle データベース (オンプレミスデータベース、Amazon EC2 インスタンス、または RDS for Oracle DB インスタンス) に接続します。
-
DBMS_DATAPUMP
を使用してデータをエクスポートします。 -
DBMS_FILE_TRANSFER.PUT_FILE
を使用して、Oracle インスタンスのダンプファイルを、データベースリンクを使用して接続されているターゲットの RDS for Oracle DB インスタンスのDATA_PUMP_DIR
ディレクトリにコピーします。 -
DBMS_DATAPUMP
パッケージを使用して、コピーしたダンプファイルのデータを RDS for Oracle DB インスタンス内にインポートします。
Oracle Data Pump と DBMS_FILE_TRANSFER
バケットを使用したインポートプロセスでは、次のステップを使用します。
Oracle Data Pump とデータベースリンクを使用したデータのインポートの要件
このプロセスには、次の要件があります。
-
DBMS_FILE_TRANSFER
パッケージとDBMS_DATAPUMP
パッケージに対する実行権限が必要です。 -
移行元の DB インスタンスの
DATA_PUMP_DIR
ディレクトリに対する書き込み権限が必要です。 -
移行元のインスタンスと移行先の DB インスタンスにダンプファイルを保存するための十分なストレージ領域が必要です。
注記
このプロセスでは、DATA_PUMP_DIR
ディレクトリ (すべての Oracle DB インスタンスで事前に設定されているディレクトリ) にダンプファイルをインポートします。このディレクトリはデータファイルと同じストレージボリュームにあります。ダンプファイルをインポートした場合、既存の Oracle データファイルのスペース占有率は高くなります。そのため、DB インスタンスではスペースの追加占有に対応できることを確認する必要があります。インポートしたダンプファイルは、DATA_PUMP_DIR
ディレクトリから自動的に削除またはパージされることはありません。インポートしたダンプファイルを削除するには、Oracle ウェブサイトにある UTL_FILE.FREMOVE
ステップ 1: RDS for Oracle のターゲットの DB インスタンスのユーザーに特権を付与する
RDS for Oracle のターゲットの DB インスタンスのユーザーに特権を付与するには、次のステップを行います。
-
SQL Plus または Oracle SQL Developer を使用して、データをインポートする RDS for Oracle DB インスタンスに接続します。Amazon RDS マスターユーザーとして接続します。DB インスタンスへの接続方法については、「Oracle DB インスタンスへの接続」を参照してください。
-
データをインポートする前に、必要なテーブルスペースを作成します。詳細については、「テーブルスペースの作成とサイズ変更」を参照してください。
-
データのインポート先のユーザーアカウントが存在しない場合は、ユーザーアカウントを作成し、必要なアクセス許可とロールを付与します。データを複数のユーザースキーマにインポートする場合は、各ユーザーアカウントを作成し、それぞれ必要な特権およびロールを付与します。
例えば、以下のコマンドでは、
schema_1
という名前の新しいユーザーを作成して、このユーザーのスキーマ内にデータをインポートするために必要なアクセス許可とロールを付与します。CREATE USER
schema_1
IDENTIFIED BYmy-password
; GRANT CREATE SESSION, RESOURCE TO schema_1; ALTER USER schema_1 QUOTA 100M ON users;注記
セキュリティ上のベストプラクティスとして、ここに示されているプロンプト以外のパスワードを指定してください。
この前の例では、新規ユーザーに特権
CREATE SESSION
とロールRESOURCE
を付与します。インポートするデータベースオブジェクトによっては、特権とロールの追加が必要になる場合があります。注記
を、このステップおよび次のステップのスキーマ名に置き換えます。schema_1
ステップ 2: ソースデータベースのユーザーに特権を付与する
SQL *Plus または Oracle SQL Developer を使用して、インポートするデータが含まれている RDS for Oracle DB インスタンスに接続します。必要に応じて、ユーザーアカウントを作成し、必要なアクセス許可を付与します。
注記
移行元のデータベースが Amazon RDS インスタンスの場合、このステップは省略できます。エクスポートを行うには、Amazon RDS マスターユーザーアカウントを使用します。
次のコマンドでは、新しいユーザーを作成し、必要なアクセス許可を付与します。
CREATE USER export_user IDENTIFIED BY my-password
;
GRANT CREATE SESSION, CREATE TABLE, CREATE DATABASE LINK TO export_user;
ALTER USER export_user QUOTA 100M ON users;
GRANT READ, WRITE ON DIRECTORY data_pump_dir TO export_user;
GRANT SELECT_CATALOG_ROLE TO export_user;
GRANT EXECUTE ON DBMS_DATAPUMP TO export_user;
GRANT EXECUTE ON DBMS_FILE_TRANSFER TO export_user;
注記
セキュリティ上のベストプラクティスとして、ここに示されているプロンプト以外のパスワードを指定してください。
ステップ 3: DBMS_DATAPUMP を使用してダンプファイルを作成する
ダンプファイルを作成するには、次の手順に従います。
-
管理ユーザーまたはステップ 2 で作成したユーザーとして、SQL*Plus または Oracle SQL Developer を使用してソースの Oracle インスタンスに接続します。移行元のデータベースが Amazon RDS for Oracle DB インスタンスである場合は、Amazon RDS マスターユーザーとして接続します。
-
Oracle Data Pump ユーティリティを使用してダンプファイルを作成します。
次のスクリプトでは、
DATA_PUMP_DIR
ディレクトリに sample.dmp というダンプファイルを作成します。DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN( operation => 'EXPORT' , job_mode => 'SCHEMA' , job_name => null ); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample.dmp' , directory => 'DATA_PUMP_DIR' , filetype => dbms_datapump.ku$_file_type_dump_file ); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl , filename => 'sample_exp.log' , directory => 'DATA_PUMP_DIR' , filetype => dbms_datapump.ku$_file_type_log_file ); DBMS_DATAPUMP.METADATA_FILTER( v_hdnl , 'SCHEMA_EXPR' , 'IN (''SCHEMA_1'')' ); DBMS_DATAPUMP.METADATA_FILTER( v_hdnl, 'EXCLUDE_NAME_EXPR', q'[IN (SELECT NAME FROM sys.OBJ$ WHERE TYPE# IN (66,67,74,79,59,62,46) AND OWNER# IN (SELECT USER# FROM SYS.USER$ WHERE NAME IN ('RDSADMIN','SYS','SYSTEM','RDS_DATAGUARD','RDSSEC') ) ) ]', 'PROCOBJ' ); DBMS_DATAPUMP.START_JOB(v_hdnl); END; /
注記
Data Pump ジョブは非同期的に開始されます。Data Pump ジョブのモニタリングについては、Oracle ドキュメントの「ジョブステータスのモニタリング
」を参照してください。エクスポートログの内容は、 rdsadmin.rds_file_util.read_text_file
の手順を使用して表示できます。詳細については、「DB インスタンスディレクトリ内のファイルの読み取り」を参照してください。
ステップ 4: 移行先の DB インスタンスへのデータベースリンクを作成する
移行元の DB インスタンスと移行先の DB インスタンスの間にデータベースリンクを作成します。データベースリンクを作成してエクスポートダンプファイルを転送するには、DB インスタンスとのネットワーク接続がローカルの Oracle インスタンスに必要です。
このステップでは、前のステップと同じユーザーアカウントを使用して接続します。
同じ VPC 内またはピア接続された VPC 内の 2 つの DB インスタンス間のデータベースリンクを作成する場合、2 つの DB インスタンス間には有効なルートがある必要があります。各 DB インスタンスのセキュリティグループは他の DB インスタンスの受信と送信を許可する必要があります。セキュリティグループのインバウンドルールとアウトバウンドルールは、同じ VPC またはピアリング接続先 VPC からセキュリティグループを参照できます。詳細については、「VPC の DB インスタンスで使用するデータベースリンクの調整」を参照してください。
次のコマンドでは、ターゲットの DB インスタンスの Amazon RDS マスターユーザーに接続する to_rds
という名前のデータベースリンクを作成します。
CREATE DATABASE LINK to_rds
CONNECT TO <master_user_account>
IDENTIFIED BY <password>
USING '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<dns or ip address of remote db>
)
(PORT=<listener port>
))(CONNECT_DATA=(SID=<remote SID>
)))';
ステップ 5: DBMS_FILE_TRANSFER を使用して、エクスポートされたダンプファイルをターゲットの DB インスタンスにコピーする
DBMS_FILE_TRANSFER
を使用して、移行元のデータベースインスタンスから移行先の DB インスタンスにダンプファイルをコピーします。次のスクリプトでは、ソースのインスタンスから to_rds という名前のターゲットのデータベースリンク (前のステップで作成) に sample.dmp というダンプファイルをコピーします。
BEGIN
DBMS_FILE_TRANSFER.PUT_FILE(
source_directory_object => 'DATA_PUMP_DIR',
source_file_name => 'sample.dmp',
destination_directory_object => 'DATA_PUMP_DIR',
destination_file_name => 'sample_copied.dmp',
destination_database => 'to_rds' );
END;
/
ステップ 6: DBMS_DATAPUMP を使用してターゲットの DB インスタンスにデータファイルをインポートする
Oracle Data Pump を使用してスキーマを DB インスタンスにインポートします。METADATA_REMAP などの追加オプションが必要になる場合があります。
Amazon RDS マスターユーザーアカウントで DB インスタンスに接続し、インポートを実行します。
DECLARE
v_hdnl NUMBER;
BEGIN
v_hdnl := DBMS_DATAPUMP.OPEN(
operation => 'IMPORT',
job_mode => 'SCHEMA',
job_name => null);
DBMS_DATAPUMP.ADD_FILE(
handle => v_hdnl,
filename => 'sample_copied.dmp',
directory => 'DATA_PUMP_DIR',
filetype => dbms_datapump.ku$_file_type_dump_file );
DBMS_DATAPUMP.ADD_FILE(
handle => v_hdnl,
filename => 'sample_imp.log',
directory => 'DATA_PUMP_DIR',
filetype => dbms_datapump.ku$_file_type_log_file);
DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'SCHEMA_EXPR','IN (''SCHEMA_1
'')');
DBMS_DATAPUMP.START_JOB(v_hdnl);
END;
/
注記
Data Pump ジョブは非同期的に開始されます。Data Pump ジョブのモニタリングについては、Oracle ドキュメントの「ジョブステータスのモニタリングrdsadmin.rds_file_util.read_text_file
の手順を使用して表示できます。詳細については、「DB インスタンスディレクトリ内のファイルの読み取り」を参照してください。
DB インスタンスでユーザーのテーブルを表示することで、データのインポートを検証できます。例えば、次のクエリでは、
のテーブル数が返ります。schema_1
SELECT COUNT(*) FROM DBA_TABLES WHERE OWNER='SCHEMA_1
';
ステップ 7: クリーンアップ
データをインポートしたら、保管が不要になったファイルは削除できます。次のコマンドを使用して DATA_PUMP_DIR
のファイルを一覧表示できます。
SELECT * FROM TABLE(rdsadmin.rds_file_util.listdir('DATA_PUMP_DIR')) ORDER BY MTIME;
DATA_PUMP_DIR
内の不要になったファイルを削除するには、次のコマンドを使用します。
EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','<file name>
');
例えば、次のコマンドは、"sample_copied.dmp"
という名前のファイルが削除されます。
EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','sample_copied.dmp');