

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

# 使用 Oracle Data Pump 將內部部署 Oracle 資料庫遷移至 Amazon RDS for Oracle
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-using-oracle-data-pump"></a>

*Mohan Annam 和 Brian motzer，Amazon Web Services*

## 總結
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-using-oracle-data-pump-summary"></a>

此模式說明如何使用 Oracle Data Pump，將 Oracle 資料庫從內部部署資料中心遷移至 Amazon Relational Database Service (Amazon RDS) for Oracle 資料庫執行個體。 

模式涉及從來源資料庫建立資料傾印檔案、將檔案存放在 Amazon Simple Storage Service (Amazon S3) 儲存貯體中，然後將資料還原至 Amazon RDS for Oracle 資料庫執行個體。當您使用 AWS Database Migration Service (AWS DMS) 進行遷移時，此模式非常有用。

## 先決條件和限制
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-using-oracle-data-pump-prereqs"></a>

**先決條件**
+ 作用中的 AWS 帳戶
+ 在 AWS Identity and Access Management (IAM) 和 Amazon S3 分段上傳中建立角色所需的許可
+ 從來源資料庫匯出資料所需的許可
+ 安裝[https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)並[設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) AWS Command Line Interface (AWS CLI)

**產品版本**
+ Oracle Data Pump 僅適用於 Oracle Database 10g 版本 1 (10.1) 和更新版本。

## Architecture
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-using-oracle-data-pump-architecture"></a>

**來源技術堆疊**
+ 內部部署 Oracle 資料庫

**目標技術堆疊**
+ Amazon RDS for Oracle
+ SQL 用戶端 (Oracle SQL Developer)
+ S3 儲存貯體

**來源和目標架構**

![Amazon S3 分段使用 Oracle Data Pump 從內部部署 Oracle 資料庫上傳至 Amazon RDS。](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/images/pattern-img/d8d6e00f-753e-4ecc-80e5-e60e279a699b/images/1bb6095a-0a95-4469-be0e-7b7bd59b35ae.png)


## 工具
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-using-oracle-data-pump-tools"></a>

**AWS 服務**
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 可透過控制已驗證並獲授權使用的人員，協助您安全地管理對 AWS 資源的存取。在此模式中，IAM 用於建立將資料從 Amazon S3 遷移至 Amazon RDS for Oracle 所需的角色和政策。
+ [Amazon Relational Database Service (Amazon RDS) for Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html) 可協助您在 AWS 雲端中設定、操作和擴展 Oracle 關聯式資料庫。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) 是一種雲端型物件儲存服務，可協助您儲存、保護和擷取任何數量的資料。

**其他工具**
+ [Oracle Data Pump](https://docs.oracle.com/cd/B19306_01/server.102/b14215/dp_overview.htm) 可協助您以高速將資料和中繼資料從一個資料庫移至另一個資料庫。在此模式中，Oracle Data Pump 會用來將資料傾印 (.dmp) 檔案匯出至 Oracle 伺服器，並將其匯入 Amazon RDS for Oracle。如需詳細資訊，請參閱《[Amazon RDS 文件》中的在 Amazon RDS 上將資料匯入 Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Oracle.Procedural.Importing.html#Oracle.Procedural.Importing.DataPump.S3)。
+ [Oracle SQL Developer](https://www.oracle.com/database/technologies/appdev/sqldeveloper-landing.html) 是一種整合的開發環境，可簡化傳統和雲端部署中 Oracle 資料庫的開發和管理。它與現場部署 Oracle 資料庫和 Amazon RDS for Oracle 互動，以執行匯出和匯入資料所需的 SQL 命令。

## 史詩
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-using-oracle-data-pump-epics"></a>

### 建立 S3 儲存貯體
<a name="create-an-s3-bucket"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 建立儲存貯體。 | 若要建立 S3 儲存貯體，請遵循 [AWS 文件](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)中的指示。 | AWS 系統管理員 | 

### 建立 IAM 角色並指派政策
<a name="create-the-iam-role-and-assign-policies"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 設定 IAM 許可。 | 若要設定許可，請遵循 [AWS 文件](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-s3-integration.html#oracle-s3-integration.preparing)中的指示。 | AWS 系統管理員 | 

### 建立目標 Amazon RDS for Oracle 資料庫執行個體，並關聯 Amazon S3 整合角色
<a name="create-the-target-amazon-rds-for-oracle-db-instance-and-associate-the-amazon-s3-integration-role"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 建立目標 Amazon RDS for Oracle 資料庫執行個體。 | 若要建立 Amazon RDS for Oracle 執行個體，請遵循 [AWS 文件](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.Oracle.html)中的指示。 | AWS 系統管理員 | 
| 將角色與資料庫執行個體建立關聯。 | 若要將角色與執行個體建立關聯，請遵循 [AWS 文件](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-s3-integration.html#oracle-s3-integration.preparing.instance)中的指示。 | DBA | 

### 在目標資料庫上建立資料庫使用者
<a name="create-the-database-user-on-the-target-database"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 建立使用者。 | 從 Oracle SQL Developer 或 SQL\*Plus 連線至目標 Amazon RDS for Oracle 資料庫，並執行下列 SQL 命令來建立要匯入結構描述的使用者。<pre>create user SAMPLE_SCHEMA identified by <PASSWORD>;<br />grant create session, resource to <USER NAME>;<br />alter user <USER NAME> quota 100M on users;</pre> | DBA | 

### 從來源 Oracle 資料庫建立匯出檔案
<a name="create-the-export-file-from-the-source-oracle-database"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 建立資料傾印檔案。 | 若要在 `sample.dmp``DATA_PUMP_DIR`目錄中建立名為 的傾印檔案來匯出`SAMPLE_SCHEMA`使用者，請使用下列指令碼。<pre>DECLARE<br />    hdnl NUMBER;<br />BEGIN<br />    hdnl := dbms_datapump.open(operation => 'EXPORT', <br />                                job_mode => 'SCHEMA', <br />                                job_name => NULL);<br /><br />    dbms_datapump.add_file( handle => hdnl, <br />                            filename => 'sample.dmp', <br />                            directory => 'DATA_PUMP_DIR', <br />                            filetype => dbms_datapump.ku$_file_type_dump_file);<br /><br />    dbms_datapump.add_file(handle => hdnl, <br />                            filename => 'export.log', <br />                            directory => 'DATA_PUMP_DIR', <br />                            filetype => dbms_datapump.ku$_file_type_log_file);<br /><br />    dbms_datapump.metadata_filter(hdnl, 'SCHEMA_EXPR', 'IN (''SAMPLE_SCHEMA'')');  <br /><br />    dbms_datapump.start_job(hdnl);<br />END;<br />/</pre><br />檢閱本機`DATA_PUMP_DIR`目錄中`export.log`的檔案，以檢閱匯出詳細資訊。 | DBA | 

### 將傾印檔案上傳至 S3 儲存貯體
<a name="upload-the-dump-file-to-the-s3-bucket"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 將資料傾印檔案從來源上傳至 S3 儲存貯體。 | 使用 AWS CLI，執行下列命令。<pre>aws s3 cp sample.dmp s3://<bucket_created_epic_1>/</pre> | DBA | 

### 從 S3 儲存貯體下載匯出檔案至 RDS 執行個體
<a name="download-the-export-file-from-the-s3-bucket-to-the-rds-instance"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 將資料傾印檔案下載至 Amazon RDS | 若要將傾印檔案`sample.dmp`從 S3 儲存貯體複製到 Amazon RDS for Oracle 資料庫，請執行下列 SQL 命令。在此範例中，`sample.dmp`檔案會從 S3 儲存貯體下載`my-s3-integration1`到 Oracle 目錄 `DATA_PUMP_DIR`。請確定已將足夠的磁碟空間配置給 RDS 執行個體，以容納資料庫和匯出檔案。<pre>-- If you want to download all the files in the S3 bucket remove the p_s3_prefix line.<br /><br />SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3(<br />      p_bucket_name    =>  'my-s3-integration',    <br />      p_s3_prefix => 'sample.dmp',<br />      p_directory_name =>  'DATA_PUMP_DIR') <br />   AS TASK_ID FROM DUAL;</pre><br />先前的命令會輸出任務 ID。若要檢閱任務 ID 中的資料來檢閱下載狀態，請執行下列命令。<pre>SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP','dbtask-<task_id>.log'));<br /><br /></pre><br />若要查看 `DATA_PUMP_DIR`目錄中的檔案，請執行下列命令。<pre>SELECT filename,type,filesize/1024/1024 size_megs,to_char(mtime,'DD-MON-YY HH24:MI:SS') timestamp<br />FROM TABLE(rdsadmin.rds_file_util.listdir(p_directory => upper('DATA_PUMP_DIR'))) order by 4;</pre> | AWS 系統管理員 | 

### 將傾印檔案匯入目標資料庫
<a name="import-the-dump-file-into-the-target-database"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 將結構描述和資料還原至 Amazon RDS。 | 若要將傾印檔案匯入`sample_schema`資料庫結構描述，請從 SQL Developer 或 SQL\*Plus 執行下列 SQL 命令。<pre>DECLARE<br />hdnl NUMBER;<br />BEGIN<br /><br />hdnl := DBMS_DATAPUMP.OPEN( operation => 'IMPORT', job_mode => 'SCHEMA', job_name=>null);<br /><br />DBMS_DATAPUMP.ADD_FILE( handle => hdnl, filename => 'sample.dmp', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file);<br /><br />DBMS_DATAPUMP.ADD_FILE( handle    => hdnl, filename  => 'import.log', directory => 'DATA_PUMP_DIR', filetype  => dbms_datapump.ku$_file_type_log_file);<br /><br />DBMS_DATAPUMP.METADATA_FILTER(hdnl,'SCHEMA_EXPR','IN (''SAMPLE_SCHEMA'')');<br /><br />DBMS_DATAPUMP.START_JOB(hdnl);<br /><br />END;<br />/</pre><br />若要從匯入查看日誌檔案，請執行下列命令。<pre>SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('DATA_PUMP_DIR','import.log'));</pre> | DBA | 

### 從 DATA\_PUMP\_DIR 目錄移除傾印檔案
<a name="remove-the-dump-file-from-the-data_pump_dir-directory"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 列出並清除匯出檔案。 | 列出並移除 `DATA_PUMP_DIR`目錄中的匯出檔案，執行下列命令。<pre>-- List the files<br />SELECT filename,type,filesize/1024/1024 size_megs,to_char(mtime,'DD-MON-YY HH24:MI:SS') timestamp FROM TABLE(rdsadmin.rds_file_util.listdir(p_directory => upper('DATA_PUMP_DIR'))) order by 4;</pre><pre>-- Remove the files<br />EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','sample.dmp');<br />EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','import.log');</pre> | AWS 系統管理員 | 

## 相關資源
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-using-oracle-data-pump-resources"></a>
+ [Amazon S3 整合](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-s3-integration.html#oracle-s3-integration.preparing)
+ [建立資料庫執行個體](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Tutorials.WebServerDB.CreateDBInstance.html)
+ [在 Amazon RDS 上將資料匯入 Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Oracle.Procedural.Importing.html#Oracle.Procedural.Importing.DataPump.S3)
+ [Amazon S3 文件](https://docs.aws.amazon.com/s3/index.html)
+ [IAM 文件](https://docs.aws.amazon.com/iam/index.html)
+ [Amazon RDS 文件](https://docs.aws.amazon.com/rds/index.html)
+ [Oracle Data Pump 文件](https://docs.oracle.com/en/database/oracle/oracle-database/19/sutil/oracle-data-pump-overview.html)
+ [Oracle SQL Developer](https://www.oracle.com/database/sqldeveloper/)