轉換工作區可協助您將來源資料庫中的結構定義和物件,轉換為與目的地資料庫相容的 SQL 語法。本頁面提供資料庫移轉服務轉換工作區的總覽:
轉換總覽會顯示結構定義轉換進度的橫切面。
確定性程式碼和結構定義轉換支援的物件 列出確定性結構定義轉換支援的 Oracle 物件。
互動式 SQL 編輯器說明您可以在轉換工作區編輯器中直接修改哪些物件。
Gemini 輔助轉換功能:瞭解如何整合生成式 AI 支援,加快結構定義轉換程序。
舊版轉換工作區:說明不支援互動式 SQL 編輯器的舊版工作區。
Oracle 遷移作業不支援特定資料類型。 詳情請參閱「 資料類型已知限制」。
轉換進度總覽
轉換工作區提供健全的總覽資訊,可協助您深入瞭解待處理或已解決的轉換問題總數、Gemini 輔助的擴增功能,以及轉換程序的整體運作情況。


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


如要進一步瞭解如何使用轉換總覽檢查轉換結果,請參閱「 使用轉換工作區」。
確定性程式碼和結構定義轉換
建立轉換工作區時,資料庫移轉服務會立即使用一組確定性轉換規則執行初始結構定義轉換,將特定 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_TYPE 和 PGSQL_DATA_TYPE 是您在遷移作業中使用的 Oracle 和 PostgreSQL 版本支援的資料類型。如需支援版本資訊,請參閱 情境總覽。
範例:
DATA_TYPE REAL:double precision,SMALLINT:integer
如要進一步瞭解 Oracle 和 PostgreSQL 資料類型,請參閱:
- Oracle 說明文件中的 Oracle 資料類型。
- PostgreSQL 說明文件中的 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 smallint
、integer
或 bigint
類型 (視精確度位數而定)。
在轉換對應檔案中加入下列設定:
PG_INTEGER_TYPE 1
PG_NUMERIC_TYPE
如要將所有 NUMBER
轉換為 PostgreSQL real
或 float
型別 (視精確位數而定),請將這項指令設為 1
。NUMBER(p,s)
如果將這項指令設為 0
,NUMBER(p,s)
值會保留原始值,並使用內部 PostgreSQL 資料類型。
在轉換對應檔案中加入下列設定:
PG_NUMERIC_TYPE 1
DEFAULT_NUMERIC
如果 NUMBER
沒有精確度,預設轉換會變更您是否也使用
PG_INTEGER_TYPE
指令:
- 如果您使用
PG_INTEGER
指令,系統會將沒有精確度的NUMBER
s 轉換為DECIMAL
值。 - 如果沒有使用
PG_INTEGER
指令,系統會將沒有精確度的NUMBER
轉換為BIGINT
值。
您可以修改這項行為,並使用 DEFAULT_NUMERIC
指令,指定要用於沒有指定精確度點的 NUMBER
類型的資料類型。請使用下列格式:
DEFAULT_NUMERIC POSTGRESQL_NUMERIC_DATA_TYPE
其中 POSTGRESQL_NUMERIC_DATA_TYPE 是下列其中一個值:integer
、smallint
、bigint
。
範例:
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 類型 |
---|---|
bigint 、int8 |
BIGINT |
bool 、boolean |
BOOLEAN |
bytea |
BYTEA |
char 、character |
CHAR |
character varying 、varchar |
VARCHAR |
date |
DATE |
decimal 、numeric |
DECIMAL |
double precision 、float8 |
DOUBLE PRECISION |
real 、float4 |
REAL |
int 、integer 、int4 |
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
值轉換為 PostgreSQLINTEGER
型別。這項限制僅適用於root
架構中資料表內的NUMBER
值。DATA_TYPE NUMBER(4\,0):integer
導致資料庫移轉服務將特定NUMBER(4,0)
值轉換為 PostgreSQLINTEGER
。MODIFY_TYPE
指令會導致資料庫移轉服務將來源資料表events
中dates_and_times
資料欄的資料轉換為 PostgreSQLDATETIME
型別,無論實際來源資料欄格式為何。REPLACE_COLS events(dates_and_times:event_dates),users(pseudonym:nickname)
讓 Database Migration Service 重新命名轉換後結構定義中的下列資料欄:- 來源
events
資料表中的dates_and_times
欄會重新命名為轉換後結構定義中的event_dates
,並位於同一資料表中。 - 來源
users
資料表中的pseudonym
欄會重新命名為轉換後結構定義中的nickname
,並位於同一資料表中。
root
結構定義中的events
和users
資料表。- 來源
REPLACE_TABLES events:login_events users:platform_users
重新命名轉換後結構定義中的下列資料表:- 「
events
」資料表已重新命名為「login_events
」。 - 「
users
」資料表已重新命名為「platform_users
」。
root
結構定義中的events
和users
資料表。- 「
舊版轉換工作區
舊版轉換工作區是較舊且功能較受限的轉換工作區類型。舊版轉換工作區不支援 Gemini 強化轉換功能或互動式 SQL 編輯器。您只能使用這些檔案,透過 Ora2Pg 遷移工具轉換來源結構定義。
我們不建議在遷移作業中使用舊版轉換工作區。如果您的情境需要使用舊版轉換工作區,請參閱「 使用舊版轉換工作區」。
後續步驟
如要瞭解如何使用轉換工作區,請參閱: