Visual Studio Code PostgreSQL 擴充功能中的 Oracle 到 適用於 PostgreSQL 的 Azure 資料庫 架構轉換功能,能幫助你將現有的 Oracle 資料庫架構物件轉換成相容的 PostgreSQL 架構。 此功能專為關聯式架構設計,並產生 適用於 PostgreSQL 的 Azure 資料庫 靈活伺服器的轉換型結構。
該工具提供基於專案的使用者介面,以自動化結構轉換。 請檢視轉換報告,並使用 Conversion 物件總管 檢查物件定義與轉換備註。 GitHub Copilot 可以協助解釋輸出內容,並編輯需要手動修改的物件。
Architecture
結構轉換過程涉及多個元件協同工作:
- 來源 Oracle 資料庫:你現有的 Oracle 資料庫,包含要轉換的結構。
- Visual Studio Code PostgreSQL 擴充功能:管理轉換流程的主要介面。
- 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器:用來裝載供驗證與測試使用的暫存結構描述。
- Microsoft Foundry:提供驅動 AI 驅動結構轉換的語言模型。
- 架構轉換代理:由 AI 驅動的代理,負責自動化轉換過程。
運作原理
結構轉換過程採用智慧且多階段的方法,結合自動化轉換與人工監督:
- 連線與探索:工具會連線至您的 Oracle Database,並盤點所選結構描述中的物件。 在繼續之前,請檢視計畫中的提取範圍、排除事項、權限及相依關係。
- AI 驅動的轉換:模式轉換代理程式利用 Microsoft Foundry 中託管的語言模型,將 Oracle 專屬的結構轉換為相容於 PostgreSQL 的等價物。 AI 會考量上下文、關係以及平台最佳實務。
- Scratch-database 驗證:該工具嘗試在所選暫存資料庫中編譯產生的定義,並利用現有的靜態檢查來識別轉換問題。 這些檢查無法確立應用程式具有對等的行為。
- 物件審查:HTML 報告與 Conversion 物件總管 顯示轉換結果、可用定義及轉換說明。 檢視 已轉換 與 未轉換 的物件。
- 引導修正:使用 Ask 來理解物件的轉換,或使用 Fix 進行 Copilot 輔助編輯。 在部署已轉換結構描述的資料庫中,手動整理已編輯的定義。
-
部署準備:工具會產生 PostgreSQL
.sql檔案及設定說明。 請檢視輸出並分別執行設定腳本;產生這些檔案並不會將它們部署到目的地。
安裝擴充套件
Oracle 到 PostgreSQL 的結構描述轉換功能內建於適用於 Visual Studio Code 的 PostgreSQL 擴充功能 中。 你不需要另外安裝擴充功能。
安裝步驟
-
Open Extensions Marketplace:在Visual Studio Code中,選擇左側活動列中的擴充功能圖示,或使用鍵盤捷徑
Ctrl+Shift+X(Windows/Linux)或Cmd+Shift+X(macOS)。 -
搜尋擴充功能:在 Extensions Marketplace 搜尋框中輸入
PostgreSQL(或輸入擴充功能 IDms-ossdata.vscode-pgsql)即可找到該擴充功能。 安裝擴充功能 :在搜尋結果中,找到由Microsoft 發佈的PostgreSQL ,然後選擇 Install 。 市集上有多種 PostgreSQL 擴充功能,安裝前請確認出版商是否為 Microsoft。- Access Schema Conversion:擴充套件安裝後,Visual Studio Code活動列會出現大象圖示。 選擇圖示以開啟 PostgreSQL 擴充功能並存取結構轉換功能。
架構轉換工作流程
工作流程從探索開始,接著是擷取與轉換。 該工具會驗證在暫存資料庫中產生的 PostgreSQL 定義,並在準備部署檔案前,先在 Conversion 物件總管 中檢視結果。
發現
探索是在 Oracle 連線和結構描述選擇後進行,然後才是 PostgreSQL 的暫存資料庫組態。 它會檢查來源權限並盤點結構描述物件,但不會擷取 DDL。 這些數量描述的是來源庫存和計畫中的擷取,而非轉換結果。
| Result | 它告訴你的 |
|---|---|
| 已探索 | 在探索期間發現的物件。 |
| 待擷取 | 計劃進行 DDL 提取的物件。 |
| 已排除 | 未納入原計劃提取範圍的物件。 |
| 無效物件 | 由探索程序標記為無效的物件。 |
在確認範圍前,先檢視物件型別的支援與排除事項,以及結構相依關係。 相依結構描述 列出了你未選取但被參考的結構描述。 這個清單裡出現 schema 並不代表它包含在轉換範圍裡。
如需詳細步驟,請參閱教學課程中的檢閱探索結果。
開採
擷取會讀取 Oracle DDL 及已檢閱來源範圍的中繼資料。 擷取後的定義提供轉換輸入;成功提取並不代表物件已經轉換。
Conversion
結構轉換代理程式利用 Microsoft Foundry 中的模型,將擷取的 Oracle 定義轉換成 PostgreSQL DDL,並嘗試在 scratch 資料庫中編譯。 在 Conversion 物件總管 中檢視已轉換與未轉換的物件,並在部署前獨立驗證行為。
Scratch 資料庫
在 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器上選擇一個空的資料庫或專用且未使用的資料庫來進行轉換驗證。 該工具使用與您所選 Oracle 結構描述對應的結構描述;它不會使用獨立的暫存名稱前置詞來隔離結構描述中的現有物件。
Warning
工具會刪除與 DROP SCHEMA ... CASCADE 相符的結構描述,然後重新建立它們。 此動作會刪除其現有物件與資料,並可移除其他結構描述中的相依物件。 不要選擇包含任何你需要保留內容的資料庫。
連線使用者需要權限才能連線、建立結構描述與驗證物件,並刪除相符的結構描述。 單靠資料庫層級 CREATE 並不會授與捨棄其他角色擁有的結構描述的權限。 請參閱 必要的 PostgreSQL 權限。
編譯與靜態檢查可在此環境中識別語法、依賴性及型別錯誤。 他們不會測試生產資料、應用程式行為或每一條執行時路徑。
轉換物件總管
使用 Conversion 物件總管 檢查來源到目標的映射、比較 Oracle 與 PostgreSQL 定義,並閱讀轉換備註。 選取 [詢問] 以取得物件轉換及相依性的說明,或選取 [修正],由 Copilot 輔助變更其 PostgreSQL 檔案。 在已部署轉換後結構描述的目標資料庫中,手動編譯已編輯的定義。
詳細步驟請參閱 在 Conversion 物件總管 中檢閱轉換後的物件。
GitHub Copilot 代理模式
GitHub Copilot Agent 模式是整合的 Visual Studio Code 功能,提供引導提示,幫助你精煉轉換後的物件,並將轉換後的結構與應用程式需求對齊。 代理模式提供:
- 針對結構修改的情境感知建議。
- 關於 適用於 PostgreSQL 的 Azure 資料庫 靈活伺服器的最佳實務建議。
- 複雜轉換的程式碼完成。
- 與現有開發工作流程整合。
Oracle 連接模式
結構轉換工具支援兩種連接模式來連接原始 Oracle 資料庫: 薄 型與 厚型。 了解兩者差異有助於你選擇適合環境的模式。
瘦客戶端模式(預設)
瘦模式可直接連接 Oracle 資料庫,無需額外的 Oracle 用戶端函式庫。 此模式為預設,無需額外設定。
- 不需要安裝 Oracle 即時客戶端。
- 支援 Oracle 資料庫 12.1 及更新版本。
- 適用於大多數結構描述轉換情況。
- 透過標準 TCP/IP 網路連線。
完整用戶端模式
厚模式使用 Oracle 即時客戶端函式庫連接 Oracle 資料庫。 架構轉換工具會根據你的 Oracle 網路設定偵測何時需要厚模式,並自動切換到該模式。
當需要厚用戶端模式時
你可以透過檢查來源環境中的 Oracle 網路設定檔來判斷是否需要厚用戶端模式。 請在檔案中尋找以下參數 sqlnet.ora (通常位於 $ORACLE_HOME/network/admin/此處):
| 參數 | 表示需要厚模式 |
|---|---|
SQLNET.CRYPTO_CHECKSUM_CLIENT |
設定為 REQUIRED 或 REQUESTED 以原生網路加密 |
SQLNET.ENCRYPTION_CLIENT |
設定為 REQUIRED 或 REQUESTED 以原生網路加密 |
如果您的來源 Oracle 環境中已設定這些參數中的任何一個,則需要使用厚式用戶端模式。 結構轉換工具會偵測到此配置並自動切換到厚模式。 在開始轉換前,請確定 Oracle 即時客戶端已安裝在執行 Visual Studio Code 的機器上。
安裝 Oracle Instant Client
要使用厚用戶端模式,請在執行 Visual Studio Code 和結構轉換工具的機器上安裝 Oracle 即時客戶端。 有關支援的作業系統,請參閱 教學中的作業系統需求。
- 請從 Oracle 即時客戶端下載,為您的作業系統下載 Oracle 即時客戶端 Basic 或 Basic Light 套件。 選擇與你的作業系統及轉換環境架構相容的套件。
- 請依照平台特定下載頁面的安裝說明安裝套件、所需相依性及函式庫搜尋路徑設定。
- 重新啟動 Visual Studio Code 以取得更新的環境變數。
Microsoft Foundry 的認證
結構轉換工具支援兩種認證方法,用於連接 Microsoft Foundry 中的語言模型:
API 金鑰認證
API 金鑰認證使用部署專用金鑰來授權請求。 此方法簡單且適合開發與測試情境。
Microsoft Entra ID 認證
Microsoft Entra ID 認證提供基於憑證、身份驅動的 Microsoft Foundry 存取,無需管理 API 金鑰。 此方法建議用於生產環境及擁有集中式身份管理的組織。
要使用 Microsoft Entra ID 認證:
- 指派所需角色:確保已登入的使用者或服務主體在承載模型部署的 Microsoft Foundry 資源中擁有 Foundry 使用者角色(前稱 Azure AI User)。 請在 Azure 入口網站中的 存取控制(IAM)下指派角色。 欲了解更多資訊,請參閱 Microsoft Foundry 的 基於角色的存取控制。
-
在 Visual Studio Code 中登入 Azure: 使用命令選擇區()中的
Ctrl+Shift+P命令,使用您的 Microsoft Entra ID 帳戶進行驗證。 - 選擇Entra ID認證:在遷移精靈語言模型設定步驟中,選擇Microsoft Entra ID作為認證方式,而非API 金鑰。
- 提供端點:輸入您的 Microsoft Foundry 端點網址。 該工具會自動從你登入的會話中取得驗證令牌。
Microsoft Entra ID認證需要在 Visual Studio Code 中啟用 Azure Account 擴充功能。 擴充功能必須使用具有 Microsoft Foundry 資源適當角色指派的身分登入。
安全性和網路服務
使用架構轉換功能時,請確保你的 Visual Studio Code 環境能安全連接你的原始 Oracle 資料庫,以及你用作 scratch 資料庫的 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器實例。
Microsoft 建議透過私有端點連接您的 Microsoft Foundry 資源。 欲了解更多資訊,請參閱 Configure a Private Link for Microsoft Foundry。
如需了解更多有關保護 Microsoft Foundry 連線的資訊,請參閱 Microsoft Foundry 中 Azure 直接模型的資料、隱私權與安全性。
Important
客戶驗證責任:用於結構轉換的同一個 AI 引擎也能協助驗證與審查。 AI 系統偶爾會確認自己的錯誤。 為防止資料遺失、功能退化或安全問題,應在部署至生產環境前獨立驗證產生的物件與手動修正。 作為控制措施的一部分,建議啟用 Foundry 內容過濾功能,以減少有害或不受歡迎的輸出。 如需指引,請參閱 Foundry 中的內容過濾。
為什麼要使用結構轉換功能?
結構轉換透過產生 PostgreSQL 定義、在暫存資料庫中檢查,並提供物件層級的結果與 AI 輔助審查,減少人工工作量。 你仍然需要在部署前驗證產生的結構是否符合你應用程式的需求。
- 自動轉換:透過自動轉換相容的結構物件,減少手動作業。
- AI 驅動的轉換:利用 Microsoft Foundry 所託管的語言模型,進行情境感知轉換決策。
- 暫存資料庫檢查:利用編譯與可用的靜態檢查來識別轉換問題。
- 整合工作流程:在Visual Studio Code開發環境中工作。
- 靈活的 Oracle 連線:支援輕型與厚型用戶端模式,連接 Oracle 資料庫。
- 多重認證選項:支援 Microsoft Foundry 的 API 金鑰與Microsoft Entra ID認證。
- 審查與精煉:結合轉換筆記、來源與目標比較及 Copilot 輔助編輯。
- Azure 最佳化:專為 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器設計。
支援的結構物件
該轉換工具支援廣泛的 Oracle 架構與程式碼物件,包括資料定義元素、架構層級元件及程序程式碼。 雖然你可以自動轉換許多常見物件,但可能需要手動檢視或自訂某些 Oracle 專有功能或專有擴充功能的映射。 有關支援物件的詳細清單及已知限制,請參閱本文各章節。
轉換的產生方式
Microsoft Foundry 模型將擷取的 Oracle DDL 轉換成 PostgreSQL 定義。 該工具利用暫存資料庫編譯及可用的靜態檢查來識別問題並指導修正。
對於 PL/pgSQL 例程,plpgsql_check 提供對例程主體進行的額外靜態檢查。 這些檢查能發現單靠常式建立流程無法察覺的問題。 欲了解更多資訊,請參閱 「用 plpgsql_check 驗證轉換後的 PL/pgSQL」。
轉換狀態並不保證編譯成功、完整實作或等效執行時行為。 檢視 HTML 報告及 Conversion 物件總管 中的物件定義與轉換說明,包括任何需要手動處理的佔位符或相依關係。 如需瞭解 Oracle 特有的差距,請參見 Schema 轉換限制。
資料庫結構物件
轉換工具支援以下 Oracle 資料庫物件:
- 資料表:資料表定義、欄位規範及資料表層級限制。
- 限制條件:主鍵、外鍵、唯一限制條件與檢查約束。
- 索引:B 樹索引、唯一索引及綜合索引。
- 序列:用於自動遞增值的 Oracle 序列物件。
- 觸發器:列層級與語句層級觸發器。
- 檢視:標準資料庫檢視。
- 實體化檢視:Oracle 的物質化檢視與刷新邏輯。
- 結構:結構層級的物件與組織。
- 同義詞:公開與私人同義詞(有限制)。
Oracle 程式碼物件
轉換工具支援以下 Oracle 程式碼結構:
- 觸發器:複雜的觸發邏輯與事件處理。
- 套件:Oracle 套件規範與主體。
- 函式:具有複雜邏輯的使用者自訂函式。
- 儲存程序:Oracle 儲存程序與參數處理。
-
類型與集合:Oracle 物件類型、
TYPE BODY成員方法、VARRAY巢狀資料表與SUBTYPE宣告。
套件轉換
Oracle 套件沒有直接的 PostgreSQL 對應套件。 產生的映射會依據來源定義而定,且您必須審查套件成員及其呼叫者:
- 常數:生成的 getter 函數需要正確的值、型別和易變性。
-
集合與游標:對應可以使用陣列、網域、
jsonb或refcursor。 檢查邊界、索引和呼叫端預期。 - 套件狀態:產生的輔助工具與會話設定需要在呼叫、交易及會話間驗證初始化與狀態。
-
例外:檢視 Oracle 例外與錯誤代碼對應至 PostgreSQL
SQLSTATE值及例外處理程序的映射。 - 僅限規格的套件:輸出可包含會引發錯誤而非實作缺少的主體的預留位置常式。
階層式查詢
Oracle 階層式查詢可用 PostgreSQL WITH RECURSIVE 通用資料表運算式來表示。 檢視根、父子連接、深度、路徑、兄弟姊妹排序及循環的生成處理方式。 遞迴查詢即使能編譯,也不能表示其結果與原始 Oracle 查詢相符。
交易控制
使用 PRAGMA AUTONOMOUS_TRANSACTION 的例程轉換可能依賴於透過 dblink的獨立連線。 檢視產生的函式或程序、所需的擴充功能,以及呼叫者中需要的任何變更。 測試交易邊界、連線與會話上下文、提交、回滾及錯誤處理。 請勿假設編譯會保留原始的交易行為或呼叫慣例。
用 plpgsql_check 驗證轉換後的 PL/pgSQL
建立 PL/pgSQL 例程並不會驗證它能執行的每一個語句。 有些無效的引用或型別不符,僅在相關執行路徑執行時才會出現。 擴充 plpgsql_check 功能可透過靜態分析常式主體偵測額外問題。
除編譯外,還應使用這些檢查,但不能作為業務邏輯等效或已可投入生產的證明。 檢視產生的定義,並獨立完成功能與資料驗證。
檢查的執行位置
檢查會在你選擇用於轉換的暫存資料庫上執行。 它檢視的是該環境中轉換後的例程,而非生產資料或應用程式流量。
plpgsql_check 是驗證輔助工具;另外準備轉換後程式碼所需的執行時擴充。
當擴充功能無法使用時會發生什麼事
沒有 plpgsql_check,就無法進行額外的主體檢查。 成功編譯或顯示為 已轉換 狀態,並不代表這些檢查已經執行。 在轉換前確認擴充功能是否可用,並且即使安裝了擴充功能,也要獨立檢視和測試程序。
讓檢查可用
檢查 你的 PostgreSQL 版本的擴充功能清單,將 plpgsql_check 加入伺服器的允許清單,並設定其所需的預載函式庫。 變更 shared_preload_libraries 後,請重新啟動伺服器,然後確認擴充功能已安裝在選取的暫存資料庫中。 完整流程請參閱 「允許並安裝所需擴充功能」。
支援的 Oracle 版本
本節總結支援自動結構轉換的資料庫引擎版本,並強調相容性考量。 使用上述支援的 Oracle 與 PostgreSQL 版本以獲得最佳效果。 在非生產測試環境中驗證轉換,並使用每個支援主要版本的最新次要補丁。 如果你的環境使用不支援的版本或包含 Oracle 專有功能,部署前可能需要額外手動映射或審查。
以下 Oracle 資料庫版本支援結構轉換:
- Oracle 21c
- Oracle 19c
- Oracle 18c
- Oracle 12.2
- Oracle 12.1
意見反應與支援
對於與結構轉換功能或 PostgreSQL 擴充相關的錯誤、功能請求及問題,請使用 Visual Studio Code 內建的回饋工具。 你可以有兩種方式使用這個工具:
說明選單
前往 協助>回報問題。
命令面板
- 使用
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS)開啟指令面板。 - 執行指令: PGSQL: Report Issue。
當你創建期刊或提供回饋時,請在標題中加入 Schema Conversion: 「前綴」。 此前綴可協助開發團隊快速辨識並優先處理與結構描述轉換相關的回饋。 此回饋機制協助開發團隊持續改進結構轉換功能,並解決您在 Oracle 遷移至 適用於 PostgreSQL 的 Azure 資料庫 遷移專案中遇到的任何問題。