

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

# 將 Oracle 資料庫錯誤代碼遷移至與 Amazon Aurora PostgreSQL 相容的資料庫
<a name="migrate-oracle-database-error-codes-to-an-amazon-aurora-postgresql-compatible-database"></a>

*Sai Parthasaradhi 和 Veeranjaneyulu Grandhi，Amazon Web Services*

## 總結
<a name="migrate-oracle-database-error-codes-to-an-amazon-aurora-postgresql-compatible-database-summary"></a>

此模式說明如何使用預先定義的中繼資料表，將 Oracle 資料庫錯誤代碼遷移至 [Amazon Aurora PostgreSQL 相容版本](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)資料庫。

Oracle 資料庫錯誤代碼不一定有對應的 PostgreSQL 錯誤代碼。這種錯誤代碼的差異可能會使得設定目標 PostgreSQL 架構中程序或函數的處理邏輯變得困難。

您可以將對 PL/pgSQL 程式有意義的來源和目標資料庫錯誤代碼儲存在中繼資料表中，以簡化程序。然後，將資料表設定為標記有效的 Oracle 資料庫錯誤代碼，並將其映射至其 PostgreSQL 對等項目，然後再繼續剩餘的程序邏輯。如果 Oracle 資料庫錯誤碼不在中繼資料資料表中，則程序會因例外狀況而結束。然後，如果您的程式需要，您可以手動檢閱錯誤詳細資訊，並將新的錯誤代碼新增至資料表。

透過使用此組態，Amazon Aurora PostgreSQL 相容資料庫可以像來源 Oracle 資料庫一樣處理錯誤。

**注意**  
設定 PostgreSQL 資料庫以正確處理 Oracle 資料庫錯誤碼通常需要變更資料庫和應用程式碼。

## 先決條件和限制
<a name="migrate-oracle-database-error-codes-to-an-amazon-aurora-postgresql-compatible-database-prereqs"></a>

**先決條件**
+ 作用中的 AWS 帳戶
+ 啟動和執行執行個體和接聽程式服務的來源 Oracle 資料庫
+ 已啟動並執行的 Amazon Aurora PostgreSQL 相容叢集
+ 熟悉 Oracle 資料庫
+ 熟悉 PostgreSQL 資料庫

## Architecture
<a name="migrate-oracle-database-error-codes-to-an-amazon-aurora-postgresql-compatible-database-architecture"></a>

下圖顯示資料錯誤碼驗證和處理的 Amazon Aurora PostgreSQL 相容資料庫工作流程範例：

![Aurora PostgreSQL 相容資料庫的資料錯誤碼驗證和處理。](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/images/pattern-img/82751f40-2fd9-4ce7-ab61-0874552d857b/images/b7ab627e-8f34-4635-8660-93c5c80ce38d.png)


該圖顯示以下工作流程：

1. 資料表包含 Oracle 資料庫錯誤代碼和分類，以及其同等 PostgreSQL 錯誤代碼和分類。資料表包含 **valid\_error** 資料欄，可分類特定預先定義的錯誤代碼是否有效。

1. 當 PL/pgSQL 函數 (**func\_processdata**) 擲回例外狀況時，它會叫用第二個 PL/pgSQL 函數 (**error\_validation**)。

1. **error\_validation** 函數接受 Oracle 資料庫錯誤代碼作為輸入引數。然後，函數會對照資料表檢查傳入的錯誤代碼，以查看錯誤是否包含在資料表中。

1. 如果資料表中包含 Oracle 資料庫錯誤代碼，則 **error\_validation** 函數會傳回 **TRUE** 值，且程序邏輯會繼續。如果錯誤碼不包含在資料表中，則函數會傳回 **FALSE** 值，且程序邏輯會因例外狀況而結束。

1. 當函數傳回 **FALSE** 值時，應用程式的功能主管會手動檢閱錯誤詳細資訊，以判斷其有效性。

1. 然後，新的錯誤代碼要不是手動新增到資料表。如果錯誤代碼有效並新增至資料表，則 **error\_validation** 函數會在下次發生例外狀況時傳回 **TRUE** 值。如果錯誤碼無效，且程序必須在發生例外狀況時失敗，則錯誤碼不會新增至資料表。

**技術堆疊**
+ Amazon Aurora PostgreSQL
+ pgAdmin
+ Oracle SQL Developer

## 工具
<a name="migrate-oracle-database-error-codes-to-an-amazon-aurora-postgresql-compatible-database-tools"></a>
+ [Amazon Aurora PostgreSQL 相容版本](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)是完全受管的 ACID 相容關聯式資料庫引擎，可協助您設定、操作和擴展 PostgreSQL 部署。
+ [pgAdmin](https://www.pgadmin.org/) 是 PostgreSQL 的開放原始碼管理和開發工具。它提供圖形界面，可簡化資料庫物件的建立、維護和使用。
+ [Oracle SQL Developer](https://www.oracle.com/in/database/technologies/appdev/sqldeveloper-landing.html) 是免費的整合開發環境，可簡化傳統和雲端部署中 Oracle 資料庫的開發和管理。

## 史詩
<a name="migrate-oracle-database-error-codes-to-an-amazon-aurora-postgresql-compatible-database-epics"></a>

### 將 Oracle 資料庫錯誤代碼遷移至與 Amazon Aurora PostgreSQL 相容的資料庫
<a name="migrate-oracle-database-error-codes-to-your-amazon-aurora-postgresql-compatible-database"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 在 Amazon Aurora PostgreSQL 相容資料庫中建立資料表。 | 執行下列 PostgreSQL [CREATE TABLE](https://www.postgresql.org/docs/current/sql-createtable.html) 命令：<pre>(<br /><br />    source_error_code numeric NOT NULL,<br /><br />    target_error_code character varying NOT NULL,<br /><br />    valid_error character varying(1) NOT NULL<br /><br />); </pre> | PostgreSQL 開發人員、Oracle、RDS/Aurora for PostgreSQL | 
| 將 PostgreSQL 錯誤代碼及其對應的 Oracle 資料庫錯誤代碼新增至資料表。 | 執行 PostgreSQL [INSERT](https://www.postgresql.org/docs/current/sql-insert.html) 命令，將所需的錯誤代碼值新增至 **error\_codes** 資料表。<br />PostgreSQL 錯誤代碼必須使用不同字元的資料類型 (**SQLSTATE** 值）。Oracle 錯誤代碼必須使用數值資料類型 (**SQLCODE** 值）。<br />**插入陳述式範例：**<pre>insert into error_codes values (-1817,'22007','Y');<br />insert into error_codes values (-1816,'22007','Y');<br />insert into error_codes values (-3114,'08006','N');</pre>如果您發現 Oracle 特定的 Java 資料庫連線 (JDBC) 例外狀況，您必須以一般跨資料庫例外狀況取代這些例外狀況，或切換到 PostgreSQL 特定的例外狀況。 | PostgreSQL 開發人員、Oracle、RDS/Aurora for PostgreSQL | 
| 建立 PL/pgSQL 函數以驗證錯誤代碼。 | 執行 PostgreSQL CREATE FUNCTION 命令來建立 PL/pgSQL [https://www.postgresql.org/docs/current/sql-createfunction.html](https://www.postgresql.org/docs/current/sql-createfunction.html)函數。 PostgreSQL 請確定函數執行下列動作：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/migrate-oracle-database-error-codes-to-an-amazon-aurora-postgresql-compatible-database.html) | PostgreSQL 開發人員、Oracle、RDS/Aurora for PostgreSQL | 
| 手動檢閱由 PL/pgSQL 函數記錄的新錯誤代碼。 | 手動檢閱新的錯誤代碼。<br />如果新的錯誤代碼對您的使用案例有效，請執行 PostgreSQL **INSERT** 命令將其新增至 **error\_codes** 資料表。<br />-或-<br />如果新的錯誤碼對您的使用案例無效，請勿將其新增至資料表。發生錯誤時，程序邏輯將繼續失敗並結束，但有例外。 | PostgreSQL 開發人員、Oracle、RDS/Aurora for PostgreSQL | 

## 相關資源
<a name="migrate-oracle-database-error-codes-to-an-amazon-aurora-postgresql-compatible-database-resources"></a>

[附錄 A. PostgreSQL 錯誤代碼 ](https://www.postgresql.org/docs/11/errcodes-appendix.html)(PostgreSQL 文件）

[資料庫錯誤訊息 ](https://docs.oracle.com/cd/E11882_01/server.112/e17766/toc.htm)(Oracle 資料庫文件）