使用 Oracle Data Pump 匯入 - Amazon Relational Database Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Oracle Data Pump 匯入

Oracle Data Pump 是一個公用程式,可讓您將 Oracle 資料匯出至傾印檔案,並將其匯入至另一個 Oracle 資料庫。是 Oracle 匯出/匯入公用程式的長期替代方案。將大量資料從 Oracle 資料庫移動到 Amazon RDS 資料庫執行個體時,建議使用 Oracle Data Pump。

本節中的範例顯示將資料匯入 Oracle 資料庫的一種方法,但是 Oracle Data Pump 支援其他技術。如需詳細資訊,請參閱 Oracle 資料庫文件

本節中的範例使用 DBMS_DATAPUMP 套件。您可以使用 Oracle Data Pump 命令列公用程式 impdpexpdp 來完成相同的工作。您可以在安裝 Oracle 用戶端 (包括 Oracle Instant Client) 期間,將這些公用程式安裝在遠端主機上。如需詳細資訊,請參閱《如何使用 Oracle 用戶端為我的 Amazon RDS for Oracle 資料庫執行個體執行 Data Pumt 來匯入或匯出?

Oracle Data Pump 概觀

Oracle Data Pump 由下列元件組成:

  • 命令列用戶端 expdpimpdp

  • DBMS_DATAPUMP PL/SQL 套件

  • DBMS_METADATA PL/SQL 套件

Oracle Data Pump 可以用於以下案例:

  • 將資料由 Oracle 資料庫 (內部部署或 Amazon EC2 執行個體) 匯入 RDS for Oracle 資料庫執行個體。

  • 將資料從 RDS for Oracle 資料庫執行個體匯入 Oracle 資料庫 (內部部署或 Amazon EC2 執行個體)。

  • 在 RDS for Oracle 資料庫執行個體之間匯入資料 (例如將資料從 EC2-Classic 遷移到 VPC)。

如需下載 Oracle Data Pump 公用程式,請參閱 Oracle Technology Network 網站的 Oracle 資料庫軟體下載。如需了解在 Oracle 資料庫各版本間遷移的相容性考量,請參閱 Oracle 資料庫文件

Oracle Data Pump 工作流程

通常,您會在下列階段使用 Oracel Data Pump:

  1. 將資料匯出至來源資料庫上的傾印檔案。

  2. 將傾印檔案上傳至目的地 RDS for Oracle 資料庫執行個體。您可使用 Amazon S3 儲存貯體或兩個資料庫之間的資料庫連結進行傳輸。

  3. 將資料從傾印檔案匯入 RDS for Oracle 資料庫執行個體。

Oracle Data Pump 最佳實務

當您使用 Oracle Data Pump 將資料匯入 RDS for Oracle 執行個體時,我們建議您採用下列最佳實務:

  • schematable 模式執行匯入,以匯入特定結構描述及物件。

  • 匯入的結構描述僅限於應用程式需要的結構描述。

  • 請勿匯入 full 模式或匯入系統維護元件的結構描述。

    由於 RDS for Oracle 不允許存取 SYSSYSDBA 管理使用者,這些動作可能會損害 Oracle 資料目錄,進而影響資料庫的穩定度。

  • 當載入大量資料時,請執行下列作業:

    1. 將傾印檔案傳輸至目標 RDS for Oracle 資料庫執行個體。

    2. 拍攝您執行個體的資料庫快照。

    3. 測試匯入,以確認其是否成功。

    如果資料庫元件失效,您可以刪除資料庫執行個體,並由資料庫快照重新建立。還原的資料庫執行個體,包括您在製作資料庫快照時,暫存於資料庫執行個體的任何傾印檔案。

  • 請勿匯入使用 Oracle Data Pump 匯出參數 TRANSPORT_TABLESPACESTRANSPORTABLETRANSPORT_FULL_CHECK 建立的傾印檔案。RDS for Oracle 資料庫執行個體不支援匯入這些傾印檔案。

  • 請勿匯入包含 SYSSYSTEMRDSADMINRDSSECRDS_DATAGUARD 中之 Oracle Scheduler 物件的傾印檔案,且屬於下列類別:

    • 任務

    • 程式

    • Schedules

    • Chain

    • 規則

    • 評估內容

    • 規則集

    RDS for Oracle 資料庫執行個體不支援匯入這些傾印檔案。

  • 若要排除不支援的 Oracle Scheduler 物件,請在 Data Pump 匯出期間使用其他指令。如果您使用 DBMS_DATAPUMP,您可以在 DBMS_METADATA.START_JOB 之前新增一個額外的 METADATA_FILTER

    DBMS_DATAPUMP.METADATA_FILTER( v_hdnl, 'EXCLUDE_NAME_EXPR', q'[IN (SELECT NAME FROM SYS.OBJ$ WHERE TYPE# IN (66,67,74,79,59,62,46) AND OWNER# IN (SELECT USER# FROM SYS.USER$ WHERE NAME IN ('RDSADMIN','SYS','SYSTEM','RDS_DATAGUARD','RDSSEC') ) ) ]', 'PROCOBJ' );

    如果您使用 expdp,請建立包含 exclude 下列範例中所示之指令的參數檔案。然後透過 PARFILE=parameter_file 命令使用 expdp

    exclude=procobj:"IN (SELECT NAME FROM sys.OBJ$ WHERE TYPE# IN (66,67,74,79,59,62,46) AND OWNER# IN (SELECT USER# FROM SYS.USER$ WHERE NAME IN ('RDSADMIN','SYS','SYSTEM','RDS_DATAGUARD','RDSSEC') ) )"

