轉換問題和模式參考資料

轉換工作區會將所有轉換問題彙整成群組和類別,協助您規劃如何修正轉換錯誤和警告。每個類別代表您可能需要執行的工作類型,以修正問題 (審查、重構、調整資料類型)。群組可進一步匯總,因為群組會在較低層級區分特定案例:

轉換工作區總覽畫面,顯示轉換問題群組和類別。
圖 1. 轉換工作區總覽畫面,顯示轉換問題群組和類別。
轉換工作區總覽畫面,顯示轉換問題群組和類別。

下表列出結構定義轉換期間可能遇到的所有轉換問題群組:

問題群組 ID 說明

原始碼無效。

潛在的根本原因

如果資料庫遷移服務遇到不明語法,或 Oracle 原始碼無效 (例如預存程序缺少 END; 關鍵字),通常就會發生這個群組中的錯誤。

可能的緩解措施

修正來源 Oracle 資料庫中的無效物件。接著,在資料庫遷移服務中重新整理來源結構定義快照,並重新嘗試結構定義轉換程序。或者,您也可以在遷移作業中排除該物件。

缺少參照物件

潛在的根本原因

資料庫遷移服務會使用來源樹狀結構中的物件中繼資料,提高依附物件的程式碼轉換品質。如果程式碼參照的物件未包含在來源結構定義中,可能會發生轉換問題,因為資料庫遷移服務無法判斷缺少的參照資料欄、屬性或物件的結構或資料類型。

這個群組中可能發生的錯誤包括使用者定義類型 (UDT) 的資料類型不正確,或資料欄、參數或變數的預設 VARCHAR 資料類型不正確。

可能的緩解措施

請務必將所有參照物件新增至資料庫遷移服務來源樹狀結構,或根據您對來源資料模型的瞭解,手動調整 PostgreSQL 程式碼,以解決缺少的依附元件問題。

沒有主鍵的資料表

潛在的根本原因

資料庫遷移服務要求所有資料表都必須有主鍵。如果資料表沒有主鍵,資料庫遷移服務會在目標 PostgreSQL 資料表中,新增名為 rowid 的 NUMERIC 欄。這個資料欄會填入來源 Oracle ROWID 虛擬資料欄的對應數值。為確保 INSERT 陳述式在遷移後不會失敗,資料庫遷移服務會建立序列,並使用該序列自動遞增 rowid 欄。

可能的緩解措施

遷移後,您可以保留或移除 rowid 欄。

不支援的 Oracle 內建功能

潛在的根本原因

您可能使用了不支援的內建 Oracle 功能。

可能的緩解措施

請在 PostgreSQL 中尋找類似功能,並據此修改轉換後的程式碼。在某些情況下,缺少的函式可能由 Orafce 擴充功能提供,適用於 PostgreSQL 適用的 Cloud SQL 和 AlloyDB for PostgreSQL 遷移作業。

不支援SQLCODE

潛在的根本原因

不支援轉換 Oracle SQLCODE 函式。SQLCODE 會傳回 INTEGER,而 PostgreSQL 中最接近的對等函式是傳回 TEXT 值的 SQLSTATE 函式。

可能的緩解措施

如果原始碼不依賴 SQLCODE 傳回整數 (例如 SQLCODE 只會記錄在 VARCHAR2 欄或 DBMS_OUTPUT 訊息中),則可在 PostgreSQL 程式碼中安全使用 SQLSTATE。

如果原始碼依賴 SQLCODE 傳回整數 (例如,您將其與 NUMBER 或 INTEGER 變數搭配使用,或將 SQLCODE 傳回值儲存為參數或資料欄),則需要重構轉換後的程式碼。

不支援 Oracle SQL 函式

潛在的根本原因

資料庫遷移服務不支援轉換部分 Oracle 內建函式。

某些函式在 PostgreSQL 中可能有對應項目 (例如 ASCII),其他函式則可能共用相同名稱,但規格不同 (例如 REGEXP% 函式)。有些函式可能根本不存在。

可能的緩解措施

檢查哪個 Oracle 函式引發錯誤。

  • 如果 PostgreSQL 中有相同行為的函式,您可以忽略錯誤訊息,因為轉換後的程式碼在遷移後應會以相同方式運作。
  • 如果函式名稱相同,但運作方式不同,或在 PostgreSQL 中不存在,您可以嘗試修正轉換後的程式碼:

