Oracle Instant Client を使用して Amazon RDS for Oracle DB インスタンスのデータポンプのインポートまたはエクスポートを実行するにはどうすればよいですか。

所要時間6分
0

impdp および expdp ユーティリティを使用して、Amazon Relational Database Service (Amazon RDS) for Oracle DB インスタンスへのエクスポートとインポートを実行したいと考えています。

簡単な説明

Amazon RDS for Oracle DB インスタンスへのエクスポートまたはインポートを実行するには、いくつかの方法があります。

環境を設定した後、次のことが可能です。

  • ソース Oracle RDS インスタンスからターゲット Oracle RDS インスタンスにテーブルをインポートします。
  • Oracle RDS インスタンスからデータをエクスポートし、Amazon Elastic Compute Cloud (EC2) インスタンスまたはリモートホスト上にダンプファイルをローカルに作成します。
  • Oracle RDS インスタンスからデータをエクスポートし、RDS ホスト上にダンプファイルを保存します。
  • RDS ホスト上にあるダンプファイルをインポートします。
  • S3 Integration オプションを使用して、RDS for Oracle DB インスタンスと Amazon Simple Storage Service (Amazon S3) バケット間でダンプファイルを転送します。

解決方法

マネージドサービスのエクスペリエンスを提供するために、RDS ホスト上の impdp と expdp ユーティリティを利用するためのホストレベルのアクセスは許可されていません。別のオプションとして、Data Pump API (DBMS_DATAPUMP) を使用して、インポートまたはエクスポートを実行することもできます。しかし、リモートホスト上で Data Pump ユーティリティを使用することで、このタスクを実行することができます。

Oracle Instant Client は、コンピューターまたは Amazon EC2 インスタンスにインストールすることができる軽量なクライアントです。Oracle Instant Client には、コマンドラインからエクスポートおよびインポート操作を実行するために使用できる impdp および expdp ユーティリティが含まれています。

前提条件

Oracle Instant Client を使用する前に、次の操作を行ってください。

  • Doc ID 553337.1 を確認して、ダウンロードしているバイナリがソースバージョンとターゲットバージョンに互換性があるかどうかを確認します。通常は、同等またはそれ以降のバージョンのクライアントからのエクスポートがサポートされます。ターゲットの Amazon RDS メジャーバージョンと同じクライアントバージョンを使用したインポートがサポートされています。たとえば、ソースインスタンスのバージョンが 12.2 で、ターゲットインスタンスのバージョンが 19c の場合、最新の 19c バージョンの Oracle Instant Client をインストールできます。
  • Data Pump を使用するには、Basic パッケージの上にツールパッケージをインストールします。パッケージをインストールするには、Oracle Instant Client ドキュメントを参照してください。
  • ターゲット RDS インスタンスの夏時間 (DST) バージョンがソースインスタンスのそれと同じか遅いことを確認してください。そうでない場合は、インポートの実行中に次のようなエラーが発生します。ORA-39405次のクエリを使用して、インスタンスの現在の DST バージョンを確認します。Oracle RDS インスタンスで DST バージョンを利用可能な最新バージョンに更新するには、TIMEZONE_FILE_AUTOUPGRADE オプションを使用します。
SELECT * FROM V$TIMEZONE_FILE;

Oracle Instant Client を使用してデータベースリンクからデータポンプのインポートまたはエクスポートをテストするには、次の手順を実行します。

1.    Amazon Linux 2 オペレーティングシステムを使用して、テスト用 Amazon EC2 インスタンスを作成します。

2.    Basic (RPM) パッケージ、Tools (RPM) パッケージ、SQL*Plus (RPM) パッケージをダウンロードします。本記事では、次の RPM が最新のダウンロード可能なものです。

  • oracle-instantclient19.16-basic-19.16.0.0.0-1.x86_64.rpm
  • oracle-instantclient19.16-tools-19.16.0.0.0-1.x86_64.rpm
  • oracle-instantclient19.16-sqlplus-19.16.0.0.0-1.x86_64.rpm

