Oracle Data Pump を使用したインポート
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_DATAPUMPPL/SQL パッケージ -
DBMS_METADATAPL/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_fileexpdpを使用します。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_1CREATE USERschema_1IDENTIFIED 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_1DECLARE 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-bucketDATA_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_1SELECT 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 USERschema_1IDENTIFIED 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 BYmy-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');