Oracle Data Pump を使用したインポート - Amazon Relational Database Service

Oracle Data Pump を使用したインポート

Oracle Data Pump は、Oracle エクスポート/インポートユーティリティとして長期間使用されてきました。Oracle Data Pump は、Oracle のインストールから Amazon RDS DB インスタンスに大量のデータを移行する際に推奨される方法でもあります。Oracle Data Pump は、次のようなさまざまなシナリオで使用できます。

  • Oracle データベース (オンプレミスまたは Amazon EC2 インスタンス) から Amazon 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 Database のバージョン間で移行する場合の互換性に関する考慮事項については、Oracle のドキュメントを参照してください。

Oracle Data Pump を使用してデータをインポートするときは、データを含むダンプファイルをソースデータベースからターゲットデータベースに転送する必要があります。ダンプファイルを転送するには、Amazon S3 バケットを使用するか、2 つのデータベース間のデータベースリンクを使用します。

Oracle Data Pump を使用して Oracle DB インスタンスにデータをインポートする場合は、次のベストプラクティスをお勧めします。

  • 特定のスキーマやオブジェクトをインポートするには、schema または table モードでインポートを実行します。

  • インポートするスキーマをアプリケーションに必要なスキーマに制限します。

  • full モードではインポートしないでください。

    Amazon RDS for Oracle では、管理ユーザー SYS または SYSDBA へのアクセスは許可されていないため、full モードでインポートしたり、Oracle 管理のコンポーネントのスキーマをインポートしたりすると、Oracle データディレクトリが損傷し、データベースの安定性に影響を及ぼす可能性があります。

  • 大量のデータをロードする場合は、以下の操作を実行します。

    1. ダンプファイルを、ターゲットの Amazon RDS for Oracle DB インスタンスに転送します。

    2. インスタンスのDB スナップショットを取得します。

    3. インポートをテストして、これが成功することを確認します。

    データベースコンポーネントが無効の場合は、DB インスタンスを削除後、DB スナップショットから再作成します。復元された DB インスタンスには、DB スナップショットの作成時に DB インスタンス上でステージングされたダンプファイルがすべて含まれています。

  • Oracle Data Pump エクスポートパラメータ TRANSPORT_TABLESPACESTRANSPORTABLE、または TRANSPORT_FULL_CHECK を使用して作成されたダンプファイルはインポートしないでください。Amazon RDS for Oracle DB インスタンスでは、これらのダンプファイルのインポートはサポートされていません。

  • SYSSYSTEMRDSADMINRDSSECRDS_DATAGUARD の Oracle スケジューラオブジェクトを含み、以下のカテゴリに属するダンプファイルをインポートしないでください。

    • ジョブ

    • プログラム

    • スケジュール

    • チェーン

    • ルール

    • 評価コンテキスト

    • ルールセット

    Amazon RDS for Oracle DB インスタンスでは、これらのダンプファイルのインポートはサポートされていません。

注記

サポートされていない 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 データベースにデータをインポートする方法の 1 つを示しています。ただし、Oracle Data Pump では、さまざまな方法でデータをインポートできます。Oracle Data Pump の詳細については、Oracle データベースドキュメントを参照してください。

このセクションの例では DBMS_DATAPUMP パッケージを使用します。同じタスクは、Oracle Data Pump コマンドラインユーティリティの impdp および expdp を使用して実行できます。これらのユーティリティは、Oracle インスタントクライアントを含む Oracle クライアントインストールの一部としてリモートホストにインストールできます。

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 パッケージを使用して、コピーしたダンプファイルのデータを Amazon RDS for Oracle DB インスタンス内にインポートします。

このプロセスには、次の要件があります。

  • ファイル転送に使用できる 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 を使用します。

Oracle Data Pump と Amazon S3 バケットを使用したインポートプロセスには、次のステップがあります。

ステップ 1: ターゲットの Amazon RDS インスタンスのユーザーに特権を付与する

ターゲットの RDS インスタンスのユーザーに特権を付与するには、次のステップを行います。

  1. SQL Plus や Oracle SQL Developer を使用して、データをインポートする先の Amazon RDS Oracle DB インスタンスに接続します。Amazon RDS マスターユーザーとして接続します。DB インスタンスへの接続方法については、「Oracle DB インスタンスへの接続」を参照してください。

  2. データをインポートする前に、必要なテーブルスペースを作成します。詳細については、「テーブルスペースの作成とサイズ変更」を参照してください。

  3. データのインポート先のユーザーアカウントが存在しない場合は、ユーザーアカウントを作成し、必要なアクセス許可とロールを付与します。データを複数のユーザースキーマにインポートする場合は、各ユーザーアカウントを作成し、それぞれ必要な特権およびロールを付与します。

    例えば、以下のコマンドでは、新しいユーザーを作成して、ユーザーのスキーマ内にデータをインポートするために必要なアクセス許可とロールを付与します。

    CREATE USER schema_1 IDENTIFIED BY <password>; GRANT CREATE SESSION, RESOURCE TO schema_1; ALTER USER schema_1 QUOTA 100M ON users;

    この例では、新規ユーザーに特権 CREATE SESSION とロール RESOURCE を付与します。インポートするデータベースオブジェクトによっては、特権とロールの追加が必要になる場合があります。

    注記

    schema_1 を、このステップおよび次のステップのスキーマ名に置き換えます。

ステップ 2: DBMS_DATAPUMP を使用してダンプファイルを作成する

