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

6 分的閱讀內容
0

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

簡短描述

有幾種方法可以執行 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 公用程式的主機層級存取行為。替代方案是使用 Data Pump API (DBMS_DATAPUMP) 來執行匯入或匯出。但是,您可以使用遠端主機上的 Data Pump 公用程式來執行此工作。

Oracle Instant Client 是輕量型的用戶端,可安裝至電腦或 Amazon EC2 執行個體上。Oracle Instant Client 包括 impdp 和 expdp 公用程式,您可以使用這些公用程式從命令列執行匯出和匯入作業。

先決條件

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

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

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

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

5.    安裝 SQL*Plus Package (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.    在 tnsnames.ora 檔案中新增 Data Pump 匯入或匯出所需的 TNS 項目。

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.    執行類似於下列範例的查詢,在來源資料庫和目標資料庫之間建立資料庫連結。這要搭配網路連結參數使用:

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 Instant Client 的 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 執行個體匯出資料並在本機建立傾印檔案,請執行下列操作:

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 Instant Client 的 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.    登入包含 Instant Client 的 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 儲存貯體之間傳輸檔案


相關資訊

Overview of Oracle Data Pump (Oracle Data Pump 概觀)

DBMS_DATAPUMP

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