不完全支援 Oracle 內建套件

潛在的根本原因

資料庫遷移服務支援特定 Oracle 內建套件,但許多套件不支援完整轉換,例如 DBMS_STATS、DBMS_UTILITY 或 DBMS_SQL。

可能的緩解措施

如果您使用任何不支援的套件,可能需要:

  • 變更程式碼。舉例來說,您可以使用較簡單的指令 (例如 ANALYZE),而不使用 DBMS_STATS.GATHER_TABLE_STATS。

    UTL_FILE 和 DBMS_AQ 等套件可能需要重構,因為無法在 PostgreSQL 中輕鬆複製。

  • 部分 Oracle 資料庫函式或功能可透過擴充功能複製,例如 Orafce。如要進一步瞭解目的地資料庫支援的擴充功能,請參閱「 支援的資料庫擴充功能」。

不支援轉換 Oracle 資料類型

潛在的根本原因

目前不支援轉換或移動部分 Oracle 資料類型。

可能的緩解措施

在多數情況下,PostgreSQL 都有對應的資料類型。您可以 使用轉換對應檔案自訂轉換邏輯,並將不支援的 Oracle 資料類型轉換為必要的 PostgreSQL 資料類型。

如要進一步瞭解資料類型支援,請參閱「 轉換工作區 - 總覽和支援的物件」。

命名衝突

潛在的根本原因

這個群組會擷取多個資料庫物件 (例如資料表、materialized view) 轉換為在目的地資料庫中使用相同名稱的問題。舉例來說,如果來源物件的名稱只有大小寫不同,就可能發生這個問題。Oracle 物件名稱不區分大小寫,但 PostgreSQL 則會區分大小寫,因此物件名稱會轉換為使用相同字串。

可能的緩解措施

直接在來源資料庫中重新命名衝突的物件,或在轉換工作區編輯器中,重新命名已轉換的結構定義。您也可以 搭配使用轉換對應檔案和 RENAME_* 指令。

不支援來源功能

潛在的根本原因

這個群組會擷取所有與不支援轉換的 Oracle 功能相關的一般問題。這個群組中的問題不屬於任何其他更具體的問題群組。

可能的緩解措施

不支援結構定義物件類型

潛在的根本原因

PostgreSQL 沒有適當的對等項目,因此資料庫遷移服務不支援某些 Oracle 結構定義物件類型的程式碼轉換。例如索引組織資料表 (IOT)、文字搜尋索引,或使用者定義類型 (UDT) 的主體。

可能的緩解措施

資料庫遷移服務會將不支援的物件轉換為最接近的 PostgreSQL 對等物件。例如,IOT 會變成具有主鍵限制的一般資料表,文字搜尋索引則會轉換為 B 樹狀結構索引。請注意,這些轉換可能會導致原始物件類型特有的功能遺失。

不支援 PL/SQL 功能

潛在的根本原因

這個群組會擷取所有一般問題,這些問題與不支援轉換的 PL/SQL 功能有關。這個群組中的問題不屬於任何其他更具體的問題群組。

可能的緩解措施

不支援大量繫結

潛在的根本原因

資料庫遷移服務程式碼轉換功能目前不支援 Oracle 大量繫結功能,例如 BULK COLLECT、FORALL 或 SAVE EXCEPTIONS。

可能的緩解措施

如要修正問題,請修改使用大量繫結功能的程式碼。 建議您考量 PostgreSQL 和 Oracle 架構的差異,以及 PostgreSQL 是否需要陣列處理功能,才能滿足您的用途需求。

在 PostgreSQL 中,您可以採用多種策略來處理 Oracle 大量繫結作業。這些工具的使用方式取決於您的具體情境,因此建議您使用 Gemini 輔助轉換功能來處理特定需求。以下提供其他建議範例,協助您快速上手:

  • 如要取得完整 BULK COLLECT (不含 LIMIT),可以嘗試使用 ARRAY_AGG 函式。
  • 如果是 LIMIT 的 BULK COLLECT,您可以嘗試使用 CURSOR FOR LOOP,載入及處理陣列中的批次資料列。不過,如果您的情況允許功能變更,則可能更簡單的替代方法是使用 CURSOR FOR LOOP 一次處理一列 (而不是將其載入陣列)。
  • 如果是 FORALL 作業,您可以選擇使用陣列處理,並嘗試搭配 UNNEST 使用以集合為基礎的 DML。
  • 如果是 SAVE EXCEPTIONS,您可能需要在以資料列為基礎的 CURSOR FOR LOOP 中編寫例外狀況處理常式,因為 PostgreSQL 中沒有對應的子句。

不支援集合

潛在的根本原因

資料庫遷移服務程式碼轉換功能部分支援 Oracle 集合。

可能的緩解措施

您必須據此修改轉換後的 PostgreSQL 程式碼。解決集合問題時,請注意 PostgreSQL 陣列絕非稀疏。如果稀疏指派元素,PostgreSQL 陣列傳回的結果和基數計數可能與 Oracle 陣列不同。

PostgreSQL 不支援字串索引陣列,因此視資料性質而定,您可能會發現 JSON/JSONB 或 hstore 擴充功能較為合適。

不支援管道函式

潛在的根本原因

資料庫遷移服務不支援管道函式。

可能的緩解措施

您可以使用 PostgreSQL 集合傳回函式,取代 Oracle 管道函式。建議您根據用途調整程式碼。以下列舉幾個例子,協助您快速上手:

  1. 參照從來源 Oracle 物件或記錄類型轉換而來的 PostgreSQL 類型 (UDT),該類型定義了管道函式的資料列類型。接著,請根據您的具體情況,將 PostgreSQL 函式的 return 子句修改為 RETURNS SETOF <type name> 或 RETURNS TABLE。

  2. 將轉換後的 PIPE ROW 程式碼中的傳回值替換為 RETURN NEXT <row or record variable>。

來源管道函式的集合類型 (用於 Oracle 函式的 RETURN 子句) 在 PostgreSQL 中並非必要。

不支援動態 SQL

潛在的根本原因

資料庫遷移服務部分支援轉換動態 SQL。Oracle EXECUTE IMMEDIATE、OPEN FOR 和 USING/INTO 關鍵字會正確轉換為 PostgreSQL 對應項目,但實際的動態 SQL、DML 或 DDL 字串不會轉換。

可能的緩解措施

您必須修改轉換後的程式碼,以符合您的需求。 強烈建議您使用 Gemini 輔助轉換功能處理動態 SQL。

不支援「CONNECT BY」選項

潛在的根本原因

資料庫遷移服務支援大多數 CONNECT BY 運算子、函式和虛擬資料欄,並會轉換為 PostgreSQL 遞迴通用資料表運算式 (CTE)。但有某些例外狀況可能需要您留意。舉例來說,ORDER SIBLINGS BY 子句僅支援遞增順序。

可能的緩解措施

您無法以簡單的方式複製 ORDER SIBLINGS BY 子句來遞減排序,因此可能需要重新建構程式碼,才能以遞增順序運作。

請查看 CONNECT BY 運算子的回報問題,並視需要調整程式碼。建議您探索 Gemini 輔助的自動轉換功能,加快修正速度。詳情請參閱「 使用 Gemini 輔助功能轉換 Oracle 程式碼和結構定義」。

不支援 JSON

潛在的根本原因

資料庫遷移服務在支援 JSON 進行資料移動和程式碼轉換時,有某些限制:

  • 不支援JSONB資料移動。
  • 程式碼轉換不支援 Oracle 中的 JSON 查詢函式或運算子 (例如 JSON_TABLE、JSON_QUERY、JSON_OBJECT[AGG]、JSON_ARRAYAGG、JSON_PATCH)。
  • 在 21c 之前的 Oracle 版本中,您可以將 JSON 資料儲存在 VARCHAR2、CLOB 或 BLOB 資料欄中,並使用 IS JSON 條件進行驗證。資料庫遷移服務不支援轉換這項條件。