管理ユーザーとして、SQL Plus または Oracle SQL Developer を使用してソースの Oracle インスタンスに接続します。移行元のデータベースが Amazon RDS for Oracle DB インスタンスである場合は、Amazon RDS マスターユーザーとして接続します。次に、Oracle Data Pump ユーティリティを使用してダンプファイルを作成します。

次のスクリプトでは、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 S3 バケットにアップロードします。

Amazon RDS プロシージャ rdsadmin.rdsadmin_s3_tasks.upload_to_s3 を使用して、Amazon S3 バケットにダンプファイルをコピーします。次の例では、DATA_PUMP_DIR ディレクトリのすべてのファイルを、mys3bucket という名前の Amazon S3 バケットにアップロードします。

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'mys3bucket', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

SELECT ステートメントでは、データ型 VARCHAR2 のタスクの ID が返ります。

詳細については、「RDS for Oracle DB インスタンスから Amazon S3 バケットにファイルをアップロードする」を参照してください。

ステップ 4: エクスポートしたダンプファイルを Amazon S3 バケットからターゲットの DB インスタンスにコピーする

SQL Plus や Oracle SQL Developer を使用して、Amazon RDS ターゲットの Oracle DB インスタンスに接続します。Amazon RDS プロシージャ rdsadmin.rdsadmin_s3_tasks.download_from_s3 を使用して、Amazon S3 バケットからターゲットの DB インスタンスにダンプファイルをコピーします。次の例では、mys3bucket という名前の Amazon S3 バケットから DATA_PUMP_DIR ディレクトリにファイルをすべてダウンロードします。

SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'mys3bucket', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

SELECT ステートメントでは、データ型 VARCHAR2 のタスクの ID が返ります。

詳細については、「Amazon S3 バケットから Oracle DB インスタンスにファイルをダウンロードする」を参照してください。

ステップ 5: 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';

ステップ 6: クリーンアップ

データをインポートしたら、保管が不要になったファイルは削除できます。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');

次のインポートプロセスでは、Oracle Data Pump と Oracle DBMS_FILE_TRANSFER パッケージを使用します。このプロセスでは、ソースの Oracle インスタンス (オンプレミスまたは Amazon EC2 インスタンス、あるいは Amazon RDS for Oracle DB インスタンス) に接続します。次に、DBMS_DATAPUMP パッケージを使用してデータをエクスポートします。次に、DBMS_FILE_TRANSFER.PUT_FILE メソッドを使用して、Oracle インスタンスのダンプファイルを、データベースリンクを使用して接続されているターゲットの Amazon RDS for Oracle DB インスタンスの DATA_PUMP_DIR ディレクトリにコピーします。最後のステップでは、 DBMS_DATAPUMP パッケージを使用して、コピーしたダンプファイルのデータを Amazon RDS for Oracle DB インスタンス内にインポートします。

このプロセスには、次の要件があります。

  • DBMS_FILE_TRANSFER パッケージと DBMS_DATAPUMP パッケージに対する実行権限が必要です。

  • 移行元の DB インスタンスの DATA_PUMP_DIR ディレクトリに対する書き込み権限が必要です。

  • 移行元のインスタンスと移行先の DB インスタンスにダンプファイルを保存するための十分なストレージ領域が必要です。

注記

このプロセスでは、DATA_PUMP_DIR ディレクトリ (すべての Oracle DB インスタンスで事前に設定されているディレクトリ) にダンプファイルをインポートします。このディレクトリはデータファイルと同じストレージボリュームにあります。ダンプファイルをインポートした場合、既存の Oracle データファイルのスペース占有率は高くなります。そのため、DB インスタンスではスペースの追加占有に対応できることを確認する必要があります。インポートしたダンプファイルは、DATA_PUMP_DIR ディレクトリから自動的に削除またはパージされることはありません。インポートしたダンプファイルを削除するには、Oracle ウェブサイトにある UTL_FILE.FREMOVE を使用します。

Oracle Data Pump と DBMS_FILE_TRANSFER バケットを使用したインポートプロセスでは、次のステップを使用します。

ステップ 1: ターゲットの Amazon RDS インスタンスのユーザーに特権を付与する

ターゲットの RDS インスタンスのユーザーに特権を付与するには、次のステップを行います。

  1. SQL Plus や Oracle SQL Developer を使用して、データをインポートする先の Amazon RDS Oracle DB インスタンスに接続します。Amazon RDS マスターユーザーとして接続します。DB インスタンスへの接続方法については、「Oracle DB インスタンスへの接続」を参照してください。

  2. データをインポートする前に、必要なテーブルスペースを作成します。詳細については、「テーブルスペースの作成とサイズ変更」を参照してください。

  3. データのインポート先のユーザーアカウントが存在しない場合は、ユーザーアカウントを作成し、必要なアクセス許可とロールを付与します。データを複数のユーザースキーマにインポートする場合は、各ユーザーアカウントを作成し、それぞれ必要な特権およびロールを付与します。

    例えば、以下のコマンドでは、新しいユーザーを作成して、ユーザーのスキーマ内にデータをインポートするために必要なアクセス許可とロールを付与します。

    CREATE USER schema_1 IDENTIFIED BY <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 を使用して、インポートするデータが含まれている Oracle インスタンスに接続します。必要に応じて、ユーザーアカウントを作成し、必要なアクセス許可を付与します。

注記

移行元のデータベースが Amazon RDS インスタンスの場合、このステップは省略できます。エクスポートを行うには、Amazon RDS マスターユーザーアカウントを使用します。

次のコマンドでは、新しいユーザーを作成し、必要なアクセス許可を付与します。

CREATE USER export_user IDENTIFIED BY <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 インスタンスとのネットワーク接続がローカルの 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');