轉換工作區

轉換工作區可協助您將來源資料庫中的結構定義和物件,轉換為與目的地資料庫相容的 SQL 語法。本頁面提供資料庫移轉服務轉換工作區的總覽:

Oracle 遷移作業不支援特定資料類型。 詳情請參閱「 資料類型已知限制」。

轉換進度總覽

轉換工作區提供健全的總覽資訊,可協助您深入瞭解待處理或已解決的轉換問題總數、Gemini 輔助的擴增功能,以及轉換程序的整體運作情況。

轉換工作區畫面,顯示「轉換總覽」分頁,您可以在這裡查看轉換的物件數量、轉換問題,以及 Gemini 輔助轉換的強化功能。
圖 1. 轉換工作區總覽畫面,您可以在這裡監控轉換進度、查看問題,以及檢查產生的 PostgreSQL 程式碼。(按一下即可放大)
轉換工作區畫面,顯示「轉換總覽」分頁,您可以在這裡查看轉換的物件數量、轉換問題,以及 Gemini 輔助轉換的強化功能。

您可以在這個檢視畫面中,依類型、問題嚴重程度、所需動作或轉換狀態,篩選結構定義中的物件。

轉換工作區畫面,顯示如何依類型或狀態篩選轉換後的物件。
圖 2. 依狀態和物件類型篩選已轉換的物件。(按一下即可放大)
轉換工作區畫面,顯示如何依類型或狀態篩選轉換後的物件。

如要進一步瞭解如何使用轉換總覽檢查轉換結果,請參閱「 使用轉換工作區」。

確定性程式碼和結構定義轉換

建立轉換工作區時,資料庫移轉服務會立即使用一組確定性轉換規則執行初始結構定義轉換,將特定 Oracle 資料型別和物件對應至特定 PostgreSQL 資料型別和物件。這項程序僅支援一小部分可用的 Oracle 資料庫物件。

確定性程式碼轉換支援下列 Oracle 資料庫物件:

支援的 Oracle 結構定義元素

  • 限制
  • 索引 (僅限與資料表建立在相同結構定義中的索引)
  • 具體化檢視表
  • 物件類型 (部分支援)
  • 序列
  • 同義詞
  • 資料表
  • 瀏覽次數

支援的 Oracle 程式碼元素

  • 觸發條件 (僅限資料表層級)
  • 套件
  • 函式
  • 預存程序

互動式 SQL 編輯器

您可以使用互動式 SQL 編輯器,直接在資料庫遷移服務中修改轉換後的 PostgreSQL 語法。您可以利用這項工具修正轉換問題,或調整結構定義以符合需求。部分物件無法在內建編輯器中修改。

可編輯的 Oracle 物件

轉換來源資料庫程式碼和結構定義後,您可以使用互動式編輯器,修改特定類型物件產生的 SQL。編輯器支援下列 Oracle 物件:

  • 資料表觸發條件 (需要權限)
  • 具體化檢視表
  • 套件
  • 函式、預存程序
  • 同義詞
  • 瀏覽次數
  • 限制
  • 索引
  • 序列

此外,部分物件會轉換,但無法直接在資料庫移轉服務中編輯。如要修改這類物件,您必須在 套用轉換後的結構定義和程式碼後,直接在目的地資料庫中更新。

不支援編輯的物件:

  • 使用者定義的物件類型
  • 資料表
  • 結構定義

使用 Gemini 加速程式碼和結構定義轉換

資料庫移轉服務會在轉換工作區整合 Gemini for Google Cloud ,協助您加快轉換程序,並在下列領域提升轉換成效:

  • 透過 Gemini 支援的自動轉換功能,強化確定性轉換結果,運用 AI 的強大功能,大幅減少 PostgreSQL 程式碼中需要手動調整的項目。

  • 透過轉換助理提供程式碼說明功能:一組專屬提示,可協助您進一步瞭解轉換邏輯、建議修正轉換問題,或最佳化轉換後的程式碼。

  • 運用 Gemini 程式碼轉換建議加快修正轉換問題:當您修正轉換問題時,Gemini 模型會從中學習,並建議變更工作區中的其他錯誤物件。

如要進一步瞭解採用 Gemini 的轉換功能,請參閱下列頁面:

轉換對應檔案

您可以使用轉換對應檔案自訂轉換邏輯。 轉換對應檔案是文字檔,內含將 Oracle 物件轉換為 PostgreSQL 物件的精確指令 (稱為轉換指令)。

支援的轉換指令

資料庫移轉服務支援轉換對應檔案的下列轉換指令:

EXPORT_SCHEMA

EXPORT_SCHEMA 是所有轉換對應檔案的必要指令。資料庫移轉服務需要這項指示,才能確保來源結構定義轉換為正確的目的地結構定義。請確認轉換對應檔案包含下列程式碼:

EXPORT_SCHEMA 1

SCHEMA

資料庫移轉服務必須能夠判斷哪個結構定義包含應透過轉換指令修改的物件。SCHEMA 指令會對轉換流程進行下列調整:

  • 資料庫移轉服務只會轉換這個結構定義。如要在單一轉換工作區中轉換其他結構定義,請上傳多個具有不同結構定義的檔案。
  • 檔案中提供的所有其他自訂指令,只會套用至這個特定結構定義中的物件。

請使用下列格式:

SCHEMA SCHEMA_NAME

其中 SCHEMA_NAME 是來源資料庫中的結構定義名稱。

  • 如果您在轉換對應檔案中加入這項指令,所有自訂項目只會套用至這個特定結構定義中包含的物件。如要自訂其他結構定義中的物件,請建立多個轉換對應檔案,並上傳至轉換工作區。
  • 如果略過這項指令,您必須為其他轉換指令修改的物件提供明確的結構定義名稱。舉例來說,您需要使用 "SCHEMA_NAME.SOURCE_TABLE_NAME",而不是將 SOURCE_TABLE_NAME 用於 REPLACE_TABLES 指令。

DATA_TYPE

您可以使用這項指令,在 Oracle 和 PostgreSQL 語法之間,明確對應任何支援的資料類型。這項指令會以逗號分隔對應清單。整個定義必須在同一行提供,但您可以在設定檔中加入多個 DATA_TYPE 指令。請使用下列格式:

DATA_TYPE ORACLE_DATA_TYPE1:PGSQL_DATA_TYPE1
DATA_TYPE ORACLE_DATA_TYPE2:PGSQL_DATA_TYPE2...

其中 ORACLE_DATA_TYPEPGSQL_DATA_TYPE 是您在遷移作業中使用的 Oracle 和 PostgreSQL 版本支援的資料類型。如需支援版本資訊,請參閱 情境總覽

範例

DATA_TYPE REAL:double precision,SMALLINT:integer

如要進一步瞭解 Oracle 和 PostgreSQL 資料類型,請參閱:

MODIFY_TYPE

MODIFY_TYPE 指令可讓您控管資料庫遷移服務將來源資料表中的特定資料欄轉換為哪種資料類型。這項指令需要以半形逗號分隔的對應清單。 整個定義必須在同一行提供,但您在設定檔中包含多個 MODIFY_TYPE 指令。 請使用下列格式:

MODIFY_TYPE SOURCE_TABLE_NAME1:COLUMN_NAME:EXPECTED_END_RESULT_DATA_TYPE
MODIFY_TYPE SOURCE_TABLE_NAME2:COLUMN_NAME:EXPECTED_END_RESULT_DATA_TYPE...

其中:

  • SOURCE_TABLE_NAME 是包含您要變更資料類型之資料欄的資料表名稱。
  • COLUMN_NAME 是要自訂轉換對應的資料欄名稱。
  • EXPECTED_END_RESULT_DATA_TYPE 是您希望轉換後的資料欄使用的 PostgreSQL 資料類型。

範例

MODIFY_TYPE events:dates_and_times:DATETIME,users:pseudonym:TEXT

PG_INTEGER_TYPE

根據預設,資料庫移轉服務會將 NUMBER(p,s) 類型轉換為 PostgreSQL DECIMAL(p,s) 類型。

