轉換問題和模式參考資料

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

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

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

問題群組 ID 說明

原始碼無效。

潛在根本原因

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

可能的緩解措施

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

缺少參照物件

潛在根本原因

資料庫移轉服務會使用來源樹狀結構中的物件中繼資料,提升相依物件的程式碼轉換品質。如果程式碼參照的物件未納入來源結構定義,您可能會遇到轉換問題,因為 Database Migration Service 無法判斷遺失的參照資料欄、屬性或物件的結構或資料類型。

這個群組可能發生的錯誤包括:使用者定義型別 (UDT) 的資料型別有誤,或是資料欄、參數或變數的預設 VARCHAR 資料型別有誤。

可能的緩解措施

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

沒有主鍵的資料表

潛在根本原因

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

可能的緩解措施

遷移作業完成後,您可以保留或移除 rowid 欄。

不支援的 Oracle 內建功能

潛在根本原因

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

可能的緩解措施

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

目前不支援「SQLCODE

潛在根本原因

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

可能的緩解措施

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

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

尚未支援 Oracle SQL 函式

潛在根本原因

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

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

可能的緩解措施

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

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

尚未完全支援 Oracle 內建套件

潛在根本原因

資料庫移轉服務支援某些 Oracle 內建套件,但許多套件不支援完整轉換,例如 DBMS_STATSDBMS_UTILITYDBMS_SQL

可能的緩解措施

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

  • 變更代碼。舉例來說,您可能會使用較簡單的指令 (例如 ANALYZE),而非 DBMS_STATS.GATHER_TABLE_STATS

    由於無法在 PostgreSQL 中輕鬆複製,因此 UTL_FILEDBMS_AQ 等套件可能需要重構。

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

尚未支援轉換 Oracle 資料類型

潛在根本原因

目前不支援轉換或資料移動的 Oracle 資料類型如下:

可能的緩解措施

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

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

尚未支援來源特徵

潛在根本原因

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

可能的緩解措施

不支援結構定義物件類型

潛在根本原因

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

可能的緩解措施

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

尚未支援 PL/SQL 特徵

潛在根本原因

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

可能的緩解措施

尚未支援大量繫結

潛在根本原因

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

可能的緩解措施

如要修正這個問題,請修改使用大量繫結功能的程式碼。 您可能需要考量 PostgreSQL 和 Oracle 架構的差異,以及是否需要在 PostgreSQL 中處理陣列,以符合您的用途。

在 PostgreSQL 中處理 Oracle 大量繫結作業時,有幾種策略可供選擇。這些工具的用途取決於您的具體情況,因此建議您使用 Gemini 支援的轉換輔助功能,滿足特定需求。以下提供其他建議範例,協助您開始使用:

  • 如要使用完整的 BULK COLLECT (不含 LIMIT), 可以嘗試使用 ARRAY_AGG 函式。
  • 如果是 BULK COLLECTLIMIT,您可以嘗試使用 CURSOR FOR LOOP,在陣列中載入及處理批次的資料列。但如果您的案例允許功能變更,或許可以改用 CURSOR FOR LOOP 一次處理一列資料 (而非將資料載入陣列),這樣可能比較簡單。
  • 如為 FORALL 作業,您可以選擇使用陣列處理,並嘗試使用以集合為基礎的 DML UNNEST
  • 如果是 SAVE EXCEPTIONS,您可能需要在以資料列為基礎的 CURSOR FOR LOOP 中編寫例外狀況處理常式,因為 PostgreSQL 中沒有對應的子句。

尚未支援集合

潛在根本原因

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

可能的緩解措施

您必須相應修改轉換後的 PostgreSQL 程式碼。解決集合問題時,請記住 PostgreSQL 陣列絕不會是稀疏陣列。如果稀疏地指派元素,PostgreSQL 陣列可能會傳回與 Oracle 陣列不同的結果和基數計數。

由於 PostgreSQL 不支援以字串建立索引的陣列,因此視資料性質而定,您可能會發現 JSON/JSONBhstore 擴充功能很適合使用。

尚未支援管道函式

潛在根本原因

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

可能的緩解措施

您可以將 Oracle 管道函式替換為 PostgreSQL 設定傳回函式。建議您根據自己的用途調整程式碼。以下列舉幾個例子,協助您快速上手:

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

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

Oracle 函式的 RETURN 子句中使用的來源管道函式集合類型,在 PostgreSQL 中並不需要。

尚未支援動態 SQL 選項

潛在根本原因

資料庫移轉服務部分支援轉換動態 SQL。Oracle EXECUTE IMMEDIATEOPEN FORUSING/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_TABLEJSON_QUERYJSON_OBJECT[AGG]JSON_ARRAYAGGJSON_PATCH)。
  • 21c 之前的 Oracle 版本中,您可以將 JSON 資料儲存在 VARCHAR2CLOBBLOB 欄中,並使用 IS JSON 條件驗證資料。資料庫遷移服務不支援轉換這項條件。
可能的緩解措施
  • 如要將儲存在 JSONVARCHAR2CLOBBLOB 欄中的資料移至 PostgreSQL,您可能需要使用 MODIFY_TYPE 指令編寫轉換對應檔案。

    例如:

    MODIFY_TYPE SOURCE_TABLE_NAME:BLOB_COLUMN_NAME_WITH_JSON_DATA:JSON

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

  • 如要將 Oracle JSON 函式和運算子轉換為 PostgreSQL,可以使用 PostgreSQL 函式,例如 JSONB_ARRAY_ELEMENTSJSON_AGG。詳情請參閱 PostgreSQL 說明文件中的「 JSON Functions and Operators」。

鎖定和交易問題

潛在根本原因

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

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

尚未支援 XML

潛在根本原因

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

可能的緩解措施

雖然資料庫移轉服務不直接支援 XMLTYPE,但您可以自訂 BLOBCLOBNVARCHAR2VARCHAR2 欄,以 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

潛在根本原因

Database Migration Service 不支援程式碼轉換的 PIVOTUNPIVOT 轉置運算子。

可能的緩解措施

您可以使用 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 中執行)。

可能的緩解措施

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

尚未支援 SQL 特徵

潛在根本原因

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

可能的緩解措施

不支援的語法

潛在根本原因

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

可能的緩解措施

變更程式碼,改用功能等效的 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 語法。建議您探索 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_UNIMPLEMENTEDERROR_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 設為介於 CW0000CW999 之間。 轉換後的錯誤碼會保留來源錯誤碼的最後 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_AQDBMS_AQADM) 沒有 PostgreSQL 對應項目,因此需要重構。

可能的緩解措施

請考慮下列選項:

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

必須重構資料庫電子郵件

潛在根本原因

PostgreSQL 適用的 AlloyDB 不支援直接從資料庫傳送電子郵件。啟用這項功能的擴充功能也不受支援。 因此,資料庫遷移服務不會轉換 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 的依附元件。
  • AlloyDB for PostgreSQL 對檔案 I/O 功能設有特定限制,因此無法直接在目的地資料庫中實作這項行為。

    另一種做法是在 VPC 的 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 來源物件有效。如有,請與支援團隊聯絡, 尋求進一步協助。

一般轉換問題

潛在根本原因

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

可能的緩解措施

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