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

6 分钟阅读
0

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

简短描述

有多种方法可以导出或导入 Amazon RDS for Oracle 数据库实例。

设置环境后,您可以:

  • 将表从源 Oracle RDS 实例导入到目标 Oracle RDS 实例。
  • 从 Oracle RDS 实例导出数据,然后在 Amazon Elastic Compute Cloud (EC2) 实例或远程主机上本地创建转储文件。
  • 从 Oracle RDS 实例导出数据并将转储文件存储在 RDS 主机上。
  • 导入位于 RDS 主机上的转储文件。
  • 使用 S3 集成选项在 RDS for Oracle 数据库实例和 Amazon Simple Storage Service (Amazon S3) 存储桶之间传输转储文件。

解决方法

为了提供托管服务体验,不允许使用 RDS 主机上的 impdp 和 expdp 实用程序进行主机级访问。另一种选择是使用数据泵 API (DBMS_DATAPUMP) 来执行导入或导出。但是,您可以使用远程主机上的数据泵实用程序来执行此任务。

Oracle 即时客户端是一个轻量级客户端,您可以将其安装在您的计算机或 Amazon EC2 实例上。Oracle 及时客户端包含 impdp 和 expdp 实用程序,您可以使用它们从命令行执行导出和导入操作。

先决条件

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

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

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

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

2.    下载基本 (RPM) 程序包、工具 (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 即时客户端的说明进行操作。此过程将二进制文件安装在默认位置 /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.    在以下位置:/usr/lib/oracle/ example-client-version/client64/lib/network/admin 创建配置文件(例如,tnsnames.orasqlnet.ora)。在本示例中,该位置为:/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)))

有关更多信息,请参阅配置 SQL*Plus 以将 SSL 与 Oracle 数据库实例一起使用

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

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 数据库 XE 快速入门
  • 更新源 RDS 实例的安全组的入站规则,以允许来自 EC2 实例的连接。

1.    通过 Oracle 客户端(例如,SQL*Plus)登录 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 数据库实例和 Amazon S3 存储桶之间传输转储文件

要在 RDS Oracle 数据库实例和 Amazon S3 存储桶之间传输转储文件,您可以使用 S3 集成选项。有关更多信息,请参阅在 Amazon RDS for Oracle 和 Amazon S3 存储桶之间传输转储文件


相关信息

Oracle 数据泵概述

DBMS_DATAPUMP

AWS 官方
AWS 官方已更新 1 年前