您可以使用 PG_INTEGER_TYPE 指令修改這項行為。將值設為 1,並強制將所有具有精確度和比例 (NUMBER(p,s)) 的 NUMBER 類型轉換為 PostgreSQL smallintintegerbigint 類型 (視精確度位數而定)。

在轉換對應檔案中加入下列設定:

PG_INTEGER_TYPE 1

PG_NUMERIC_TYPE

如要將所有 NUMBER 轉換為 PostgreSQL realfloat 型別 (視精確位數而定),請將這項指令設為 1NUMBER(p,s)

如果將這項指令設為 0NUMBER(p,s) 值會保留原始值,並使用內部 PostgreSQL 資料類型。

在轉換對應檔案中加入下列設定:

PG_NUMERIC_TYPE 1

DEFAULT_NUMERIC

如果 NUMBER 沒有精確度,預設轉換會變更您是否也使用 PG_INTEGER_TYPE 指令

  • 如果您使用 PG_INTEGER 指令,系統會將沒有精確度的 NUMBERs 轉換為 DECIMAL 值。
  • 如果沒有使用 PG_INTEGER 指令,系統會將沒有精確度的 NUMBER 轉換為 BIGINT 值。

您可以修改這項行為,並使用 DEFAULT_NUMERIC 指令,指定要用於沒有指定精確度點的 NUMBER 類型的資料類型。請使用下列格式:

DEFAULT_NUMERIC POSTGRESQL_NUMERIC_DATA_TYPE

其中 POSTGRESQL_NUMERIC_DATA_TYPE 是下列其中一個值:integersmallintbigint

範例

DEFAULT_NUMERIC integer

REPLACE_COLS

您可以使用 REPLACE_COLS 指令,重新命名轉換後結構定義中的資料欄。這項指令需要以半形逗號分隔的對應清單。 請使用下列格式:

REPLACE_COLS SOURCE_TABLE_NAME1(SOURCE1_TABLE1_COLUMN_NAME1:DESTINATION_TABLE1_COLUMN_NAME1,SOURCE_TABLE1_COLUMN_NAME2:DESTINATION_TABLE1_COLUMN_NAME2),SOURCE_TABLE_NAME2(SOURCE_TABLE2_COLUMN_NAME1:DESTINATION_TABLE2_COLUMN_NAME1,SOURCE_TABLE2_COLUMN_NAME2:DESTINATION_TABLE2_COLUMN_NAME2)...

其中:

  • SOURCE_TABLE_NAME 是包含要變更名稱的資料欄的資料表名稱。
  • SOURCE_COLUMN_NAME 是來源中的資料欄名稱,您要變更該名稱。
  • DESTINATION_COLUMN_NAME 是您要在轉換後的結構定義中使用的資料欄新名稱。

範例

REPLACE_COLS events(dates_and_times:event_dates),users(pseudonym:nickname)

REPLACE_TABLES

您可以使用 REPLACE_TABLES 指令重新命名資料表,或將資料表移至新的結構定義。這項指令會以空格分隔對應清單。如要進一步瞭解各用途的語法,請展開下列各節。

重新命名資料表

如要重新命名轉換後的結構定義中的資料表,請使用下列格式:

REPLACE_TABLES SOURCE_TABLE_NAME1:DESTINATION_TABLE_NAME1 SOURCE_TABLE_NAME2:DESTINATION_TABLE_NAME2

其中:

  • SOURCE_TABLE_NAME 是您要在轉換後的結構定義中重新命名的來源資料表名稱。
  • DESTINATION_TABLE_NAME 是您要在轉換後的結構定義中使用的資料表新名稱。

範例

REPLACE_TABLES "events:login_events" "users:platform_users"

在結構定義之間移動資料表

您可以將結構定義前置字串新增至新資料表名稱,藉此使用這項指令在結構定義之間移動資料表。無論您如何為整個轉換檔案使用 SCHEMA 指令,都可以使用這項機制。例如:

REPLACE_TABLES "events:NEW_SCHEMA_NAME.login_events"
    

自訂資料類型的別名

