

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

# 使用 連線至 Oracle 資料庫 AWS Schema Conversion Tool
<a name="CHAP_Source.Oracle"></a>

您可以使用 AWS SCT 將結構描述、資料庫程式碼物件和應用程式程式碼從 Oracle 資料庫轉換為下列目標：
+ Amazon RDS for MySQL
+ Amazon Aurora MySQL-Compatible Edition
+ Amazon RDS for PostgreSQL
+ Amazon Aurora PostgreSQL-Compatible Edition
+ Amazon RDS for Oracle
+ Amazon RDS for MariaDB

當來源是 Oracle 資料庫時，註解可以轉換為適當的格式，例如 PostgreSQL 資料庫。 AWS SCT 可以轉換資料表、檢視和資料欄的註解。註解可以包含撇號；在轉換 SQL 陳述式時將 AWS SCT 撇號加倍，就像對字串常值一樣。

如需更多資訊，請參閱下列內容。

**Topics**
+ [將 Oracle 作為來源資料庫的權限](#CHAP_Source.Oracle.Permissions)
+ [以來源身分連線至 Oracle](#CHAP_Source.Oracle.Connecting)
+ [使用 從 Oracle 遷移至 Amazon RDS for PostgreSQL 或 Amazon Aurora PostgreSQL AWS Schema Conversion Tool](CHAP_Source.Oracle.ToPostgreSQL.md)
+ [使用 從 Oracle 遷移至 Amazon RDS for MySQL 或 Amazon Aurora MySQL AWS Schema Conversion Tool](CHAP_Source.Oracle.ToMySQL.md)
+ [使用 從 Oracle 資料庫遷移至 Amazon RDS for Oracle AWS Schema Conversion Tool](CHAP_Source.Oracle.ToRDSOracle.md)

## 將 Oracle 作為來源資料庫的權限
<a name="CHAP_Source.Oracle.Permissions"></a>

Oracle 做為來源所需的權限如下：
+ CONNECT 
+ SELECT\$1CATALOG\$1ROLE 
+ SELECT ANY DICTIONARY 
+ SELECT ON SYS.ARGUMENT\$1

## 以來源身分連線至 Oracle
<a name="CHAP_Source.Oracle.Connecting"></a>

使用以下程序，透過 AWS Schema Conversion Tool連接到您的 Oracle 來源資料庫。

**若要連接到 Oracle 來源資料庫**

1. 在 中 AWS Schema Conversion Tool，選擇**新增來源**。

1. 選擇 **Oracle**，然後選擇**下一步**。

   **新增來源**對話方塊隨即出現。

1. 在**連線名稱**中，輸入資料庫的名稱。 會在左側面板的樹狀目錄中 AWS SCT 顯示此名稱。

1. 使用來自 的資料庫登入資料 AWS Secrets Manager 或手動輸入：
   + 若要從 Secrets Manager 使用資料庫登入資料，請使用下列指示：

     1. 針對 **AWS Secret**，選擇秘密的名稱。

     1. 選擇**填入**，從 Secrets Manager 自動填入資料庫連線對話方塊中的所有值。

     如需從 Secrets Manager 使用資料庫登入資料的資訊，請參閱 [在 AWS Secrets Manager 中設定 AWS Schema Conversion Tool](CHAP_UserInterface.SecretsManager.md)。
   + 若要手動輸入 Oracle 來源資料庫連線資訊，請使用下列指示：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/SchemaConversionTool/latest/userguide/CHAP_Source.Oracle.html)

1. 選擇**測試連線**以驗證 AWS SCT 可以連接到您的來源資料庫。

1. 選擇**連線**以連線至來源資料庫。

# 使用 從 Oracle 遷移至 Amazon RDS for PostgreSQL 或 Amazon Aurora PostgreSQL AWS Schema Conversion Tool
<a name="CHAP_Source.Oracle.ToPostgreSQL"></a>

當您將 Oracle 資料庫轉換為 RDS for PostgreSQL 或 Amazon Aurora PostgreSQL 時，請注意下列事項。

**Topics**
+ [PostgreSQL 做為目標資料庫的權限](#CHAP_Source.Oracle.ToPostgreSQL.ConfigureTarget)
+ [Oracle 到 PostgreSQL 轉換設定](#CHAP_Source.Oracle.ToPostgreSQL.ConversionSettings)
+ [轉換 Oracle 序列](#CHAP_Source.Oracle.ToPostgreSQL.ConvertSequences)
+ [轉換 Oracle ROWID](#CHAP_Source.Oracle.ToPostgreSQL.ConvertRowID)
+ [轉換 Oracle 動態 SQL](#CHAP_Source.Oracle.ToPostgreSQL.DynamicSQL)
+ [轉換 Oracle 分割區](#CHAP_Source.Oracle.ToPostgreSQL.PG10Partitioning)

將 Oracle 系統物件轉換為 PostgreSQL 時， AWS SCT 執行轉換，如下表所示。


| Oracle 系統物件 | Description | 轉換後的 PostgreSQL 物件 | 
| --- | --- | --- | 
| V\$1VERSION  | 顯示 Oracle 資料庫中核心程式庫元件的版本編號 | aws\$1oracle\$1ext.v\$1version | 
| V\$1INSTANCE | 顯示目前執行個體狀態的檢視。 | aws\$1oracle\$1ext.v\$1instance | 

您可以使用 AWS SCT 將 Oracle SQL\$1Plus 檔案轉換為 psql，這是以終端機為基礎的前端，轉換為 PostgreSQL。如需詳細資訊，請參閱[使用 轉換應用程式 SQL AWS SCT](CHAP_Converting.App.md)。

## PostgreSQL 做為目標資料庫的權限
<a name="CHAP_Source.Oracle.ToPostgreSQL.ConfigureTarget"></a>

若要使用 PostgreSQL 做為目標， AWS SCT 需要 `CREATE ON DATABASE`權限。請務必為每個目標 PostgreSQL 資料庫授予此權限。

若要使用轉換後的公有同義詞，請將資料庫預設搜尋路徑變更為 `"$user", public_synonyms, public`。

您可以使用下列程式碼範例來建立資料庫使用者並授與權限。

```
CREATE ROLE user_name LOGIN PASSWORD 'your_password';
GRANT CREATE ON DATABASE db_name TO user_name;
ALTER DATABASE db_name SET SEARCH_PATH = "$user", public_synonyms, public;
```

在上述範例中，請將 *user\$1name* 替換為您的使用者名稱。然後，將 *db\$1name* 取代為目標資料庫的名稱。最後，使用安全密碼取代 *your\$1password*。

若要使用 Amazon RDS for PostgreSQL 做為目標， AWS SCT 需要 `rds_superuser`權限。

在 PostgreSQL 中，只有結構描述擁有者或 `superuser` 可以刪除結構描述。擁有者可以捨棄結構描述和此結構描述包含的所有物件，即使結構描述的擁有者不擁有其部分物件。

當您使用不同的使用者來轉換和套用不同的結構描述到目標資料庫時，當 AWS SCT 無法捨棄結構描述時，您可能會收到錯誤訊息。若要避免此錯誤訊息，請使用 `superuser` 角色。

## Oracle 到 PostgreSQL 轉換設定
<a name="CHAP_Source.Oracle.ToPostgreSQL.ConversionSettings"></a>

若要編輯 Oracle 至 PostgreSQL 轉換設定，請選擇 中的**設定** AWS SCT，然後選擇**轉換設定**。從上清單中，選擇 **Oracle**，然後選擇 **Oracle – PostgreSQL**。 AWS SCT 顯示 Oracle 到 PostgreSQL 轉換的所有可用設定。

中的 Oracle 到 PostgreSQL 轉換設定 AWS SCT 包含下列項目的選項：
+ 限制轉換程式碼中具有動作項目的註解數量。

  針對**所選嚴重性及更高層級之動作項目的轉換後程式碼中新增註解**，請選擇動作項目的嚴重性。針對所選嚴重性及更高層級的動作項目，在轉換後的程式碼中 AWS SCT 新增註解。

  例如，若要將已轉換程式碼中的註解數量降到最低，請選擇**僅限錯誤**。若要在已轉換的程式碼中包含所有動作項目的註解，請選擇**所有訊息**。
+ 允許 AWS SCT 將 Oracle 具體化視觀表轉換為 PostgreSQL 上的資料表或具體化視觀表。針對**具體化視觀表轉換為 **，選擇如何轉換來源具體化視觀表。
+ 在包含具有 PostgreSQL 不支援之參數的 `TO_CHAR`、 和 `TO_NUMBER`函數時`TO_DATE`，使用來源 Oracle 程式碼。根據預設， 會在轉換後的程式碼中 AWS SCT 模擬這些參數的使用情況。

  當您的來源 Oracle 程式碼僅包含 PostgreSQL 支援的參數時，您可以使用原生 PostgreSQL `TO_CHAR`、 `TO_DATE`和 `TO_NUMBER`函數。在此情況下，轉換後的程式碼運作得更快。若要僅包含這些參數，請選取下列值：
  + **函數 TO\$1CHAR() 不使用 Oracle 特定的格式字串**
  + **函數 TO\$1DATE() 不使用 Oracle 特定的格式字串**
  + **函數 TO\$1NUMBER() 不使用 Oracle 特定的格式字串**
+ 若要解決來源 Oracle 資料庫在`NUMBER`資料類型的主要或外部索引鍵資料欄中僅存放整數值的情況， AWS SCT 可以將這些資料欄轉換為 `BIGINT`資料類型。這種方法可以提高轉換後程式碼的性能。若要採取此方法，請選取**將 NUMBER 主要/外部索引鍵資料欄轉換為 BIGINT**。請確定您的來源未在這些資料行中包含浮點值，以避免資料遺失。
+ 略過原始程式碼中已停用的觸發和限制條件。若要這樣做，請選擇**忽略停用的觸發條件和限制**條件。
+ 使用 AWS SCT 轉換稱為動態 SQL 的字串變數。您的資料庫程式碼可以變更這些字串變數的值。若要確保 AWS SCT 一律轉換此字串變數的最新值，請選取**轉換在稱為常式中建立的動態 SQL 程式碼**。
+ 若要解決 PostgreSQL 第 10 版及更早版本不支援程序的問題。如果您或您的使用者不熟悉在 PostgreSQL 中使用程序， AWS SCT 可以將 Oracle 程序轉換為 PostgreSQL 函數。若要這樣做，請選取**將程序轉換為函數**。
+ 查看有關所發生動作項目的其他資訊。若要這麼做，您可以選取**新增例外狀況，針對下一個嚴重性層級的遷移問題引發封鎖，**將特定函數新增至延伸套件。然後選擇嚴重性層級，以引發使用者定義的例外狀況。
+ 使用可能包含自動產生名稱限制的來源 Oracle 資料庫。如果您的原始程式碼使用這些名稱，請務必選取**使用原始來源名稱轉換系統產生的限制名稱**。如果您的原始程式碼使用這些限制條件，但未使用其名稱，請清除此選項以增加轉換速度。
+ 處理資料庫和應用程式是否在不同時區執行。根據預設， 會在轉換後的程式碼中 AWS SCT 模擬時區。但是，當您的資料庫和應用程式使用相同的時區時，就不需要此模擬。在此情況下，請選取**用戶端的時區與伺服器上的時區相符**。
+ 處理來源和目標資料庫是否在不同時區執行。如果這樣做，模擬`SYSDATE`內建 Oracle 函數的函數會傳回與來源函數不同的值。若要確保您的來源和目標函數傳回相同的值，請選擇**設定 SYSDATE 模擬的預設時區**。
+ 在轉換後的程式碼中使用 Orafce 延伸中的函數。若要這樣做，請針對**使用 orafce 實作**，選取要使用的函數。如需有關 Orafce 的詳細資訊，請參閱 GitHub 上的 [Orafce](https://github.com/orafce/orafce)。

## 轉換 Oracle 序列
<a name="CHAP_Source.Oracle.ToPostgreSQL.ConvertSequences"></a>

AWS SCT 會將序列從 Oracle 轉換為 PostgreSQL。如果您使用序列來維護完整性限制，請確定已遷移序列的新值不會與現有值重疊。

**使用來源資料庫的最後一個值填入轉換後的序列**

1. 使用 Oracle 作為來源開啟您的 AWS SCT 專案。

1. 選擇**設定**，然後選擇**轉換設定**。

1. 從上方清單中選擇 **Oracle**，然後選擇 **Oracle – PostgreSQL**。 AWS SCT 會顯示 Oracle 到 PostgreSQL 轉換的所有可用設定。

1. 選擇**填入轉換後的序列，並在來源端產生最後一個值**。

1. 選擇**確定**以儲存設定，然後關閉**轉換設定**對話方塊。

## 轉換 Oracle ROWID
<a name="CHAP_Source.Oracle.ToPostgreSQL.ConvertRowID"></a>

 在 Oracle 資料庫中，ROWID 虛擬資料欄包含資料表列的地址。ROWID 虛擬資料欄對 Oracle 而言是唯一的，因此 會將 ROWID 虛擬資料欄 AWS SCT 轉換為 PostgreSQL 上的資料欄。透過使用此轉換，您可以保留 ROWID 資訊。

轉換 ROWID 虛擬資料欄時， AWS SCT 可以使用 資料類型建立`bigint`資料欄。如果沒有主索引鍵， 會將 ROWID 欄 AWS SCT 設定為主索引鍵。如果主索引鍵存在， 會 AWS SCT 設定具有唯一限制條件的 ROWID 資料欄。

如果您的來源資料庫程式碼包含使用 ROWID 的操作，而 ROWID 無法使用數值資料類型執行， AWS SCT 則可以使用 `character varying`資料類型建立資料欄。

**為專案的 Oracle ROWID 建立資料欄**

1. 使用 Oracle 作為來源開啟您的 AWS SCT 專案。

1. 選擇**設定**，然後選擇**轉換設定**。

1. 從上方清單中選擇 **Oracle**，然後選擇 **Oracle – PostgreSQL**。 AWS SCT 會顯示 Oracle 到 PostgreSQL 轉換的所有可用設定。

1. 對於**產生資料列 ID**，請執行下列其中一項操作：
   + 選擇**產生身分**以建立數值資料欄。
   + 選擇**產生為字元網域類型**以建立字元資料欄。

1. 選擇**確定**以儲存設定，然後關閉**轉換設定**對話方塊。

## 轉換 Oracle 動態 SQL
<a name="CHAP_Source.Oracle.ToPostgreSQL.DynamicSQL"></a>

 Oracle 提供兩種方式來實作動態 SQL：使用 EXECUTE IMMEDIATE 陳述式或在 DBMS\$1SQL 套件中呼叫程序。如果您的來源 Oracle 資料庫包含具有動態 SQL 的物件，請使用 AWS SCT 將 Oracle 動態 SQL 陳述式轉換為 PostgreSQL。

**將 Oracle 動態 SQL 轉換為 PostgreSQL**

1. 使用 Oracle 作為來源開啟您的 AWS SCT 專案。

1. 選擇在 Oracle 來源樹狀檢視中使用動態 SQL 的資料庫物件。

1. 開啟物件的內容 （按一下滑鼠右鍵） 選單，選擇**轉換結構描述**，並同意在物件存在時取代物件。下列螢幕擷取畫面顯示使用動態 SQL 的 Oracle 程序下方的轉換程序。  
![\[動態 SQL 轉換\]](http://docs.aws.amazon.com/zh_tw/SchemaConversionTool/latest/userguide/images/dynamicsql1.png)

## 轉換 Oracle 分割區
<a name="CHAP_Source.Oracle.ToPostgreSQL.PG10Partitioning"></a>

AWS SCT 目前支援下列分割方法：
+ 範圍
+ 清單
+ 多欄範圍
+ 雜湊
+ 複合 （清單、範圍清單、清單範圍、清單雜湊、範圍雜湊、雜湊雜湊）

# 使用 從 Oracle 遷移至 Amazon RDS for MySQL 或 Amazon Aurora MySQL AWS Schema Conversion Tool
<a name="CHAP_Source.Oracle.ToMySQL"></a>

若要在轉換後的 MySQL 程式碼中模擬 Oracle 資料庫函數，請使用 Oracle 到 MySQL 延伸套件 AWS SCT。如需詳細了解延伸套件，請參閱：[搭配 使用延伸套件 AWS Schema Conversion Tool](CHAP_ExtensionPack.md)。

**Topics**
+ [MySQL 做為目標資料庫的權限](#CHAP_Source.Oracle.ToMySQL.ConfigureTarget)
+ [Oracle 到 MySQL 的轉換設定](#CHAP_Source.Oracle.ToMySQL.ConversionSettings)
+ [遷移考量事項](#CHAP_Source.Oracle.ToMySQL.MigrationConsiderations)
+ [將 Oracle 中的 WITH 陳述式轉換為 RDS for MySQL 或 Amazon Aurora MySQL](#CHAP_Source.Oracle.ToMySQL.With)

## MySQL 做為目標資料庫的權限
<a name="CHAP_Source.Oracle.ToMySQL.ConfigureTarget"></a>

做為目標的 MySQL 所需的權限如下：
+ CREATE ON \$1.\$1
+ ALTER ON \$1.\$1
+ DROP ON \$1.\$1
+ INDEX ON \$1.\$1
+ ON \$1.\$1 參考資料
+ SELECT ON \$1.\$1
+ 在 \$1.\$1 上建立檢視
+ SHOW VIEW ON \$1.\$1
+ 觸發開啟 \$1.\$1
+ 建立路由開啟 \$1.\$1
+ ALTER ROUTINE ON \$1.\$1
+ EXECUTE ON \$1.\$1
+ 在 \$1.\$1 上建立暫存資料表
+ AWS\$1LAMBDA\$1ACCESS
+ INSERT，更新 AWS\$1ORACLE\$1EXT.\$1
+ 在 AWS\$1ORACLE\$1EXT\$1DATA 上插入、更新、刪除。\$1

如果您使用 MySQL 資料庫 5.7 版或更低版本做為目標，請授予 INVOKE LAMBDA \$1.\$1 許可，而非 AWS\$1LAMBDA\$1ACCESS。對於 MySQL 資料庫 8.0 版和更新版本，授予 AWS\$1LAMBDA\$1ACCESS 許可。

您可以使用下列程式碼範例來建立資料庫使用者並授與權限。

```
CREATE USER 'user_name' IDENTIFIED BY 'your_password';
GRANT CREATE ON *.* TO 'user_name';
GRANT ALTER ON *.* TO 'user_name';
GRANT DROP ON *.* TO 'user_name';
GRANT INDEX ON *.* TO 'user_name';
GRANT REFERENCES ON *.* TO 'user_name';
GRANT SELECT ON *.* TO 'user_name';
GRANT CREATE VIEW ON *.* TO 'user_name';
GRANT SHOW VIEW ON *.* TO 'user_name';
GRANT TRIGGER ON *.* TO 'user_name';
GRANT CREATE ROUTINE ON *.* TO 'user_name';
GRANT ALTER ROUTINE ON *.* TO 'user_name';
GRANT EXECUTE ON *.* TO 'user_name';
GRANT CREATE TEMPORARY TABLES ON *.* TO 'user_name';
GRANT AWS_LAMBDA_ACCESS TO 'user_name';
GRANT INSERT, UPDATE ON AWS_ORACLE_EXT.* TO 'user_name';
GRANT INSERT, UPDATE, DELETE ON AWS_ORACLE_EXT_DATA.* TO 'user_name';
```

在上述範例中，請將 *user\$1name* 替換為您的使用者名稱。然後，將 *your\$1password* 替換為一個安全的密碼。

如果您使用 MySQL 資料庫 5.7 版或更低版本做為目標，請使用 `GRANT INVOKE LAMBDA ON *.* TO 'user_name'`而非 `GRANT AWS_LAMBDA_ACCESS TO 'user_name'`。

若要使用 Amazon RDS for MySQL 或 Aurora MySQL 作為目標，請將 `lower_case_table_names` 參數設定為 `1`。此值意味著 MySQL 服務器在處理資料表、索引、觸發程式和資料庫等對象名稱的識別碼時不區分大小寫。如果您已在目標執行個體中開啟二進位記錄功能，請將 `log_bin_trust_function_creators` 參數設定為 `1`。在這種情況下，您不需要使用 `DETERMINISTIC`、`READS SQL DATA` 或 `NO SQL` 特性來建立已儲存的函數。若要設定這些參數，請建立新的參數群組，或是修改現有的資料庫參數群組。

## Oracle 到 MySQL 的轉換設定
<a name="CHAP_Source.Oracle.ToMySQL.ConversionSettings"></a>

若要編輯 Oracle 到 MySQL 轉換設定，請選擇 中的**設定** AWS SCT，然後選擇**轉換設定**。從上方清單中，選擇 **Oracle**，然後選擇 **Oracle – MySQL**。 AWS SCT 會顯示 Oracle 到 MySQL 轉換的所有可用設定。

中的 Oracle 到 MySQL 轉換設定 AWS SCT 包含下列項目的選項：
+ 限制轉換程式碼中具有動作項目的註解數量。

  針對**所選嚴重性及更高層級之動作項目的轉換後程式碼中新增註解**，請選擇動作項目的嚴重性。針對所選嚴重性及更高層級的動作項目，在轉換後程式碼中 AWS SCT 新增註解。

  例如，若要將已轉換程式碼中的註解數量降到最低，請選擇**僅限錯誤**。若要在已轉換的程式碼中包含所有動作項目的註解，請選擇**所有訊息**。
+ 若要解決來源 Oracle 資料庫可以使用`ROWID`虛擬資料欄，但 MySQL 不支援類似的功能。 AWS SCT 可以在轉換後的程式碼中模擬`ROWID`虛擬資料欄。若要這樣做，請選擇**產生作為產生資料列 ID 的身分****？**。

  如果您的來源 Oracle `ROWID` 程式碼不使用虛擬資料欄，請選擇**不為產生資料列 ID 產生** **？** 在此情況下，轉換後的程式碼運作得更快。
+ 在包含具有 MySQL 不支援之參數的 `TO_CHAR`、 和 `TO_NUMBER`函數時`TO_DATE`，使用來源 Oracle 程式碼。根據預設， 會在轉換後的程式碼中 AWS SCT 模擬這些參數的使用情況。

  當您的來源 Oracle 程式碼僅包含 PostgreSQL 支援的參數時，您可以使用原生 MySQL `TO_CHAR`、 `TO_DATE`和 `TO_NUMBER`函數。在此情況下，轉換後的程式碼運作得更快。若要僅包含這些參數，請選取下列值：
  + **函數 TO\$1CHAR() 不使用 Oracle 特定的格式字串**
  + **函數 TO\$1DATE() 不使用 Oracle 特定的格式字串**
  + **函數 TO\$1NUMBER() 不使用 Oracle 特定的格式字串**
+ 新增資料庫和應用程式是否在不同時區執行。根據預設， AWS SCT 會在轉換後的程式碼中模擬時區。但是，當您的資料庫和應用程式使用相同的時區時，就不需要此模擬。在此情況下，請選取**用戶端的時區與伺服器上的時區相符**。

## 遷移考量事項
<a name="CHAP_Source.Oracle.ToMySQL.MigrationConsiderations"></a>

當您將 Oracle 轉換為 RDS for MySQL 或 Aurora MySQL 時，若要變更陳述式執行的順序，您可以使用`GOTO`陳述式和標籤。任何遵循陳述式的 PL/SQL `GOTO`陳述式都會略過，處理會在標籤繼續。您可以在程序、批次或`GOTO`陳述式區塊內的任何位置使用陳述式和標籤。您也可以下一個 GOTO 陳述式。

MySQL 不使用 `GOTO` 陳述式。當 AWS SCT 轉換包含`GOTO`陳述式的程式碼時，它會將陳述式轉換為使用 `BEGIN…END`或 `LOOP…END LOOP`陳述式。

您可以在下表中找到如何 AWS SCT 轉換`GOTO`陳述式的範例。


| Oracle 陳述式 | MySQL 陳述式 | 
| --- | --- | 
|  <pre>BEGIN<br />   ....<br />   statement1;<br />   ....<br />   GOTO label1;<br />   statement2;<br />   ....<br />   label1:<br />   Statement3;<br />   ....<br />END<br /></pre>  |  <pre>BEGIN<br /> label1:<br /> BEGIN<br />   ....<br />   statement1;<br />   ....<br />   LEAVE label1;<br />   statement2;<br />   ....<br /> END;<br />   Statement3;<br />   ....<br />END<br /></pre>  | 
|  <pre>BEGIN<br />   ....<br />   statement1;<br />   ....<br />   label1:<br />   statement2;<br />   ....<br />   GOTO label1;<br />   statement3;<br />   ....<br />   statement4;<br />   ....<br />END<br /></pre>  |  <pre>BEGIN<br />   ....<br />   statement1;<br />   ....<br />   label1:<br />   LOOP<br />    statement2;<br />    ....<br />    ITERATE label1;<br />    LEAVE label1;<br />   END LOOP; <br />    statement3;<br />    ....<br />    statement4;<br />    ....<br />END<br /></pre>  | 
|  <pre>BEGIN<br />   ....<br />   statement1;<br />   ....<br />   label1:<br />   statement2;<br />   ....<br />   statement3;<br />   ....<br />   statement4;<br />   ....<br />END<br /></pre>  |  <pre>BEGIN<br />   ....<br />   statement1;<br />   ....<br />   label1:<br />   BEGIN<br />    statement2;<br />    ....    <br />    statement3;<br />    ....<br />    statement4;<br />    ....    <br />   END; <br />END<br /></pre>  | 

## 將 Oracle 中的 WITH 陳述式轉換為 RDS for MySQL 或 Amazon Aurora MySQL
<a name="CHAP_Source.Oracle.ToMySQL.With"></a>

您可以使用 Oracle 的 WITH 子句 (subquery\$1factoring) 對子查詢區塊指派名稱 (query\$1name)。接著，您即可透過指定 query\$1name 在查詢中的多處位置參考該子查詢區塊。如果子查詢區塊不包含連結或參數 （本機、程序、函數、套件），則 會將 子句 AWS SCT 轉換為檢視或暫存資料表。

將子句轉換為暫時資料表的優點是，對子查詢的重複引用可能會更有效率。效率更高的是因為資料很容易從暫時資料表中檢索，而不是每個引用都需要。您可以使用其他檢視或暫時資料表來模擬此項目。視圖名稱會使用格式 `<procedure_name>$<subselect_alias>`。

您可以在下表中找到範例。


| Oracle 陳述式 | MySQL 陳述式 | 
| --- | --- | 
|  <pre>CREATE PROCEDURE <br /> TEST_ORA_PG.P_WITH_SELECT_VARIABLE_01<br />     (p_state IN NUMBER)<br />AS<br />  l_dept_id NUMBER := 1; <br />BEGIN<br />FOR cur IN  <br />           (WITH dept_empl(id, name, surname, <br />              lastname, state, dept_id)<br />              AS<br />                  (<br />                    SELECT id, name, surname,  <br />                     lastname, state, dept_id <br />                      FROM test_ora_pg.dept_employees<br />                     WHERE state = p_state AND <br />                       dept_id = l_dept_id)<br />            SELECT id,state   <br />              FROM dept_empl<br />            ORDER BY id)  LOOP<br />  NULL;<br />END LOOP;<br /></pre>  |  <pre>CREATE PROCEDURE test_ora_pg.P_WITH_SELECT_VARIABLE_01(IN par_P_STATE DOUBLE)<br />BEGIN<br />    DECLARE var_l_dept_id DOUBLE DEFAULT 1;<br />    DECLARE var$id VARCHAR (8000);<br />    DECLARE var$state VARCHAR (8000);<br />    DECLARE done INT DEFAULT FALSE;<br />    DECLARE cur CURSOR FOR SELECT<br />        ID, STATE<br />        FROM (SELECT<br />            ID, NAME, SURNAME, LASTNAME, STATE, DEPT_ID<br />            FROM TEST_ORA_PG.DEPT_EMPLOYEES<br />            WHERE STATE = par_p_state AND DEPT_ID = var_l_dept_id) AS dept_empl<br />        ORDER BY ID;<br />    DECLARE CONTINUE HANDLER FOR NOT FOUND<br />        SET done := TRUE;<br />    OPEN cur;<br /><br />    read_label:<br />    LOOP<br />        FETCH cur INTO var$id, var$state;<br /><br />        IF done THEN<br />            LEAVE read_label;<br />        END IF;<br /><br />        BEGIN<br />        END;<br />    END LOOP;<br />    CLOSE cur;<br />END;<br /></pre>  | 
|  <pre>CREATE PROCEDURE <br /> TEST_ORA_PG.P_WITH_SELECT_REGULAR_MULT_01<br />AS    <br />BEGIN<br /><br /> FOR cur IN  (<br />               WITH dept_empl AS<br />                   (<br />                        SELECT id, name, surname, <br />                         lastname, state, dept_id <br />                          FROM test_ora_pg.dept_employees<br />                         WHERE state = 1),<br />                    dept AS <br />                   (SELECT id deptid, parent_id, <br />                      name deptname<br />                      FROM test_ora_pg.department                <br />                   )<br />                SELECT dept_empl.*,dept.*          <br />                 FROM dept_empl, dept<br />                 WHERE dept_empl.dept_id = dept.deptid<br />              ) LOOP<br />              NULL;<br />            END LOOP;<br /></pre>  |  <pre>CREATE VIEW TEST_ORA_PG.`P_WITH_SELECT_REGULAR_MULT_01$dept_empl<br /> `(id, name, surname, lastname, state, dept_id)<br />AS<br />(SELECT id, name, surname, lastname, state, dept_id <br />   FROM test_ora_pg.dept_employees<br />  WHERE state = 1);<br />  <br />CREATE VIEW TEST_ORA_PG.`P_WITH_SELECT_REGULAR_MULT_01$dept<br /> `(deptid, parent_id,deptname)<br />AS<br />(SELECT id deptid, parent_id, name deptname<br />   FROM test_ora_pg.department);  <br /><br /><br />CREATE PROCEDURE test_ora_pg.P_WITH_SELECT_REGULAR_MULT_01()<br />BEGIN<br />    DECLARE var$ID DOUBLE;<br />    DECLARE var$NAME VARCHAR (30);<br />    DECLARE var$SURNAME VARCHAR (30);<br />    DECLARE var$LASTNAME VARCHAR (30);<br />    DECLARE var$STATE DOUBLE;<br />    DECLARE var$DEPT_ID DOUBLE;<br />    DECLARE var$deptid DOUBLE;<br />    DECLARE var$PARENT_ID DOUBLE;<br />    DECLARE var$deptname VARCHAR (200);<br />    DECLARE done INT DEFAULT FALSE;<br />    DECLARE cur CURSOR FOR SELECT<br />        dept_empl.*, dept.*<br />        FROM TEST_ORA_PG.`P_WITH_SELECT_REGULAR_MULT_01$dept_empl<br />          ` AS dept_empl,<br />             TEST_ORA_PG.`P_WITH_SELECT_REGULAR_MULT_01$dept<br />          ` AS dept<br />        WHERE dept_empl.DEPT_ID = dept.DEPTID;<br />    DECLARE CONTINUE HANDLER FOR NOT FOUND<br />        SET done := TRUE;<br />    OPEN cur;<br /><br />    read_label:<br />    LOOP<br />    FETCH cur INTO var$ID, var$NAME, var$SURNAME, <br />     var$LASTNAME, var$STATE, var$DEPT_ID, var$deptid, <br />     var$PARENT_ID, var$deptname;<br /><br />        IF done THEN<br />            LEAVE read_label;<br />        END IF;<br /><br />        BEGIN<br />        END;<br />    END LOOP;<br />    CLOSE cur;<br />END;<br /><br />call test_ora_pg.P_WITH_SELECT_REGULAR_MULT_01()<br /></pre>  | 
|  <pre>CREATE PROCEDURE <br />  TEST_ORA_PG.P_WITH_SELECT_VAR_CROSS_02(p_state IN NUMBER)<br />AS    <br />   l_dept_id NUMBER := 10;<br />BEGIN<br /> FOR cur IN  (<br />               WITH emp AS              <br />                    (SELECT id, name, surname, <br />                      lastname, state, dept_id <br />                       FROM test_ora_pg.dept_employees<br />                      WHERE dept_id > 10                 <br />                    ),<br />                    active_emp AS<br />                    (<br />                      SELECT id<br />                        FROM emp<br />                       WHERE emp.state = p_state <br />                    )<br />                    <br />                SELECT *          <br />                  FROM active_emp                 <br />              ) LOOP<br />         NULL;<br />  END LOOP;<br />  <br />END;<br /></pre>  |  <pre>CREATE VIEW TEST_ORA_PG.`P_WITH_SELECT_VAR_CROSS_01$emp<br />    `(id, name, surname, lastname, state, dept_id)<br />AS<br />(SELECT<br />       id, name, surname, lastname, <br />       state, dept_id<br />  FROM TEST_ORA_PG.DEPT_EMPLOYEES<br />  WHERE DEPT_ID > 10);<br /><br /><br />CREATE PROCEDURE <br />   test_ora_pg.P_WITH_SELECT_VAR_CROSS_02(IN par_P_STATE DOUBLE)<br />BEGIN<br />    DECLARE var_l_dept_id DOUBLE DEFAULT 10;<br />    DECLARE var$ID DOUBLE;<br />    DECLARE done INT DEFAULT FALSE;<br />    DECLARE cur CURSOR FOR SELECT *<br />                             FROM (SELECT<br />                                      ID<br />                                     FROM <br />                             TEST_ORA_PG.<br />                              `P_WITH_SELECT_VAR_CROSS_01$emp` AS emp<br />                                   WHERE emp.STATE = par_p_state) <br />                                    AS active_emp;<br />    DECLARE CONTINUE HANDLER FOR NOT FOUND<br />        SET done := TRUE;<br />    OPEN cur;<br /><br />    read_label:<br />    LOOP<br />        FETCH cur INTO var$ID;<br /><br />        IF done THEN<br />            LEAVE read_label;<br />        END IF;<br /><br />        BEGIN<br />        END;<br />    END LOOP;<br />    CLOSE cur;<br />END;<br /></pre>  | 

# 使用 從 Oracle 資料庫遷移至 Amazon RDS for Oracle AWS Schema Conversion Tool
<a name="CHAP_Source.Oracle.ToRDSOracle"></a>

將 Oracle 結構描述和程式碼遷移到 Amazon RDS for Oracle 的一些考量事項：
+ AWS SCT 可以將目錄物件新增至物件樹狀結構。*目錄物件*是邏輯結構，每個結構都代表伺服器檔案系統上的實體目錄。您可以使用目錄物件搭配套件，例如 DBMS\$1LOB、UTL\$1FILE、DBMS\$1FILE\$1TRANSFER、DATAPUMP 公用程式等。
+ AWS SCT 支援將 Oracle 資料表空間轉換為 Amazon RDS for Oracle 資料庫執行個體。Oracle 將資料以邏輯方式存放在資料表空間中，並以實體方式存放在與相應資料表空間關聯的資料檔案中。在 Oracle 中，您可以使用資料檔案名稱來建立資料表空間。Amazon RDS 僅支援資料檔案、日誌檔案和控制檔案的 Oracle 受管檔案 (OMF)。 會在轉換期間 AWS SCT 建立所需的資料檔案。
+ AWS SCT 可以轉換伺服器層級角色和權限。Oracle 資料庫引擎是使用以角色為基礎的安全性。角色是一組權限，您可以用來授與給使用者或撤銷。Amazon RDS 的預先定義的角色 (稱為 DBA) 通常允許 Oracle 資料庫引擎的所有管理權限。以下權限不適用於使用 Oracle 引擎之 Amazon RDS 資料庫執行個體的 DBA 角色：
  + 更改資料庫
  + 更改系統
  + 建立任何目錄
  + 授予任何權限
  + 授予任何角色
  + 建立外部工作

  您可以對 Amazon RDS for Oracle 使用者角色授與所有其他權限，包括進階篩選及資料欄權限。
+ AWS SCT 支援將 Oracle 任務轉換為可在 Amazon RDS for Oracle 上執行的任務。轉換有幾個限制，包括下列項目：
  + 不支援可執行的任務。
  + 不支援使用 ANYDATA 資料類型做為引數的排程任務。
+ Oracle Real Application Clusters (RAC) One Node 是 Oracle Database Enterprise Edition 中的一個選項，與 Oracle Database 11g Release 2 一同推出。Amazon RDS for Oracle 不支援 RAC 功能。使用 Amazon RDS 異地同步備份以提供高可用性。

  在異地同步備份部署中，Amazon RDS 會自動佈建，並在不同的可用區域中維持同步待命複本。主資料庫執行個體會在待命複本的可用區域間進行同步複製。此功能可提供資料備援，排除 I/O 凍結，並降低系統備份時的延遲遽增。
+ Oracle Spatial 提供的 SQL 結構描述和函數，有助於 Oracle 資料庫中空間資料集合的儲存、擷取、更新和查詢。Oracle Locator 提供通常支援下列項目所需的功能：網際網路和無線服務型應用程式和合作夥伴型 GIS 解決方案。Oracle Locator 是功能有限的 Oracle Spatial 子集。

  若要使用 Oracle Spatial 和 Oracle Locator 功能，請將 SPATIAL 選項或 LOCATOR 選項 (兩者互斥) 新增至資料庫執行個體的選項群組。

  在 Amazon RDS for Oracle 資料庫執行個體上使用 Oracle Spatial 和 Oracle Locator 有一些先決條件：
  + 執行個體應使用 Oracle Enterprise Edition 12.1.0.2.v6 版或更新版本，或 11.2.0.4.v10 版或更新版本。
  + 執行個體應位於 Virtual Private Cloud (VPC) 內。
  + 執行個體應為可支援 Oracle 功能的資料庫執行個體類別。例如，db.m1.small、db.t1.micro、db.t2.micro 或 db.t2.small 資料庫執行個體類別不支援 Oracle Spatial。如需詳細資訊，請參閱 [Oracle 的資料庫執行個體類別支援](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html#Oracle.Concepts.InstanceClasses)。
  + 執行個體必須啟用 Auto Minor Version Upgrade (自動次要版本升級) 選項。如果存在 CVSS 分數 9 分以上的安全漏洞或其他公布的安全漏洞，Amazon RDS 會將您的資料庫執行個體更新為最新的 Oracle PSU。如需詳細資訊，請參閱 

    [Oracle 資料庫執行個體的設定](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ModifyInstance.Oracle.html#USER_ModifyInstance.Oracle.Settings)。
  + 如果您的資料庫執行個體是 11.2.0.4.v10 版或更新版本，您必須安裝 XMLDB 選項。如需詳細資訊，請參閱

    [Oracle XML 資料庫](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.Options.XMLDB.html)。
  + 您應具有 Oracle 提供的 Oracle Spatial 授權。如需詳細資訊，請參閱 Oracle 文件中的 [Oracle Spatial 和 Graph](https://shop.oracle.com/apex/product?p1=OracleSpatialandGraph)。
+ Data Guard 包含在 Oracle Database Enterprise Edition 中。使用 Amazon RDS 異地同步備份功能以提供高可用性。

  在異地同步備份部署中，Amazon RDS 會自動佈建，並在不同的可用區域中維持同步待命複本。主資料庫執行個體會在待命複本的可用區域間進行同步複製。此功能可提供資料備援，排除 I/O 凍結，並降低系統備份時的延遲遽增。
+ AWS SCT 支援在遷移至 Amazon RDS for Oracle 時轉換 Oracle DBMS\$1SCHEDULER 物件。 AWS SCT 評估報告指出是否可以轉換排程物件。如需有關搭配 Amazon RDS 使用排程物件的詳細資訊，請參閱 [Amazon RDS 文件](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.System.html#Appendix.Oracle.CommonDBATasks.ModifyScheduler)。
+ 對於從 Oracle 到 Amazon RDS for Oracle 的轉換，支援資料庫連結。資料庫連結為某一資料庫內的結構描述物件，讓您能夠存取另一個資料庫上的物件。另一個資料庫不需要是 Oracle 資料庫。不過，若要存取非 Oracle 資料庫，您必須使用 Oracle 異質服務。

  一旦建立資料庫連結，您可用 SQL 陳述式中的連結參閱另一資料庫內的表格、檢視和 PL/SQL 物件。若要使用資料庫連結，請附加 `@dblink` 至表格、檢視或 PL/SQL 物件名稱。您可用 SELECT 陳述式查詢另一資料庫內的表格或檢視。如需有關使用 Oracle 資料庫連結的詳細資訊，請參閱 [Oracle 文件](https://docs.oracle.com/cd/B28359_01/server.111/b28310/ds_concepts002.htm#ADMIN12083)。

  如需有關使用資料庫連結與 Amazon RDS 的詳細資訊，請參閱 [Amazon RDS 文件](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.Database.html#Appendix.Oracle.CommonDBATasks.DBLinks)。
+  AWS SCT 評估報告提供轉換的伺服器指標。這類有關 Oracle 執行個體的各項指標包括：
  + 目標資料庫執行個體的運算和記憶體容量。
  + 不支援的 Oracle 功能，例如 Amazon RDS 不支援的 Real Application Cluster。
  + 磁碟讀寫負載。
  + 磁碟輸送量總平均。
  + 伺服器資訊，如：伺服器名稱、作業系統、主機名稱和字元集。

## RDS for Oracle 做為目標的權限
<a name="CHAP_Source.Oracle.ToRDSOracle.ConfigureTarget"></a>

若要遷移至 Amazon RDS for Oracle，請建立特權資料庫使用者。您可以使用下列程式碼範例。

```
CREATE USER user_name IDENTIFIED BY your_password;

-- System privileges
GRANT DROP ANY CUBE BUILD PROCESS TO user_name;
GRANT ALTER ANY CUBE TO user_name;
GRANT CREATE ANY CUBE DIMENSION TO user_name;
GRANT CREATE ANY ASSEMBLY TO user_name;
GRANT ALTER ANY RULE TO user_name;
GRANT SELECT ANY DICTIONARY TO user_name;
GRANT ALTER ANY DIMENSION TO user_name;
GRANT CREATE ANY DIMENSION TO user_name;
GRANT ALTER ANY TYPE TO user_name;
GRANT DROP ANY TRIGGER TO user_name;
GRANT CREATE ANY VIEW TO user_name;
GRANT ALTER ANY CUBE BUILD PROCESS TO user_name;
GRANT CREATE ANY CREDENTIAL TO user_name;
GRANT DROP ANY CUBE DIMENSION TO user_name;
GRANT DROP ANY ASSEMBLY TO user_name;
GRANT DROP ANY PROCEDURE TO user_name;
GRANT ALTER ANY PROCEDURE TO user_name;
GRANT ALTER ANY SQL TRANSLATION PROFILE TO user_name;
GRANT DROP ANY MEASURE FOLDER TO user_name;
GRANT CREATE ANY MEASURE FOLDER TO user_name;
GRANT DROP ANY CUBE TO user_name;
GRANT DROP ANY MINING MODEL TO user_name;
GRANT CREATE ANY MINING MODEL TO user_name;
GRANT DROP ANY EDITION TO user_name;
GRANT CREATE ANY EVALUATION CONTEXT TO user_name;
GRANT DROP ANY DIMENSION TO user_name;
GRANT ALTER ANY INDEXTYPE TO user_name;
GRANT DROP ANY TYPE TO user_name;
GRANT CREATE ANY PROCEDURE TO user_name;
GRANT CREATE ANY SQL TRANSLATION PROFILE TO user_name;
GRANT CREATE ANY CUBE TO user_name;
GRANT COMMENT ANY MINING MODEL TO user_name;
GRANT ALTER ANY MINING MODEL TO user_name;
GRANT DROP ANY SQL PROFILE TO user_name;
GRANT CREATE ANY JOB TO user_name;
GRANT DROP ANY EVALUATION CONTEXT TO user_name;
GRANT ALTER ANY EVALUATION CONTEXT TO user_name;
GRANT CREATE ANY INDEXTYPE TO user_name;
GRANT CREATE ANY OPERATOR TO user_name;
GRANT CREATE ANY TRIGGER TO user_name;
GRANT DROP ANY ROLE TO user_name;
GRANT DROP ANY SEQUENCE TO user_name;
GRANT DROP ANY CLUSTER TO user_name;
GRANT DROP ANY SQL TRANSLATION PROFILE TO user_name;
GRANT ALTER ANY ASSEMBLY TO user_name;
GRANT CREATE ANY RULE SET TO user_name;
GRANT ALTER ANY OUTLINE TO user_name;
GRANT UNDER ANY TYPE TO user_name;
GRANT CREATE ANY TYPE TO user_name;
GRANT DROP ANY MATERIALIZED VIEW TO user_name;
GRANT ALTER ANY ROLE TO user_name;
GRANT DROP ANY VIEW TO user_name;
GRANT ALTER ANY INDEX TO user_name;
GRANT COMMENT ANY TABLE TO user_name;
GRANT CREATE ANY TABLE TO user_name;
GRANT CREATE USER TO user_name;
GRANT DROP ANY RULE SET TO user_name;
GRANT CREATE ANY CONTEXT TO user_name;
GRANT DROP ANY INDEXTYPE TO user_name;
GRANT ALTER ANY OPERATOR TO user_name;
GRANT CREATE ANY MATERIALIZED VIEW TO user_name;
GRANT ALTER ANY SEQUENCE TO user_name;
GRANT DROP ANY SYNONYM TO user_name;
GRANT CREATE ANY SYNONYM TO user_name;
GRANT DROP USER TO user_name;
GRANT ALTER ANY MEASURE FOLDER TO user_name;
GRANT ALTER ANY EDITION TO user_name;
GRANT DROP ANY RULE TO user_name;
GRANT CREATE ANY RULE TO user_name;
GRANT ALTER ANY RULE SET TO user_name;
GRANT CREATE ANY OUTLINE TO user_name;
GRANT UNDER ANY TABLE TO user_name;
GRANT UNDER ANY VIEW TO user_name;
GRANT DROP ANY DIRECTORY TO user_name;
GRANT ALTER ANY CLUSTER TO user_name;
GRANT CREATE ANY CLUSTER TO user_name;
GRANT ALTER ANY TABLE TO user_name;
GRANT CREATE ANY CUBE BUILD PROCESS TO user_name;
GRANT ALTER ANY CUBE DIMENSION TO user_name;
GRANT CREATE ANY EDITION TO user_name;
GRANT CREATE ANY SQL PROFILE TO user_name;
GRANT ALTER ANY SQL PROFILE TO user_name;
GRANT DROP ANY OUTLINE TO user_name;
GRANT DROP ANY CONTEXT TO user_name;
GRANT DROP ANY OPERATOR TO user_name;
GRANT DROP ANY LIBRARY TO user_name;
GRANT ALTER ANY LIBRARY TO user_name;
GRANT CREATE ANY LIBRARY TO user_name;
GRANT ALTER ANY MATERIALIZED VIEW TO user_name;
GRANT ALTER ANY TRIGGER TO user_name;
GRANT CREATE ANY SEQUENCE TO user_name;
GRANT DROP ANY INDEX TO user_name;
GRANT CREATE ANY INDEX TO user_name;
GRANT DROP ANY TABLE TO user_name;
GRANT SELECT_CATALOG_ROLE TO user_name;
GRANT SELECT ANY SEQUENCE TO user_name;

-- Database Links
GRANT CREATE DATABASE LINK TO user_name;
GRANT CREATE PUBLIC DATABASE LINK TO user_name;
GRANT DROP PUBLIC DATABASE LINK TO user_name;


-- Server Level Objects (directory)
GRANT CREATE ANY DIRECTORY TO user_name;
GRANT DROP ANY DIRECTORY TO user_name;
-- (for RDS only)
GRANT EXECUTE ON RDSADMIN.RDSADMIN_UTIL TO user_name;

-- Server Level Objects (tablespace)
GRANT CREATE TABLESPACE TO user_name;
GRANT DROP TABLESPACE TO user_name;

-- Server Level Objects (user roles)
/* (grant source privileges with admin option or convert roles/privs as DBA) */

-- Queues
grant execute on DBMS_AQADM to user_name;
grant aq_administrator_role to user_name;

-- for Materialized View Logs creation
GRANT SELECT ANY TABLE TO user_name;

-- Roles
GRANT RESOURCE TO user_name;
GRANT CONNECT TO user_name;
```

在上述範例中，請將 *user\$1name* 替換為您的使用者名稱。然後，將 *your\$1password* 替換為一個安全的密碼。

## 將 Oracle 轉換為 Amazon RDS for Oracle 時的限制
<a name="CHAP_Source.Oracle.ToRDSOracle.Limitations"></a>

將 Oracle 結構描述和程式碼遷移到 Amazon RDS for Oracle 時應考量的一些限制：
+  Amazon RDS 的預先定義的角色 (稱為 DBA) 通常允許 Oracle 資料庫引擎的所有管理權限。以下權限不適用於使用 Oracle 引擎之 Amazon RDS 資料庫執行個體的 DBA 角色：
  + 更改資料庫
  + 更改系統
  + 建立任何目錄
  + 授予任何權限
  + 授予任何角色
  + 建立外部工作

  您可以授與所有其他權限給 Oracle RDS 使用者角色。
+ Amazon RDS for Oracle 支援使用 DBMS\$1FGA 套件和 Oracle Unified Auditing 的傳統稽核、精細稽核。
+ Amazon RDS for Oracle 不支援變更資料擷取 (CDC)。若要在資料庫遷移期間和之後執行 CDC，請使用 AWS Database Migration Service。