以 Oracle Data Pump 及 Amazon S3 儲存貯體匯入資料

以下匯入程序使用 Oracle Data Pump 及 Amazon S3 儲存貯體。步驟如下:

  1. 使用 Oracle DBMS_DATAPUMP 套件匯出來源資料庫上的資料庫。

  2. 將傾印檔案放入 Amazon S3 儲存貯體。

  3. 從 Amazon S3 儲存貯體將傾印檔案下載至目標 Amazon RDS for Oracle 資料庫執行個體的 DATA_PUMP_DIR 目錄。

  4. 使用套件 DBMS_DATAPUMP,將資料從複製的傾印檔案匯入 RDS for Oracle 資料庫執行個體。

要求以 Oracle Data Pump 及 Amazon S3 儲存貯體匯入資料

此程序有以下要求:

  • 請確定 Amazon S3 儲存貯體可用於檔案傳輸,而且 Amazon S3 儲存貯體與資料庫執行個體位於 AWS 區域 相同的位置。如需指示說明,請參閱《Amazon Simple Storage Service 入門指南》中的建立儲存貯體

  • 您上傳到 Amazon S3 儲存貯體的物件必須為 5 TB 或更少。如需在 Amazon S3 中使用物件的詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》。

    注意

    如果您傾印檔案超過 5 TB,您可以使用平行選項執行 Oracle Data Pump 匯出。這項作業會將資料分散到多個傾印檔案,讓您不會超過個別檔案的 5 TB 限制。

  • 您必須遵循 設定 IAM 許可權限以進行 RDS for Oracle 與 Amazon S3 的整合 的指示內容,準備 Amazon S3 儲存貯體進行 Amazon RDS 整合。

  • 您必須確定在來源執行個體和目前的資料庫執行個體上,有足夠的儲存空間可容納傾印檔案。

注意

此程序會將傾印檔案匯入 DATA_PUMP_DIR 目錄,這是在所有 Oracle 資料庫執行個體上預先設定好的目錄。此目錄和您的資料檔案位於相同的儲存磁碟區。您匯入傾印檔案時,現有 Oracle 資料檔案會使用更多空間。因此請確保資料庫執行個體能夠容納額外使用的空間。匯入的傾印檔案不會自動刪除或從 DATA_PUMP_DIR 目錄清除。如欲移除匯入的傾印檔案,請使用 Oracle 網站上的 UTL_FILE.FREMOVE

步驟 1:授予權限給 RDS for Oracle 目標資料庫執行個體上的資料庫使用者

在此步驟中,您會建立要匯入資料的結構描述,並授與使用者必要的權限。

若要在 Oracle 目標執行個體的 RDS 上建立使用者並授與必要權限
  1. 使用 SQL*Plus 或 Oracle SQL Developer 以主要使用者的身分登入,將 RDS for Oracle 資料庫執行個體連線至資料將匯入之處。如需連線至資料庫執行個體的詳細資訊,請參閱 連線至 RDS for Oracle 資料庫執行個體

  2. 匯入資料前,請先建立所需的資料表空間。如需詳細資訊,請參閱 建立和調整資料表空間的大小

  3. 如果接收匯入資料的使用者帳戶不存在,請建立使用者帳戶並授予所需的許可和角色。如果要將資料匯入多個使用者結構描述,請建立每個使用者帳戶並授予所需的權限和角色。

    例如,以下 SQL 陳述式會建立新的使用者,並授予必需的許可和角色,以便將資料匯入該使用者擁有的結構描述。請將此步驟及後續步驟的 schema_1 替換為結構描述名稱。

    CREATE USER schema_1 IDENTIFIED BY my_password; GRANT CREATE SESSION, RESOURCE TO schema_1; ALTER USER schema_1 QUOTA 100M ON users;
    注意

    指定此處所顯示提示以外的密碼,作為安全最佳實務。

    上述的陳述式會授予新使用者 CREATE SESSION 權限和 RESOURCE 角色。您可能會需要其他權限和角色,視您匯入的資料庫物件而定。