3.    バイナリを EC2 インスタンスに転送します。詳細については、SCP クライアントを使用して Linux インスタンスにファイルを転送するを参照してください。

4.    Oracle のドキュメントのRPM を使用した Oracle Instant Client のインストールの手順に従います。このプロセスにより、バイナリはデフォルトの場所 /usr/lib/oracle/example-client-version/client64 にインストールされます。たとえば、バージョン 19.16 のバイナリをダウンロードした場合、インストールのデフォルトのバイナリの場所は /usr/lib/oracle/19.16/client64/bin になります。

5.    SQL*Plus パッケージ (RPM) パッケージをインストールします。SQL*Plus は、EC2 インスタンスと RDS インスタンス間の接続をテストするために使用されます。

例:

sudo yum install oracle-instantclient19.16-sqlplus-19.16.0.0.0-1.x86_64.rpm

6.    この例に見られるように、次の環境変数を設定または更新します。

export PATH=$PATH:/usr/lib/oracle/19.16/client64/bin
export LD_LIBRARY_PATH=/usr/lib/oracle/19.16/client64/lib

7.    tnsnames.orasqlnet.ora などの設定ファイルを次の場所に作成します。/usr/lib/oracle/ example-client-version/client64/lib/network/adminこの例では、場所は /usr/lib/oracle/19.16/client64/lib/network/admin になります。

環境の設定

1.    データポンプのインポートまたはエクスポートに必要な TNS エントリを tnsnames.ora ファイルに追加します。

tnsnames.ora ファイルのエントリの例:

target = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) 
   (HOST = xxxx.rxrxrmwt1x471wi.eu-central-1.rds.amazonaws.com) (PORT = 1521)))(CONNECT_DATA = (SID = orcl)))

詳細については、Oracle DB インスタンスで SSL を使用するための SQL*Plus の設定を参照してください。

2.EC2 インスタンスからの接続を許可するように、ソース RDS インスタンスとターゲット RDS インスタンスのセキュリティグループのインバウンドルールを更新します。

3.ソース RDS インスタンスにテストテーブルを作成し、次のようなクエリを実行してエクスポートを実行します。

CREATE TABLE TEST1 AS SELECT * FROM DBA_TABLES;
CREATE TABLE TEST2 AS SELECT * FROM DBA_OBJECTS;
CREATE TABLE TEST3 AS SELECT * FROM DBA_DATA_FILES;

ソース Oracle RDS インスタンスからターゲット Oracle RDS インスタンスにテーブルをインポートする

ソース Oracle RDS インスタンスからターゲット Oracle RDS インスタンスにテーブルをインポートするには、次の手順を実行します。

1.    次の例のようなクエリを実行して、ソースデータベースとターゲットデータベースの間にデータベースリンクを作成します。これは network_link パラメータと一緒に使用します。

CREATE DATABASE LINK sample_conn CONNECT TO example-username IDENTIFIED BY example-password USING '(DESCRIPTION = (ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = example-hostname)(PORT = example-port)))(CONNECT_DATA =(SERVICE_NAME = example-service-name)))';

ターゲットインスタンスをソースインスタンスに接続するデータベースリンクは、ターゲットインスタンスの接続を許可するインバウンドルールを備えています。

2.    impdp コマンドを実行する前に、この記事で説明した前提条件とセットアップを完了させておきます。

3.    Oracle インスタントクライアントを含む EC2 インスタンスにログインします。

4.    ソースインスタンスからターゲットインスタンスにデータをインポートするには、次のようなコマンドを実行します。

impdp admin@target directory=data_pump_dir logfile=imp_test_tables_using_nw_link.log tables=admin.test1,admin.test2,admin.test3 network_link=sample_conn