可能的緩解措施
  • 如要將儲存在 VARCHAR2、CLOB 或 BLOB 欄中的 JSON 資料移至 PostgreSQL,您可能需要使用 MODIFY_TYPE 指令編寫轉換對應檔案。

    例如:

    MODIFY_TYPE SOURCE_TABLE_NAME:BLOB_COLUMN_NAME_WITH_JSON_DATA:JSON

    如要進一步瞭解轉換對應檔案,請參閱「 轉換對應檔案」。

  • 如要將 Oracle JSON 函式和運算子轉換為 PostgreSQL,可以使用 JSONB_ARRAY_ELEMENTS、JSON_AGG 等 PostgreSQL 函式。詳情請參閱 PostgreSQL 說明文件中的 JSON 函式和運算子。

鎖定和交易問題

潛在的根本原因

資料庫遷移服務程式碼轉換不支援 LOCK 或 SAVEPOINT 陳述式。PostgreSQL 不支援 SAVEPOINT。

可能的緩解措施
  • 將 Oracle 中的 SAVEPOINT 區塊拆分為 PostgreSQL 中使用 ROLLBACK 陳述式的獨立交易區塊。
  • 如要實作 DBMS_LOCK,請使用 PostgreSQL pg_dbms_lock 擴充功能。這項擴充功能會模擬 Oracle DBMS_LOCK 套件的功能,簡化將 Oracle 使用者定義鎖定遷移至 PostgreSQL 的程序。

不支援 XML

潛在的根本原因

資料庫遷移服務不支援 Oracle XMLTYPE 或相關聯的 XML 函式和運算子。

可能的緩解措施

雖然資料庫遷移服務不直接支援 XMLTYPE,但您可以將 BLOB、CLOB、NVARCHAR2 或 VARCHAR2 資料欄自訂為 XML,以便移動資料。PostgreSQL 支援 XML 功能。

如要遷移 XML 資料,請按照下列步驟操作:

  1. 使用 XML 資料的 MODIFY_TYPE 指令建立轉換對應檔案。例如:

    MODIFY_TYPE SOURCE_TABLE_NAME:BLOB_COLUMN_NAME_WITH_XML_DATA:XML

    如要進一步瞭解轉換對應檔案,請參閱「 轉換對應檔案」。

  2. 啟動遷移工作。這項程序會將所有資料從 Oracle 遷移至 PostgreSQL,但 XMLTYPE 類型資料欄中的資料除外。在 PostgreSQL 中,這些資料欄會填入 NULL 值。
  3. 在 PostgreSQL 中建立外部資料表,方法是僅選取 Oracle 的 XMLTYPE 資料欄。納入來源資料表的主鍵欄。
  4. 將外部資料表中的 XML 資料合併至原始 PostgreSQL 資料表。

如要進一步瞭解 PostgreSQL 如何與 XMLTYPE 搭配運作,請參閱 PostgreSQL 說明文件中的「 XML 函式」。

不支援PIVOT

潛在的根本原因

資料庫遷移服務不支援 PIVOT 和 UNPIVOT 轉置運算子,無法轉換程式碼。

可能的緩解措施

您可以使用 tablefunc 擴充功能,或將來源 PIVOT 運算式重寫為條件式匯總,在 PostgreSQL 中進行 PIVOT 轉置。例如:

  • SUM(CASE WHEN <condition> THEN <value> ELSE 0 END)
  • COUNT(CASE WHEN <condition> THEN 1 END)

您可以在 PostgreSQL 中,透過多種方式建立 UNPIVOT 轉置,從一組資料欄建立鍵/值組合:

  • 將 LATERAL 彙整與一組 VALUES 結合。例如: SELECT ... FROM <table> CROSS JOIN LATERAL (VALUES ('<column1-name>', <column1>), ('<column2-name>', <column2>) AS u(column_name, column_value))
  • 搭配 ARRAY 使用 UNNEST。例如: SELECT ..., UNNEST(ARRAY['<column1-name>', '<column2-name>']) AS column_name, UNNEST(ARRAY[column1, column2]) AS column_value FROM <table>

不支援ALTER陳述式選項

潛在的根本原因

資料庫遷移服務不支援轉換 ALTER 陳述式 (通常在動態 SQL 中執行)。

可能的緩解措施

將 Oracle ALTER 陳述式替換為 PostgreSQL 中的 SET 指令。建議您探索 Gemini 輔助的自動轉換功能,加快修正速度。詳情請參閱「 使用 Gemini 輔助功能轉換 Oracle 程式碼和結構定義」。