步驟 2:使用 DBMS_DAPUMP 將資料匯出倒傾印檔案

若要建立傾印檔案,請使用 DBMS_DATAPUMP 套件。

將 Oracle 資料匯出到傾印檔案
  1. 以管理使用者身分,使用 SQL Plus 或 Oracle SQL Developer 連線至來源 RDS for Oracle 資料庫執行個體。如果來源資料庫是 RDS for Oracle 資料庫執行個體,請以 Amazon RDS 主要使用者身分進行連線。

  2. 透過呼叫 DBMS_DATAPUMP 程序匯出資料。

    下列指令碼會匯出 SCHEMA_1 結構描述至 DATA_PUMP_DIR 目錄中名為 sample.dmp 的傾印檔案。以您要匯出之結構描述的名稱取代 SCHEMA_1

    DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN( operation => 'EXPORT', job_mode => 'SCHEMA', job_name => null ); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl , filename => 'sample.dmp' , directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file ); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample_exp.log', directory => 'DATA_PUMP_DIR' , filetype => dbms_datapump.ku$_file_type_log_file ); DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'SCHEMA_EXPR','IN (''SCHEMA_1'')'); DBMS_DATAPUMP.METADATA_FILTER( v_hdnl, 'EXCLUDE_NAME_EXPR', q'[IN (SELECT NAME FROM SYS.OBJ$ WHERE TYPE# IN (66,67,74,79,59,62,46) AND OWNER# IN (SELECT USER# FROM SYS.USER$ WHERE NAME IN ('RDSADMIN','SYS','SYSTEM','RDS_DATAGUARD','RDSSEC') ) ) ]', 'PROCOBJ' ); DBMS_DATAPUMP.START_JOB(v_hdnl); END; /
    注意

    Data Pump 會以非同步方式開始工作。如需有關監控 Data Pump 任務的詳細資訊,請參閱 Oracle 文件中的監控工作狀態

  3. (選用) 透過呼叫 rdsadmin.rds_file_util.read_text_file 程序檢視匯出日誌的內容。如需詳細資訊,請參閱 讀取資料庫執行個體目錄中的檔案

步驟 3:將傾印檔案上傳至 Amazon S3 儲存貯體

使用 Amazon RDS 程序 rdsadmin.rdsadmin_s3_tasks.upload_to_s3,將傾印檔案複製到 Amazon S3 儲存貯體。以下範例將所有檔案從 DATA_PUMP_DIR 目錄上傳至名為 DOC-EXAMPLE-BUCKET 的 Amazon S3 儲存貯體。

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'DOC-EXAMPLE-BUCKET', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

SELECT 陳述式以 VARCHAR2 資料類型傳回任務 ID。如需詳細資訊,請參閱 將檔案從 RDS for Oracle 資料庫執行個體上傳至 Amazon S3 儲存貯體

步驟 4:將傾印檔案從 Amazon S3 儲存貯體下載到您的目標資料庫執行個體

使用 Amazon RDS 程序 rdsadmin.rdsadmin_s3_tasks.download_from_s3 執行此步驟。當您將文件下載到目錄時,如果目錄中已存在名稱相同的檔案,則程序 download_from_s3 會略過下載。如欲從下載目錄移除檔案,請使用 Oracle 網站上的 UTL_FILE.FREMOVE

若要下載您的傾印檔案
  1. 開始 SQL*Plus 或 Oracle SQL Developer,並以主要身分登入 Amazon RDS 目標 Oracle 資料庫執行個體

  2. 使用 Amazon RDS 程序 rdsadmin.rdsadmin_s3_tasks.download_from_s3 下載傾印檔案。

    以下範例會從名為 DOC-EXAMPLE-BUCKET 的 Amazon S3 儲存貯體下載所有檔案至 DATA_PUMP_DIR 目錄。

    SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'DOC-EXAMPLE-BUCKET', p_directory_name => 'DATA_PUMP_DIR') AS TASK_ID FROM DUAL;

    SELECT 陳述式以 VARCHAR2 資料類型傳回任務 ID。如需詳細資訊,請參閱 將檔案從 Amazon S3 儲存貯體下載至 Oracle 資料庫執行個體

步驟 5:使用 DBMS_DATAPUMP 將您的傾印檔案匯入目標資料庫執行個體

使用 DBMS_DATAPUMP 將結構描述匯入 RDS for Oracle 資料庫執行個體。您可能需要額外選項,例如 METADATA_REMAP

將資料匯入目標資料庫執行個體
  1. 開始 SQL*Plus 或 SQL Developer,並以主要使用者身分登入 RDS for Oracle 資料庫執行個體。

  2. 通過調用DBMS_DATAPUMP程序導入數據。

    下列範例會從 sample_copied.dmpSCHEMA_1 資料匯入目標資料庫執行個體。

    DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN( operation => 'IMPORT', job_mode => 'SCHEMA', job_name => null); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample_copied.dmp', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample_imp.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'SCHEMA_EXPR','IN (''SCHEMA_1'')'); DBMS_DATAPUMP.START_JOB(v_hdnl); END; /
    注意

    Data Pump 工作會以非同步的方式啟動。如需有關監控 Data Pump 任務的詳細資訊,請參閱 Oracle 文件中的監控工作狀態。您可以使用 rdsadmin.rds_file_util.read_text_file 程序來檢視匯入日誌的內容。如需詳細資訊,請參閱 讀取資料庫執行個體目錄中的檔案

  3. 列出目標資料庫執行個體上的結構描述,以驗證資料匯入。

    例如,以下查詢會傳回 SCHEMA_1 的資料表數目。

    SELECT COUNT(*) FROM DBA_TABLES WHERE OWNER='SCHEMA_1';

步驟 6:清除

匯入資料後,您可以刪除不繼續保留的檔案。

若要移除不需要的檔案
  1. 開始 SQL*Plus 或 SQL Developer,並以主要使用者身分登入 RDS for Oracle 資料庫執行個體。

  2. 使用以下命令列出 DATA_PUMP_DIR 中的檔案。

    SELECT * FROM TABLE(rdsadmin.rds_file_util.listdir('DATA_PUMP_DIR')) ORDER BY MTIME;
  3. 使用以下命令刪除 DATA_PUMP_DIR 中不再需要的檔案。

    EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','filename');

    例如以下命令會刪除名為 sample_copied.dmp 的檔案。

    EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','sample_copied.dmp');

以下匯入程序會使用 Oracle Data Pump 和 Oracle DBMS_FILE_TRANSFER 套件。步驟如下:

  1. 連接至來源 Oracle 資料庫 (可以是內部部署資料庫、Amazon EC2 執行個體或 RDS for Oracle 資料庫執行個體)。

  2. 使用 DBMS_DATAPUMP 套件匯出資料。

  3. 使用 DBMS_FILE_TRANSFER.PUT_FILE 將傾印檔案從 Oracle 資料庫複製到目標 RDS for Oracle 資料庫執行個體的 DATA_PUMP_DIR 目錄 (資料庫執行個體使用資料庫連結與目標連線)。

  4. 使用套件 DBMS_DATAPUMP 將資料從複製的傾印檔案匯入 RDS for Oracle 資料庫執行個體。

使用 Oracle Data Pump 及 DBMS_FILE_TRANSFER 套件的匯入程序具有下列步驟。

匯入 Oracle Data Pump 及資料庫連結的要求

此程序有以下要求:

  • 您必須具有在 DBMS_FILE_TRANSFER 上和 DBMS_DATAPUMP 套件的執行權限。

  • 您必須有寫入來源資料庫執行個體 DATA_PUMP_DIR 目錄的權限。

  • 您必須確定在來源執行個體和目前的資料庫執行個體上,有足夠的儲存空間可容納傾印檔案。

注意

此程序會將傾印檔案匯入 DATA_PUMP_DIR 目錄,這是在所有 Oracle 資料庫執行個體上預先設定好的目錄。此目錄和您的資料檔案位於相同的儲存磁碟區。您匯入傾印檔案時,現有 Oracle 資料檔案會使用更多空間。因此請確保資料庫執行個體能夠容納額外使用的空間。匯入的傾印檔案不會自動刪除或從 DATA_PUMP_DIR 目錄清除。如欲移除匯入的傾印檔案,請使用 Oracle 網站上的 UTL_FILE.FREMOVE

步驟 1:授予權限給 RDS for Oracle 目標資料庫執行個體上的使用者

如欲向 RDS for Oracle 目標資料庫執行個體的使用者授予權限,請進行下列步驟:

  1. 使用 SQL Plus 或 Oracle SQL Developer,將 RDS for Oracle 資料庫執行個體連線至資料將匯入之處。以 Amazon RDS 主要使用者身分進行連線。如需連線至資料庫執行個體的詳細資訊,請參閱 連線至 RDS for Oracle 資料庫執行個體

  2. 匯入資料前,請先建立所需的資料表空間。如需更多詳細資訊,請參閱 建立和調整資料表空間的大小

  3. 如果接受匯入資料的使用者帳戶不存在,請建立使用者帳戶並授予所需的許可和角色。如果要將資料匯入多個使用者結構描述,請建立每個使用者帳戶並授予所需的權限和角色。

    例如,以下命令會建立名稱為 schema_1 的新使用者,並授予必需的許可和角色,以便將資料匯入該使用者的結構描述。

    CREATE USER schema_1 IDENTIFIED BY my-password; GRANT CREATE SESSION, RESOURCE TO schema_1; ALTER USER schema_1 QUOTA 100M ON users;
    注意

    指定此處所顯示提示以外的密碼,作為安全最佳實務。

    上述範例向新使用者授予 CREATE SESSION 權限及 RESOURCE 角色。您可能會需要其他權限和角色,視您匯入的資料庫物件而定。

    注意

    請將此步驟及後續步驟的 schema_1 替換為結構描述名稱。

步驟 2:向來源資料庫的使用者授予權限

使用 SQL*Plus 或 Oracle SQL Developer,連線至包含要匯入之資料的 RDS for Oracle 資料庫執行個體。如有需要,建立使用者帳戶並授予必需的許可。

注意

若來源資料庫是 Amazon RDS 執行個體,您可以略過此步驟。您會使用您的 Amazon RDS 主要使用者帳戶執行匯出。

以下命令會建立新的使用者並授予必需的許可。

CREATE USER export_user IDENTIFIED BY my-password; GRANT CREATE SESSION, CREATE TABLE, CREATE DATABASE LINK TO export_user; ALTER USER export_user QUOTA 100M ON users; GRANT READ, WRITE ON DIRECTORY data_pump_dir TO export_user; GRANT SELECT_CATALOG_ROLE TO export_user; GRANT EXECUTE ON DBMS_DATAPUMP TO export_user; GRANT EXECUTE ON DBMS_FILE_TRANSFER TO export_user;
注意

指定此處所顯示提示以外的密碼,作為安全最佳實務。

步驟 3:使用 DBMS_DATAPUMP 建立傾印檔案

若要建立傾印檔案,請執行下列步驟:

  1. 以管理使用者或您在步驟 2 建立的使用者身分,使用 SQL*Plus 或 Oracle SQL Developer 連線至來源 Oracle 資料庫。如果來源資料庫是 Amazon RDS for Oracle 資料庫執行個體,請以 Amazon RDS 主要使用者身分進行連線。

  2. 使用 Oracle Data Pump 公用程式建立傾印檔案。

    以下指令碼會在 DATA_PUMP_DIR 目錄中建立名為 sample.dmp 的傾印檔案。

    DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN( operation => 'EXPORT' , job_mode => 'SCHEMA' , job_name => null ); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample.dmp' , directory => 'DATA_PUMP_DIR' , filetype => dbms_datapump.ku$_file_type_dump_file ); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl , filename => 'sample_exp.log' , directory => 'DATA_PUMP_DIR' , filetype => dbms_datapump.ku$_file_type_log_file ); DBMS_DATAPUMP.METADATA_FILTER( v_hdnl , 'SCHEMA_EXPR' , 'IN (''SCHEMA_1'')' ); DBMS_DATAPUMP.METADATA_FILTER( v_hdnl, 'EXCLUDE_NAME_EXPR', q'[IN (SELECT NAME FROM sys.OBJ$ WHERE TYPE# IN (66,67,74,79,59,62,46) AND OWNER# IN (SELECT USER# FROM SYS.USER$ WHERE NAME IN ('RDSADMIN','SYS','SYSTEM','RDS_DATAGUARD','RDSSEC') ) ) ]', 'PROCOBJ' ); DBMS_DATAPUMP.START_JOB(v_hdnl); END; /
    注意

    Data Pump 工作會以非同步的方式啟動。如需有關監控 Data Pump 任務的詳細資訊,請參閱 Oracle 文件中的監控工作狀態。您可以使用 rdsadmin.rds_file_util.read_text_file 程序檢視匯出日誌的內容。如需更多詳細資訊,請參閱 讀取資料庫執行個體目錄中的檔案

步驟 4:建立與目標資料庫執行個體的資料庫連結

在來源資料庫執行個體與目標資料庫執行個體之間建立資料庫連結。您的本機 Oracle 執行個體必須可以和資料庫執行個體網路連線,才能建立資料庫連結以及傳輸匯出傾印檔案。

請以前一步驟的相同使用者身分執行此步驟。

如果是在相同 VPC 或對等連接 VPC 內的兩個資料庫執行個體之間建立資料庫連結,兩個資料庫執行個體之間應具備有效路由。這兩個資料庫執行個體的安全群組,皆必須允許輸入和輸出到其他資料庫執行個體。安全群組的傳入和傳出規則可以參考相同 VPC 或對等連接 VPC 的安全群組。如需更多詳細資訊,請參閱 調整資料庫連結以搭配使用 VPC 中的資料庫執行個體

以下命令會建立名為 to_rds 的資料庫連結,可連接至目標資料庫執行個體的 Amazon RDS 主要使用者。

CREATE DATABASE LINK to_rds CONNECT TO <master_user_account> IDENTIFIED BY <password> USING '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<dns or ip address of remote db>) (PORT=<listener port>))(CONNECT_DATA=(SID=<remote SID>)))';

步驟 5:使用 DBMS_FILE_TRANSFER 將匯出的傾印檔案,複製到目標資料庫執行個體

使用 DBMS_FILE_TRANSFER,將傾印檔案從來源資料庫執行個體複製到目標資料庫執行個體。以下指令碼會將名為 sample.dmp 的傾印檔案,從來源執行個體複製到名為 to_rds 的目標資料庫連結 (在先前步驟中建立)。

BEGIN DBMS_FILE_TRANSFER.PUT_FILE( source_directory_object => 'DATA_PUMP_DIR', source_file_name => 'sample.dmp', destination_directory_object => 'DATA_PUMP_DIR', destination_file_name => 'sample_copied.dmp', destination_database => 'to_rds' ); END; /

步驟 6:使用 DBMS_DATAPUMP 將資料檔案匯入至目標資料庫執行個體

使用 Oracle Data Pump 匯入資料庫執行個體上的結構描述。您可能需要額外選項,例如 METADATA_REMAP。

使用 Amazon RDS 主要使用者帳戶連線到資料庫執行個體以進行匯入。

DECLARE v_hdnl NUMBER; BEGIN v_hdnl := DBMS_DATAPUMP.OPEN( operation => 'IMPORT', job_mode => 'SCHEMA', job_name => null); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample_copied.dmp', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file ); DBMS_DATAPUMP.ADD_FILE( handle => v_hdnl, filename => 'sample_imp.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file); DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'SCHEMA_EXPR','IN (''SCHEMA_1'')'); DBMS_DATAPUMP.START_JOB(v_hdnl); END; /
注意

Data Pump 工作會以非同步的方式啟動。如需有關監控 Data Pump 任務的詳細資訊,請參閱 Oracle 文件中的監控工作狀態。您可以使用 rdsadmin.rds_file_util.read_text_file 程序來檢視匯入日誌的內容。如需更多詳細資訊,請參閱 讀取資料庫執行個體目錄中的檔案

您可以檢視資料庫執行個體上的使用者資料表,以確認資料的匯入。例如,以下查詢會傳回 schema_1 的資料表數目。

SELECT COUNT(*) FROM DBA_TABLES WHERE OWNER='SCHEMA_1';

步驟 7:清理

匯入資料後,您可以刪除不繼續保留的檔案。您可以使用以下命令列出 DATA_PUMP_DIR 中的檔案。

SELECT * FROM TABLE(rdsadmin.rds_file_util.listdir('DATA_PUMP_DIR')) ORDER BY MTIME;

以下命令可用來刪除 DATA_PUMP_DIR 中不再需要的檔案。

EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','<file name>');

例如以下命令會刪除名為 "sample_copied.dmp" 的檔案。

EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','sample_copied.dmp');