出力例:

Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Starting "ADMIN"."SYS_IMPORT_TABLE_01":  admin/********@target directory=data_pump_dir logfile=imp_test_tables_using_nw_link.log tables=admin.test1,admin.test2,admin.test3 network_link=sample_conn
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 3.625 MB
Processing object type TABLE_EXPORT/TABLE/TABLE
. . imported "ADMIN"."TEST2"                              20634 rows
. . imported "ADMIN"."TEST1"                               1537 rows
. . imported "ADMIN"."TEST3"                                  6 rows
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type TABLE_EXPORT/TABLE/STATISTICS/MARKER
Job "ADMIN"."SYS_IMPORT_TABLE_01" successfully completed at Wed Oct 14 23:57:28 2020 elapsed 0 00:01:06

Oracle RDS インスタンスからデータをエクスポートし、リモートホストにダンプファイルをローカルに作成する

Oracle RDS インスタンスからデータをエクスポートし、ダンプファイルをローカルに作成するには、次を実行します。

  • EC2 インスタンスまたはリモートホストに Oracle データベースをインストールします。次の例では、Oracle XE が Windows EC2 インスタンスにインストールされています。Oracle XE の詳細については、「Oracle Database XE クイックスタート」を参照してください。
  • EC2 インスタンスからの接続を許可するように、ソース RDS インスタンスのセキュリティグループのインバウンドルールを更新します。

1.    SQL*Plus などの Oracle Client を使用して、XE データベースにログインします。次に、Oracle XE データベース上にディレクトリを作成します。このディレクトリは、EC2 インスタンス上でダンプファイルを作成するディレクトリを参照することになります。次のようなクエリを実行します。

create directory exp_dir as 'C:\TEMP\';

2.    XE データベース上で、この例のようなコマンドを使用して、ソース RDS データベースへのデータベースリンクを作成します。

CREATE DATABASE LINK exp_rds CONNECT TO admin identified by example_password USING '(DESCRIPTION = (ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = example-hostname)(PORT=example-port)))(CONNECT_DATA =(SERVICE_NAME = example-service-name)))';

3.    次のようなデータベースリンクをテストします。

select sysdate from dual@exp_rds;

4.    EC2 インスタンス上でダンプファイルを作成するために、次のようなコマンドを実行します。

expdp system network_link=exp_rds directory=exp_dir dumpfile=table_dump.dmp logfile=expdp_table_dump.log tables=admin.test1,admin.test2,admin.test3

出力例:

Connected to: Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production Warning: Oracle Data Pump operations are not typically needed when connected to the root or seed of a container database. Starting "SYSTEM"."SYS_EXPORT_TABLE_01": system/********
    network_link=exp_rds directory=exp_dir dumpfile=table_dump.dmp logfile=expdp_table_dump.log tables=admin.test1,admin.test2,admin.test3 Processing object type TABLE_EXPORT/TABLE/TABLE_DATA Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
    Processing object type TABLE_EXPORT/TABLE/STATISTICS/MARKER
Processing object type TABLE_EXPORT/TABLE/TABLE . . exported "ADMIN"."TEST2" 2.713 MB  23814 rows. . exported "ADMIN"."TEST1"  677.1 KB  1814 rows. . exported "ADMIN"."TEST3"  15.98 KB  5 rows Master table "SYSTEM"."SYS_EXPORT_TABLE_01"
    successfully loaded/unloaded ****************************************************************************** Dump file set for SYSTEM.SYS_EXPORT_TABLE_01 is:   C:\TEMP\TABLE_DUMP.DMP
Job "SYSTEM"."SYS_EXPORT_TABLE_01" successfully completed at Wed Aug 24 18:15:25 2022 elapsed 0 00:00:18

Oracle RDS インスタンスからデータをエクスポートし、RDS ホスト上にダンプファイルを保存する

Oracle RDS インスタンスからデータをエクスポートし、RDS ホスト上にダンプファイルを保存するには、次を実行します。

1.    expdp コマンドを実行する前に、この記事で説明した前提条件とセットアップを完了させておきます。

2.    Oracle インスタントクライアントを含む EC2 インスタンスにログインします。

3.    次のようなコマンドを実行して、RDS インスタンス上にダンプファイルを作成します。

expdp admin@target dumpfile=table_dump.dmp logfile=expdp_table_dump.log tables=admin.test1,admin.test2,admin.test3

出力例:

Export: Release 19.0.0.0.0 - Production on Wed Aug 24 16:18:58 2022
Version 19.16.0.0.0
Copyright (c) 1982, 2022, Oracle and/or its affiliates.  All rights reserved.
Password:
Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Starting "ADMIN"."SYS_EXPORT_TABLE_01":  admin/********@target dumpfile=table_dump.dmp logfile=expdp_table_dump.log tables=admin.test1,admin.test2,admin.test3
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type TABLE_EXPORT/TABLE/STATISTICS/MARKER
Processing object type TABLE_EXPORT/TABLE/TABLE
. . exported "ADMIN"."TEST2"                             2.713 MB   23814 rows
. . exported "ADMIN"."TEST1"                             677.1 KB    1814 rows
. . exported "ADMIN"."TEST3"                             15.98 KB       5 rows
Master table "ADMIN"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for ADMIN.SYS_EXPORT_TABLE_01 is:
  /rdsdbdata/datapump/table_dump.dmp
Job "ADMIN"."SYS_EXPORT_TABLE_01" successfully completed at Wed Aug 24 16:19:20 2022 elapsed 0 00:00:15

RDS ホスト上にあるダンプファイルのインポート

RDS ホスト上に保存されているダンプファイルをインポートするには、次のようにします。

: この例では、データは RDS ホスト上の DATA_PUMP_DIR に存在します。

1.    impdp コマンドを実行する前に、この記事で説明した前提条件とセットアップを完了させておきます。

2.    インスタントクライアントを含む EC2 インスタンスにログインします。

3.    EC2 インスタンスで次のようなコマンドを実行し、RDS ホスト上にあるダンプファイルをインポートします。

: この例では、データをインポートする前にテーブルが切り捨てられます。

impdp admin@target directory=DATA_PUMP_DIR dumpfile=table_dump.dmp logfile=impdp_table_dump.log tables=admin.test1,admin.test2,admin.test3 table_exists_action=truncate

出力例:

import: Release 19.0.0.0.0 - Production on Thu Sep 8 13:24:44 2022
Version 19.16.0.0.0
Copyright (c) 1982, 2022, Oracle and/or its affiliates.  All rights reserved.
Password:
Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Master table "ADMIN"."SYS_IMPORT_TABLE_01" successfully loaded/unloaded
Starting "ADMIN"."SYS_IMPORT_TABLE_01":  admin/********@target directory=DATA_PUMP_DIR dumpfile=table_dump.dmp logfile=impdp_table_dump.log tables=admin.test1,admin.test2,admin.test3 table_exists_action=truncate
Processing object type TABLE_EXPORT/TABLE/TABLE
Table "ADMIN"."TEST2" exists and has been truncated. Data will be loaded but all dependent metadata will be skipped due to table_exists_action of truncate
Table "ADMIN"."TEST3" exists and has been truncated. Data will be loaded but all dependent metadata will be skipped due to table_exists_action of truncate
Table "ADMIN"."TEST1" exists and has been truncated. Data will be loaded but all dependent metadata will be skipped due to table_exists_action of truncate
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
. . imported "ADMIN"."TEST2"                             2.749 MB   24059 rows
. . imported "ADMIN"."TEST1"                             677.2 KB    1814 rows
. . imported "ADMIN"."TEST3"                             15.98 KB       5 rows
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type TABLE_EXPORT/TABLE/STATISTICS/MARKER
Job "ADMIN"."SYS_IMPORT_TABLE_01" successfully completed at Thu Sep 8 13:24:54 2022 elapsed 0 00:00:06

RDS for Oracle DB インスタンスと Amazon S3 バケット間でダンプファイルを転送する

RDS Oracle DB インスタンスと Amazon S3 バケット間でダンプファイルを転送するには、S3 Integration オプションを使用します。詳細については、Amazon RDS for Oracle と Amazon S3 バケットの間でファイルを転送するを参照してください。


関連情報

Oracle Data Pump の概要

DBMS_DATAPUMP

AWS公式
AWS公式更新しました 2年前
コメントはありません