不支援 SQL 功能

潛在的根本原因

這個群組會擷取所有與不支援轉換的 SQL 功能相關的一般問題。這個群組中的問題不屬於其他更具體的問題群組。例如資料庫事件觸發條件、GRANT 陳述式、多資料表 INSERT 作業、內嵌檢視表 (INSERT INTO (SELECT ... FROM ...)) 的 DML、橫向檢視表。

可能的緩解措施

不支援的語法

潛在的根本原因

這個群組會擷取與不支援的 Oracle SQL 或 PL/SQL 語法相關的所有一般問題。這個群組中的問題不屬於任何其他更具體的問題群組。

可能的緩解措施

請將程式碼變更為使用 PostgreSQL 功能等效的 PostgreSQL 語法。建議您探索 Gemini 輔助的自動轉換功能,調整程式碼。詳情請參閱「 使用 Gemini 輔助功能轉換 Oracle 程式碼和結構定義」。

不支援的 SQL 語法

潛在的根本原因

您的原始碼使用資料庫遷移服務不支援的 SQL 語法或元素。例如,不支援 Oracle TO_DATE 函式中的 NLS_LANG 參數。

可能的緩解措施
不支援的 PL/SQL 語法

潛在的根本原因

您的原始碼使用資料庫遷移服務不支援的 PL/SQL 語法或元素。例如,不支援以記錄為基礎的 INSERT 陳述式 (例如 INSERT INTO table VALUES r_variable) 和 PRAGMA RESTRICT_REFERENCES。

可能的緩解措施

請變更程式碼,改用功能等同於 PostgreSQL 的 PostgreSQL 語法。建議您探索 Gemini 輔助的自動轉換功能,調整程式碼。詳情請參閱「 使用 Gemini 輔助功能轉換 Oracle 程式碼和結構定義」。

不支援的日期和時間戳記語法

潛在的根本原因

如果日期或時間戳記語法、作業或運算式不受支援,資料庫遷移服務可能會顯示錯誤或警告。這類問題包括比較不相符的資料類型,或是在時間戳記中使用 TZH:TZM 格式模型。如要進一步瞭解支援的物件和資料類型,請參閱「 關於轉換工作區」。

可能的緩解措施

您可以使用 PostgreSQL 對等項目,重新建立大部分的日期和時間戳記運算式。建議您探索 Gemini 輔助的自動轉換功能,加快修正速度。詳情請參閱「 使用 Gemini 輔助功能轉換 Oracle 程式碼和結構定義」。

不支援的 Oracle 例外狀況處理語法元素

潛在的根本原因

資料庫遷移服務程式碼轉換不支援下列 Oracle PL/SQL 例外狀況語法元素:

  • 使用 RAISE_APPLICATION_ERROR 搭配變數錯誤代碼,而非常值 -20nnn 代碼。
  • 使用 SQLERRM 搭配錯誤代碼引數,因為 PostgreSQL 不支援此語法。
可能的緩解措施

您必須手動解決轉換後程式碼中的這些問題。 建議您探索 Gemini 輔助的自動轉換功能,加快修正速度。詳情請參閱「 使用 Gemini 輔助功能轉換 Oracle 程式碼和結構定義」。

資料類型和轉換問題

潛在的根本原因

資料庫遷移服務可依據情境將轉換問題分組,例如 類型比較運算式中發生的轉換問題。CW_OP0500 群組會擷取所有不屬於其他問題群組的一般資料類型轉換問題。

可能的緩解措施

在多數情況下,資料庫遷移服務會在轉換後的 PostgreSQL 程式碼中,發出 ERROR_UNIMPLEMENTED 或 ERROR_TYPE 訊息。請根據您對相關資料類型的瞭解,解決這項錯誤。

日期格式模型問題

潛在的根本原因

根據格式模型,將日期或時間戳記運算式與字串相互轉換時,可能會遇到警告或問題。如果 Oracle 原始碼中的轉換不含明確的日期或時間戳記格式模型,資料庫遷移服務會使用預設模型 (目前為 DD-MON-RR)。