使用轉換指令修改資料庫遷移服務轉換不同資料類型的方式時 (例如使用 DATA_TYPE MODIFY_TYPE PG_NUMERIC_TYPE 指令),您可以改用別名,不必使用來源 SQL 資料類型。

展開下方章節,查看 Database Migration Service 支援的資料型別別名清單。

資料類型別名

別名 轉換為 PostgreSQL 類型
bigintint8 BIGINT
boolboolean BOOLEAN
bytea BYTEA
charcharacter CHAR
character varyingvarchar VARCHAR
date DATE
decimalnumeric DECIMAL
double precisionfloat8 DOUBLE PRECISION
realfloat4 REAL
intintegerint4 INTEGER
int2 SMALLINT
interval INTERVAL
json JSON
smallint SMALLINT
text TEXT
time TIME
timestamp TIMESTAMP
timestamptz TIMESTAMPTZ
timetz TIMETZ
uuid UUID
XML XML

轉換對應檔案範例

請參閱下列範例轉換對應檔案,其中使用所有支援的結構定義轉換指令:

EXPORT_SCHEMA 1
SCHEMA root

PG_NUMERIC_TYPE 0
PG_INTEGER_TYPE 1
DEFAULT_NUMERIC integer
DATA_TYPE NUMBER(4\,0):integer
MODIFY_TYPE events:dates_and_times:TIMESTAMP
REPLACE_COLS events(dates_and_times:event_dates),users(pseudonym:nickname)
REPLACE_TABLES events:login_events users:platform_users

使用這個檔案的結果如下:

  • EXPORT_SCHEMA 1 是必要指令。
  • SCHEMA root,轉換流程會進行下列調整:
    • 資料庫移轉服務只會轉換 root 架構中的實體。系統不會轉換其他結構定義。
    • 這個檔案中的所有其他自訂指令,只會套用至 root 結構定義中定義的資料欄和資料類型。
  • PG_INTEGER_TYPE 1 會讓資料庫遷移服務將 root 結構定義中表格內的所有 Oracle 數值資料類型,轉換為 PostgreSQL 專屬類型,而非 ANSI 可攜式數值類型。
  • DEFAULT_NUMERIC,導致資料庫移轉服務將沒有指定精確度點的 NUMBER 值轉換為 PostgreSQL INTEGER 型別。這項限制僅適用於 root 架構中資料表內的 NUMBER 值。
  • DATA_TYPE NUMBER(4\,0):integer 導致資料庫移轉服務將特定 NUMBER(4,0) 值轉換為 PostgreSQL INTEGER
  • MODIFY_TYPE 指令會導致資料庫移轉服務將來源資料表 eventsdates_and_times 資料欄的資料轉換為 PostgreSQL DATETIME 型別,無論實際來源資料欄格式為何。
  • REPLACE_COLS events(dates_and_times:event_dates),users(pseudonym:nickname) 讓 Database Migration Service 重新命名轉換後結構定義中的下列資料欄:
    • 來源 events 資料表中的 dates_and_times 欄會重新命名為轉換後結構定義中的 event_dates,並位於同一資料表中。
    • 來源 users 資料表中的 pseudonym 欄會重新命名為轉換後結構定義中的 nickname,並位於同一資料表中。
    重新命名作業只會套用至 root 結構定義中的 eventsusers 資料表。
  • REPLACE_TABLES events:login_events users:platform_users 重新命名轉換後結構定義中的下列資料表:
    • events」資料表已重新命名為「login_events」。
    • users」資料表已重新命名為「platform_users」。
    重新命名作業只會套用至 root 結構定義中的 eventsusers 資料表。

舊版轉換工作區

舊版轉換工作區是較舊且功能較受限的轉換工作區類型。舊版轉換工作區不支援 Gemini 強化轉換功能或互動式 SQL 編輯器。您只能使用這些檔案,透過 Ora2Pg 遷移工具轉換來源結構定義。

我們不建議在遷移作業中使用舊版轉換工作區。如果您的情境需要使用舊版轉換工作區,請參閱「 使用舊版轉換工作區」。

後續步驟

如要瞭解如何使用轉換工作區,請參閱: