如何使用 Oracle 即时客户端为我的 Amazon RDS for Oracle 数据库实例运行数据泵导入或导出?

上次更新日期:2021 年 11 月 10 日

我想使用 impdp 和 expdp 客户端执行针对 Oracle 数据库实例的 Amazon Relational Database Service (Amazon RDS) 的导出和导入操作。

解决方案

由于 Amazon RDS for Oracle 是一个托管式数据库,因此您无权访问主机以使用 impdp 或 expdp 客户端。如果使用数据泵 API 执行导入或导出,则需要有 PL/SQL 程序包。Oracle 即时客户端是一款轻量级客户端,既可以安装在您的计算机中,也可以安装在 Amazon Elastic Compute Cloud (Amazon EC2) 实例中。Oracle 即时客户端包括可用于从命令行执行导出和导入的 impdp 和 expdp 客户端。

使用 Oracle 即时客户端前,请执行以下操作:

  • 验证文档 ID 553337.1 以检查您下载的二进制文件是否支持导出源版本和目标版本。通常支持从具有相同版本或更高版本的客户端导出。支持使用与目标 Amazon RDS 主要版本相同的客户端版本进行导入。例如,如果源实例的版本为 12.2,目标实例的版本为 18c,则可以安装最新版本的 Oracle 18c 即时客户端。
  • 要使用数据泵,请在基本程序包之上安装工具程序包。要安装这些程序包,请参阅 Oracle 即时客户端 的 Oracle 文档。
  • 确保目标 RDS 实例的夏令时 (DST) 版本等于或晚于源实例的夏令时版本。否则,您会收到 ORA-39405 错误。使用以下查询检查实例的当前 DST 版本。要将 DST 版本更新到最新的可用版本,请使用 TIMEZONE_FILE_AUTOUPGRADE 选项。
SELECT * FROM V$TIMEZONE_FILE;

要使用 Oracle 即时客户端通过数据库链接测试数据泵导入或导出,请执行以下操作:

1.    使用 Amazon Linux 2 操作系统创建测试 Amazon EC2 实例。

2.    下载基本 (RPM) 程序包和工具 (RPM) 程序包。在本文中,考虑下载以下 RPM:

        oracle-instantclient19.8-basic-19.8.0.0.0-1.x86_64.rpm

        oracle-instantclient19.8-tools-19.8.0.0.0-1.x86_64.rpm

3.    将二进制文件传输到 EC2 实例。有关更多信息,请参阅使用 SCP 客户端将文件传输到 Linux 实例

4.    按照 Oracle 文档中有关通过 RPM 在 Linux 上安装 Oracle 即时客户端的说明进行操作。
此过程将二进制文件安装在默认位置 /usr/lib/oracle/example-client-version/client64。例如,如果您下载版本 19.8 的二进制文件,则安装的默认二进制文件位置为 /usr/lib/oracle/19.8/client64

5.    安装 SQL*Plus 程序包 (RPM) 以测试 EC2 实例和 RDS 实例之间的连接。

6.    设置或更新以下环境变量:

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

7.    通过运行类似于以下的命令来创建用于存储 tnsnames.ora 的自定义目录。将 TNS_ADMIN 环境变量设置为指向该目录。

mkdir -p /root/tnsentries

请确保此目录下包含 tnsnames.ora 文件。

运行以下命令以确保 TNS_ADMIN 环境变量指向该目录。

export TNS_ADMIN=/root/tnsentries

8.    在 tnsnames.ora 文件中包含数据泵导入所需的 TNS 条目。

9.    更新源和目标 RDS 实例的安全组的入站规则,以允许来自 EC2 实例的连接。

10.    在源 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;

11.    运行类似于以下内容的查询,在源数据库和目标数据库之间创建要与 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)))';

由于您使用数据库链接从目标实例连接到源实例,因此源数据库的入站规则设置为允许连接目标实例。

12.    要将数据从源实例导入到目标实例,请运行类似于以下的命令:

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 数据泵概述Oracle 文档

DBMS_DATAPUMP 的 Oracle 文档

这篇文章对您有帮助吗?


您是否需要账单或技术支持?