如何使用 Oracle Instant Client 來執行 Amazon RDS for Oracle 資料庫執行個體的 Data Pump 匯入或匯出?

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

我想要使用 impdp 和 expdp 用戶端來執行 Amazon Relational Database Service (Amazon RDS) for Oracle 資料庫執行個體的匯出和匯入。

解決方案

因為 Amazon RDS for Oracle 是受管資料庫,所以您沒有權限可以存取主機來使用 impdp 或 expdp 用戶端。如果您使用 Data Pump API 來執行匯入或匯出,您需要 PL/SQL 套件。Oracle Instant Client 是輕量型用戶端,可以安裝在您的電腦上或 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體上。Oracle Instant Client 包括 impdp 和 expdp 用戶端,可以用來從命令列執行匯出和匯入。

使用 Oracle Instant Client 之前,請執行下列作業:

  • 驗證文件 ID 553337.1 以檢查您正在下載的二進位檔案是否支援來源和目標版本的匯出。通常支援從具有相同版本或更新版本的用戶端匯出。支援使用與目標 Amazon RDS 主要版本相同的用戶端版本匯入。例如,如果來源執行個體的版本為 12.2,而目標執行個體的版本為 18c,則您可以安裝最新版本的 Oracle Instant 18c Client。
  • 若要使用 Data Pump,請在「基本」套件的基礎上安裝「工具」套件。若要安裝套件,請參閱 Oracle 文件以取得 Oracle Instant Client 的詳細資訊。
  • 請確定目標 RDS 執行個體的日光節約時間 (DST) 版本等於或晚於來源執行個體的日光節約時間 (DST) 版本。否則,您會收到 ORA-39405 錯誤。使用下列查詢來檢查執行個體的目前 DST 版本。若要將 DST 版本更新為最新的可用版本,請使用 TIMEZONE_FILE_AUTOUPGRADE 選項。
SELECT * FROM V$TIMEZONE_FILE;

若要使用 Oracle Instant Client 透過資料庫連結來測試 Data Pump 匯入或匯出,請執行下列作業:

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 Instant Client
此處理程序會在預設位置 /usr/lib/oracle/example-client-version/client64 安裝二進位檔案。例如,如果您下載 19.8 版的二進位檔案,則安裝的預設二進位檔案位置是 /usr/lib/oracle/19.8/client64

5.    安裝 SQL*Plus Package (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 檔案中包含 Data Pump 匯入所需的 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 Data Pump 概觀Oracle 文件

DBMS_DATAPUMP 的 Oracle 文件

此文章是否有幫助?


您是否需要帳單或技術支援?