View a markdown version of this page

使用 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 命令列公用程式 impdp 和 expdp 來完成相同的工作。您可以在安裝 Oracle 用戶端 (包括 Oracle Instant Client) 期間,將這些公用程式安裝在遠端主機上。如需詳細資訊,請參閱《如何使用 Oracle 用戶端為我的 Amazon RDS for Oracle 資料庫執行個體執行 Data Pumt 來匯入或匯出?》

Oracle Data Pump 概觀

Oracle Data Pump 由下列元件組成:

  • 命令列用戶端 expdp 和 impdp

  • 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 執行個體時,我們建議您採用下列最佳實務:

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

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

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

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

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

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

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

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

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

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

  • 請勿匯入包含 SYS、SYSTEM、RDSADMIN、RDSSEC 和 RDS_DATAGUARD 中之 Oracle Scheduler 物件的傾印檔案,且屬於下列類別:

    • 任務

    • 程式

    • 排程

    • Chain

    • 規則

    • 評估內容

    • 規則集

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

  • 若要排除不支援的 Oracle Scheduler 物件,請在 Data Pump 匯出期間使用其他指令。如果您使用 DBMS_DATAPUMP,您可以在 DBMS_DATAPUMP.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 資料庫執行個體連線至資料將匯入之處。如需連線至資料庫執行個體的詳細資訊,請參閱 連線至 Oracle 資料庫執行個體。

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

  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 目錄上傳至名為 amzn-s3-demo-bucket 的 Amazon S3 儲存貯體。

SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3( p_bucket_name => 'amzn-s3-demo-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 下載傾印檔案。

    以下範例會從名為 amzn-s3-demo-bucket 的 Amazon S3 儲存貯體下載所有檔案至 DATA_PUMP_DIR 目錄。

    SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'amzn-s3-demo-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.dmp 將 SCHEMA_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.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 程序來檢視匯入日誌的內容。如需詳細資訊,請參閱讀取資料庫執行個體目錄中的檔案。

    若要監控 Data Pump 匯入任務的進度,請執行下列查詢:

    SELECT job_name, operation, job_mode, state, attached_sessions FROM DBA_DATAPUMP_JOBS WHERE owner_name = USER;
  3. 列出目標資料庫執行個體上的結構描述,以驗證資料匯入。

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

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

對 Data Pump 匯入進行故障診斷

若要檢查 Data Pump 匯入任務的狀態,請查詢匯入日誌檔案:

SELECT * FROM TABLE(rdsadmin.rds_file_util.read_text_file('DATA_PUMP_DIR', 'sample_imp.log'));

常見的錯誤包括:

  • ORA-39083:無法建立物件類型。通常是由於缺少權限或資料表空間所造成。授予必要的權限,或使用 重新對應資料表空間METADATA_REMAP。

  • ORA-39166:找不到物件。傾印檔案中不存在來源結構描述或物件。

  • ORA-31693:資料表資料物件無法載入。檢查資料表空間配額或空間問題。

  • ORA-31634:任務已存在。具有相同名稱的資料幫浦任務已存在,通常是因為先前的任務離開了孤立的主資料表。查詢DBA_DATAPUMP_JOBS以尋找處於 NOT RUNNING 狀態的任務、捨棄剩餘的主資料表 (例如 DROP TABLE job_name;),或在DBMS_DATAPUMP.OPEN通話job_name中指定唯一的 。

若要重新執行部分失敗的匯入,請將 TABLE_EXISTS_ACTION => 'REPLACE'新增至匯入參數以覆寫現有的物件。

步驟 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.dmp 的檔案。

    EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','sample.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 主要使用者身分進行連線。如需連線至資料庫執行個體的詳細資訊,請參閱 連線至 Oracle 資料庫執行個體。

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

  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');