如果為隱含轉換產生的格式模型與同一運算式中的明確格式模型衝突,有時可能會導致轉換後的程式碼發生問題。如果資料可能受到 Oracle RR 格式和 PostgreSQL YY 格式差異的影響,也可能發生這個問題。

可能的緩解措施

在轉換工作區中,查看並驗證轉換後的 PostgreSQL 運算式。

數字格式模型問題

潛在的根本原因

資料庫遷移服務不支援所有 Oracle 格式模型。例如,不支援 'L' 或 'X'。 如果程式碼會根據 Oracle 格式模型將字串轉換為數字,您可能會遇到問題或警告。

可能的緩解措施

如果 Oracle 格式模型在 PostgreSQL 中沒有對應項目,您可能需要重構運算式或格式模型。建議您探索 Gemini 輔助的自動轉換功能,加快修正速度。詳情請參閱「 使用 Gemini 輔助功能轉換 Oracle 程式碼和結構定義」。

資料類型轉換問題

潛在的根本原因

如果資料類型轉換不受支援或不準確,可能會發生錯誤。資料庫遷移服務通常會發出 ERROR_UNIMPLEMENTED。這通常是因為中繼資料遺失或不完整。 資料庫遷移服務可能沒有足夠的資訊來轉換類型,例如函式引數或程序參數。

可能的緩解措施

調整 PostgreSQL 程式碼,確保資料類型轉換正確。如要進行這些修正,您必須熟悉參照的屬性、變數和資料欄。

比較問題

潛在的根本原因

轉換資料比較運算式時,資料庫遷移服務可能沒有足夠的中繼資料或資料類型資訊。舉例來說,將使用者定義類型 (UDT) 與 NULL 比較時,就可能發生這種情況。

可能的緩解措施

請查看轉換後的 PostgreSQL 運算式並解決問題。建議您探索 Gemini 輔助的自動轉換功能,加快修正速度。詳情請參閱「 使用 Gemini 輔助功能轉換 Oracle 程式碼和結構定義」。

這個類別的問題代表 Oracle 原始碼已正確轉換為最接近的 PostgreSQL 對等項目,但產生的程式碼可能會有細微的語意或功能差異,需要您審查。這是因為 Oracle 和 PostgreSQL 處理資料類型、格式或物件的方式不同。

乍看之下,這個類別可能與「 資料類型和轉換 (CW_05)」類別中的問題重疊,但請注意,兩者代表不同的問題。CW_05 包含已知問題,資料庫遷移服務無法將 Oracle 程式碼轉換為對應的 PostgreSQL 程式碼。

請查看日期格式模型

潛在的根本原因

大多數 Oracle 日期和時間戳記格式模型在 PostgreSQL 中都有適當的對應項目,因此轉換後的程式碼在語意或功能上沒有差異。部分模型沒有完全比對的項目,且行為不盡相同。例如, Oracle RR 格式會轉換為 PostgreSQL YY 格式。

可能的緩解措施

請檢查並驗證含有格式模型轉換的運算式,確保轉換後的程式碼運作符合預期。

請查看數字格式模型

潛在的根本原因

大多數來源數值格式模型在 PostgreSQL 中都有對應項目,因此轉換後的程式碼在語意或功能上沒有差異。不過,部分格式模型可能沒有完全比對的項目,或行為略有不同。

可能的緩解措施

請檢查並驗證含有格式模型轉換的運算式,確保轉換後的程式碼能正常運作。

請查看例外狀況代碼

潛在的根本原因

當您使用 RAISE_APPLICATION_ERROR,且錯誤代碼介於 -20000 至 -20999 之間時,資料庫遷移服務會將其轉換為 PostgreSQL RAISE EXCEPTION,且 SQLSTATE 介於 CW0000 至 CW999 之間。轉換作業會保留來源錯誤代碼的最後 3 位數,並在前面加上 CW。

可能的緩解措施

請查看這項行為,判斷是否符合您的需求。 只有在來源錯誤代碼對應用程式、支援團隊或說明文件有意義時,才需要進行這項審查。如果錯誤代碼值本身不具意義,您可以忽略這則警告。

請查看例外狀況訊息

潛在的根本原因

SQLERRM 函式同時存在於 Oracle PL/SQL 和 PostgreSQL 中,但在各引擎中傳回的錯誤文字可能不同。舉例來說,在 Oracle 中除以零會傳回錯誤文字 ORA-01476: divisor is equal to zero,但在 PostgreSQL 中會傳回 ERROR: division by zero。

可能的緩解措施

如果您的應用程式、支援基礎架構或說明文件仰賴錯誤文字,請查看轉換。否則,您可以忽略這項差異。

請查看 Oracle 內建函式的模擬情形

潛在的根本原因

資料庫遷移服務的程式碼和結構定義轉換功能,旨在提供與 PostgreSQL 對等的 Oracle 函式行為,但結果不一定符合您的情境。因此,轉換工作區一律會提供建議警告,並附上可能需要您審查的函式轉換。

可能的緩解措施

建議您查看轉換工作區在 CW_OP0605 問題群組中發出警告的物件。

請查看外鍵欄資料類型

潛在的根本原因

資料庫遷移服務發現父項和子項物件之間的資料類型規格不符 (例如父項資料欄為 NUMBER(4),子項資料欄為 NUMBER(10))。

可能的緩解措施

在大多數情況下,資料類型略有不符並不會導致資料庫功能發生問題。不過,建議您檢查轉換後的資料模型,確認是否有不一致之處。

建議檢討功能性
潛在的根本原因

這個群組會擷取所有一般問題,這些問題與 Oracle 和 PostgreSQL 程式碼中潛在的功能差異有關。這個群組中的問題不屬於任何其他更具體的問題群組。

可能的緩解措施

請查看 Oracle 內建函式的模擬情形

潛在的根本原因

許多 Oracle 內建函式在 PostgreSQL 中沒有直接對應的函式。為降低遷移作業發生這類問題的機率,資料庫遷移服務會使用不同的 SQL 運算式轉換程式碼,在 PostgreSQL 中產生同等的功能行為。

在某些情況下,轉換後的運算式可能會很複雜。 資料庫遷移服務會在 CW_OP0702 群組中發出警告,醒目顯示可能的問題,並建議使用運算式模擬函式。

可能的緩解措施

請檢查轉換後的程式碼,確保轉換後的函式在 PostgreSQL 環境中運作正常。

必須重構自主交易

潛在的根本原因

PostgreSQL 不支援 自主交易。

可能的緩解措施

您可以使用 dblink、 pg_background 或 PL/Proxy 擴充功能,在 PostgreSQL 中執行自主交易。使用上述任一擴充功能發出的資料庫呼叫會在不同的工作階段中執行,因此會產生自主交易。

必須重構資料庫連結

潛在的根本原因

資料庫遷移服務不支援 Oracle 資料庫連結。使用連結的物件需要重構。

可能的緩解措施

視資料庫連結的目標而定,您可以使用資料庫擴充功能 (例如 dblink、 postgres_fdw、 oracle_fdw 或 PL/Proxy),在 PostgreSQL 中實作同等功能。

必須重構進階佇列功能

潛在的根本原因

Oracle Advanced Queuing 套件 (DBMS_AQ、DBMS_AQADM) 沒有 PostgreSQL 對等項目,因此需要重構。

可能的緩解措施

請考慮採用下列選項:

  • 重構佇列功能,將其從資料庫移至應用程式層。
  • 請使用 PostgreSQL 資料表、快訊和觸發條件,實作同等行為。
  • 如需進一步協助,請洽詢技術解決方案團隊代表。

必須重構資料庫電子郵件

潛在的根本原因

PostgreSQL 適用的 Cloud SQL 不支援直接從資料庫傳送電子郵件。也不支援啟用這項功能的擴充功能。 因此,資料庫遷移服務不會轉換 UTL_SMTP 套件的使用方式。

可能的緩解措施

重構資料庫電子郵件程式碼,並將傳送電子郵件的責任移至應用程式層。您仍可使用資料庫擷取需要傳送電子郵件的條件。

舉例來說,您可以將電子郵件詳細資料寫入專用資料表。這個資料表也可以做為電子郵件佇列,您可以使用 Cloud Run functions 函式輪詢,並處理實際的 SMTP 處理作業。

必須重構工作和排程功能

潛在的根本原因

資料庫遷移服務不會轉換 DBMS_JOB 和 DBMS_SCHEDULER Oracle 套件。您需要重構參照這些套件的程式碼。

可能的緩解措施

如果是沒有依附元件的簡單工作,您可以使用 pg_cron 擴充功能,在目標 PostgreSQL 資料庫中手動建立排定的工作。

如果 pg_cron 不支援較複雜的時間表,您可能需要使用應用程式層級或第三方排程器。

必須重構檔案 I/O

潛在的根本原因

資料庫遷移服務不支援 Oracle UTL_FILE 套件。您必須重構參照這個套件的程式碼。

Orafce 擴充功能包含 UTL_FILE 模擬,但由於檔案 I/O 功能受限,可能無法在 Google 代管的 PostgreSQL 環境中運作。

可能的緩解措施
  • 重構程式碼,移除對 UTL_FILE 的依附元件。
  • PostgreSQL 適用的 Cloud SQL 對檔案 I/O 功能設有特定限制,因此無法直接在目的地資料庫中實作這項行為。

    另一個可能的方法是在虛擬私有雲的 Compute Engine VM 上,安裝含有 orafce 擴充功能的 PostgreSQL。接著,您可以在目的地資料庫中使用 PL/Proxy 擴充功能,呼叫在 Compute Engine VM 資料庫中執行的 與 PostgreSQL 相容的 UTL_FILE 版本。

同義詞

潛在的根本原因

PostgreSQL 不支援同義詞。如果是程式碼物件,資料庫遷移服務會自動將同義詞參照替換為來源結構定義和物件名稱。如果您在程式碼物件以外使用同義詞 (例如在資料庫應用程式使用者的唯讀結構定義中),則必須手動轉換。

可能的緩解措施

如要在程式碼物件以外使用同義詞,可以使用 PostgreSQL SEARCH_PATH 參數,或重構程式碼,以便使用檢視表查詢物件。

必須重構全域臨時資料表

潛在的根本原因

這個問題群組是警告,表示資料庫遷移服務在 Oracle 原始碼中偵測到全域暫存資料表。如要遷移全域暫存資料表,您必須在目的地資料庫上安裝並建立 pgtt PostgreSQL 擴充功能。

可能的緩解措施

建議您確認已在目的地資料庫安裝並建立 pgtt PostgreSQL 擴充功能。

請查看 Gemini 建議

潛在的根本原因:

這個問題群組會擷取與 Gemini 強化程式碼轉換相關的所有一般錯誤和警告。

可能緩解措施:這裡發現的問題不一定代表實際問題,但強烈建議您檢查所有 Gemini 強化轉換,確保符合預期。

請查看 AI 增強的程式碼

可能的根本原因:這段 DDL 程式碼是透過 Gemini 強化功能轉換,可能需要您檢查是否正確。

可能緩解措施:建議您仔細檢查透過 AI 增強功能轉換的程式碼,確保最終結果與來源結構定義的功能相符。

參考資料

潛在根本原因:Gemini 強化建議可能包含多個來源的內容。某些引用內容可能受到授權限制。建議您檢查轉換後的程式碼,確認是否需要註明出處。

中繼資料轉換問題

潛在的根本原因:

這個群組會擷取不屬於其他更具體問題群組的所有轉換問題。

可能的緩解措施

建議您根據對來源資料模型的瞭解,檢查轉換後的程式碼,並視需要調整。

中繼資料轉換問題

潛在的根本原因:

這個群組會擷取所有不屬於其他更具體問題群組的中繼資料追蹤問題。

可能的緩解措施:

這類問題通常與編譯錯誤或警告有關,可能導致轉換後的 PostgreSQL 資料類型發生問題。建議您根據對來源資料模型的瞭解,檢查轉換後的程式碼,並調整錯誤的參照。

與支援團隊聯絡

潛在的根本原因

在特殊極端情況下,有效的 Oracle 來源物件可能會發生內部錯誤。如果遇到這種情況,請與支援團隊聯絡,取得進一步協助。

一般轉換問題

潛在的根本原因

這個群組包含所有不屬於其他更具體問題類別或群組的問題。

可能的緩解措施

建議您根據對來源資料模型和程式碼的瞭解,檢查轉換後的程式碼,並視需要調整。