如何使用 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 文件