將 Oracle 移轉至適用於 PostgreSQL 的 Azure 資料庫

適用於:適用於 PostgreSQL 的 Azure 資料庫 - 單一伺服器

本指南可協助您將 Oracle 架構移轉至適用於 PostgreSQL 的 Azure 資料庫。

如需詳細的完整移轉指引,請參閱移轉指南資源

必要條件

若要將 Oracle 架構移轉至適用於 PostgreSQL 的 Azure 資料庫,您需要:

  • 驗證是否支援您的來源環境。
  • 下載最新版的 ora2pg
  • 擁有最新版的 DBD 模組

概觀

PostgreSQL 是全球最進階的開放原始碼資料庫之一。 本文描述如何使用免費的 ora2pg 工具,將 Oracle 資料庫移轉至 PostgreSQL。 您可以使用 ora2pg 將 Oracle 資料庫或 MySQL 資料庫移轉至與 PostgreSQL 相容的架構。

ora2pg 工具會連接 Oracle 資料庫、自動進行掃描,以及擷取其結構或資料。 然後 ora2pg 會產生 SQL 指令碼,您可以載入至 PostgreSQL 資料庫。 您可以將 ora2pg 用於諸如 Oracle 資料庫的反向工程、移轉大型企業資料庫,或簡單地將某些 Oracle 資料複寫至 PostgreSQL 資料庫等工作。 此工具很容易使用,除了能夠提供連接到 Oracle 資料庫所需的參數之外,不需要任何 Oracle 資料庫知識。

注意

如需使用最新版 ora2pg 的詳細資訊,請參閱 ora2pg 文件。

一般 ora2pg 移轉結構

Screenshot of the ora2pg migration architecture.

佈建 VM 和適用於 PostgreSQL 的 Azure 資料庫之後,您需要兩個設定來啟用它們之間的連線:允許存取 Azure 服務強制執行 SSL 連線

  • [連線安全性] 刀鋒視窗 >[允許存取 Azure 服務]>[開啟]

  • [連線安全性] 刀鋒視窗 >[SSL 設定]>[強制執行 SSL 連線]>[停用]

建議

  • 若要提升 Oracle 伺服器中評量或匯出作業的效能,請收集統計資料:

    BEGIN
    
       DBMS_STATS.GATHER_SCHEMA_STATS
       DBMS_STATS.GATHER_DATABASE_STATS
       DBMS_STATS.GATHER_DICTIONARY_STATS
       END;
    
  • 使用 COPY 命令匯出資料,而不是 INSERT

  • 避免匯出具有其外部索引鍵 (FK)、限制式和索引的資料表。 這些元素會讓資料匯入 PostgreSQL 的流程變慢。

  • 使用 no data 子句建立具體化檢視。 然後於稍後重新整理檢視。

  • 可能的話,請在具體化檢視中使用唯一索引。 當您使用 REFRESH MATERIALIZED VIEW CONCURRENTLY 語法時,這些索引可以加速重新整理。

移轉前

確認來源環境受到支援,且已符合所有必要條件之後,您就可以開始預先移轉階段。 若要開始:

  1. 探索:清查您需要移轉的資料庫。
  2. 評估:評估這些資料庫是否有潛在的移轉問題或阻礙。
  3. 轉換:解決您發現的任何項目。

對於從 Oracle 到適用於 PostgreSQL 的 Azure 資料庫等異質移轉,此階段也涉及讓來源資料庫架構與目標環境相容。

發現卡

探索階段的目標是要識別現有資料來源,以及正在使用功能的詳細資料。 此階段可協助您進一步了解並規劃移轉作業。 該流程涉及掃描網路以識別組織中所有 Oracle 執行個體以及正在使用的版本和功能。

針對 Oracle 資料庫執行的 Microsoft 預先評量程式碼。 預先評量程式碼會查詢 Oracle 中繼資料。 指令碼提供:

  • 資料庫清查,包括依架構、類型和狀態計算的物件計數。
  • 根據統計資料對每個架構中的原始資料進行粗略估計。
  • 每個架構中的資料表大小。
  • 每個套件、函式、程序等的程式碼數目。

github 下載相關的指令碼。

評估

清查 Oracle 資料庫之後,您將了解資料庫大小和潛在挑戰。 下一個步驟是執行評量。

估計從 Oracle 移轉至 PostgreSQL 的成本並不容易。 若要評估移轉成本,ora2pg 會檢查物件的所有資料庫物件、函式與預存程序,以及無法自動轉換的 PL/SQL 程式碼。

ora2pg 工具具有內容分析模式,可檢查 Oracle 資料庫以產生文字報告。 此報告描述 Oracle 資料庫包含的內容,以及無法匯出的內容。

若要啟用分析和報告模式,請使用匯出的類型 SHOW_REPORT,如下列命令所示:

ora2pg -t SHOW_REPORT

ora2pg 工具可以將 SQL 和 PL/SQL 程式碼從 Oracle 語法轉換為 PostgreSQL。 因此,在分析資料庫之後,ora2pg 可以估計程式碼困難度和移轉完整資料庫所需的時間。

若要以人工天數預估移轉成本,ora2pg 可讓您使用稱為 ESTIMATE_COST 的設定指示詞。 您也可以在命令提示字元中啟用此指示詞:

ora2pg -t SHOW_REPORT --estimate_cost

對於 PostgreSQL 專家而言,預設的移轉單位大約代表五分鐘。 如果此移轉是第一次移轉,您可以使用設定指示詞 COST_UNIT_VALUE--cost_unit_value 命令列選項來增加預設移轉單位。

報告的最後一行會以人工天數顯示預估的移轉程式碼總計。 預估會遵循每個物件估計的移轉單位數目。

在下列程式碼範例中,您會看到一些評量變化:

  • 資料表評量
  • 資料行評量
  • 使用 5 分鐘預設成本單位的架構評量
  • 使用 10 分鐘預設成本單位的架構評量
ora2pg -t SHOW_TABLE -c c:\ora2pg\ora2pg_hr.conf > c:\ts303\hr_migration\reports\tables.txt 
ora2pg -t SHOW_COLUMN -c c:\ora2pg\ora2pg_hr.conf > c:\ts303\hr_migration\reports\columns.txt
ora2pg -t SHOW_REPORT -c c:\ora2pg\ora2pg_hr.conf --dump_as_html --estimate_cost > c:\ts303\hr_migration\reports\report.html
ora2pg -t SHOW_REPORT -c c:\ora2pg\ora2pg_hr.conf –-cost_unit_value 10 --dump_as_html --estimate_cost > c:\ts303\hr_migration\reports\report2.html

以下是架構評量移轉層級 B-5 的輸出:

  • 移轉層級:

    • A - 可自動執行的移轉

    • B - 使用程式碼重寫進行移轉,以及最多 5 天的人工天數成本

    • C - 使用程式碼重寫進行移轉,以及超過 5 天的人工天數成本

  • 技術層級:

    • 1 = 一般 (Trivial):沒有預存函式和沒有觸發程序

    • 2 = 容易 (Easy):沒有預存函式,但有觸發程序;沒有手動重寫

    • 3 = 簡單 (Simple):有預存函式和/或觸發程序;沒有手動重寫

    • 4 = 手動 (Manual):沒有預存函式,但有程式碼重寫的觸發程序或檢視

    • 5 = 困難 (Difficult):使用程式碼重寫的預存函式和/或觸發程序

評量包含:

  • 字母 (A 或 B) 以指定移轉是否需要手動重寫。

  • 從 1 到 5 的數字來表示技術困難度。

另一個選項 -human_days_limit 會指定人工天數的限制。 這裡將移轉層級設定為 C,以指出移轉需要大量的工作、完整的專案管理以及移轉支援。 預設值為人工天數 10 天。 您可以使用設定指示詞 HUMAN_DAYS_LIMIT 永久變更此預設值。

開發此架構評量是為了協助使用者決定要先移轉哪個資料庫,以及要動員哪些小組。

轉換

在最短停機時間移轉中,您的移轉來源會變更。 其會在一次性移轉之後,從資料和架構方面偏離目標。 在資料同步階段期間,請確定會近乎即時地擷取來源中的所有變更,並將其套用至目標。 確認所有變更都已套用至目標之後,您就可以從來源完全移轉至目標環境。

在此移轉步驟中,Oracle 程式碼和 DDL 指令碼會轉換或轉譯為 PostgreSQL。 ora2pg 工具會自動以 PostgreSQL 格式匯出 Oracle 物件。 某些產生的物件如果不手動變更,就無法在 PostgreSQL 資料庫中編譯。

若要了解哪些元素需要手動介入,請先針對 PostgreSQL 資料庫編譯由 ora2pg 所產生的檔案。 檢查記錄檔,然後進行任何必要的變更,直到架構結構與 PostgreSQL 語法相容。

建立移轉範本

我們建議使用 ora2pg 提供的移轉範本。 當您使用選項 --project_base--init_project 時,ora2pg 會建立一個專案範本,其中包含工作樹狀結構、設定檔以及用於從 Oracle 資料庫匯出所有物件的指令碼。 如需詳細資訊,請參閱 ora2pg 文件

使用下列命令:

ora2pg --project_base /app/migration/ --init_project test_project

以下是範例輸出:

ora2pg --project_base /app/migration/ --init_project test_project
        Creating project test_project.
        /app/migration/test_project/
                schema/
                        dblinks/
                        directories/
                        functions/
                        grants/
                        mviews/
                        packages/
                        partitions/
                        procedures/
                        sequences/
                        synonyms/
                        tables/
                        tablespaces/
                        triggers/
                        types/
                        views/
                sources/
                        functions/
                        mviews/
                        packages/
                        partitions/
                        procedures/
                        triggers/
                        types/
                        views/
                data/
                config/
                reports/

        Generating generic configuration file
        Creating script export_schema.sh to automate all exports.
        Creating script import_all.sh to automate all imports.

sources/ 目錄包含 Oracle 程式碼。 schema/ 目錄包含移植到 PostgreSQL 的程式碼。 而且 reports/ 目錄包含 HTML 報告和移轉成本評量。

建立專案結構之後,就會建立一般設定檔。 在設定檔中定義 Oracle 資料庫連線和相關的設定參數。 如需設定檔的詳細資訊,請參閱 ora2pg 文件

匯出 Oracle 物件

接下來,透過執行 export_schema.sh 檔案,將 Oracle 物件匯出為 PostgreSQL 物件。

cd /app/migration/mig_project
./export_schema.sh

手動執行下列命令。

SET namespace="/app/migration/mig_project"

ora2pg -p -t DBLINK -o dblink.sql -b %namespace%/schema/dblinks -c %namespace%/config/ora2pg.conf
ora2pg -p -t DIRECTORY -o directory.sql -b %namespace%/schema/directories -c %namespace%/config/ora2pg.conf
ora2pg -p -t FUNCTION -o functions2.sql -b %namespace%/schema/functions -c %namespace%/config/ora2pg.conf 
ora2pg -p -t GRANT -o grants.sql -b %namespace%/schema/grants -c %namespace%/config/ora2pg.conf 
ora2pg -p -t MVIEW -o mview.sql -b %namespace%/schema/mviews -c %namespace%/config/ora2pg.conf
ora2pg -p -t PACKAGE -o packages.sql -b %namespace%/schema/packages -c %namespace%/config/ora2pg.conf
ora2pg -p -t PARTITION -o partitions.sql -b %namespace%/schema/partitions -c %namespace%/config/ora2pg.conf
ora2pg -p -t PROCEDURE -o procs.sql -b %namespace%/schema/procedures -c %namespace%/config/ora2pg.conf
ora2pg -p -t SEQUENCE -o sequences.sql -b %namespace%/schema/sequences -c %namespace%/config/ora2pg.conf
ora2pg -p -t SYNONYM -o synonym.sql -b %namespace%/schema/synonyms -c %namespace%/config/ora2pg.conf
ora2pg -p -t TABLE -o table.sql -b %namespace%/schema/tables -c %namespace%/config/ora2pg.conf 
ora2pg -p -t TABLESPACE -o tablespaces.sql -b %namespace%/schema/tablespaces -c %namespace%/config/ora2pg.conf
ora2pg -p -t TRIGGER -o triggers.sql -b %namespace%/schema/triggers -c %namespace%/config/ora2pg.conf 
ora2pg -p -t TYPE -o types.sql -b %namespace%/schema/types -c %namespace%/config/ora2pg.conf 
ora2pg -p -t VIEW -o views.sql -b %namespace%/schema/views -c %namespace%/config/ora2pg.conf

若要擷取資料,請使用下列命令。

ora2pg -t COPY -o data.sql -b %namespace%/data -c %namespace/config/ora2pg.conf

編譯檔案

最後,針對適用於 PostgreSQL 的 Azure 資料庫伺服器編譯所有檔案。 您可以選擇載入手動產生的 DDL 檔案,或使用第二個指令碼 import_all.sh 以互動方式匯入這些檔案。

psql -f %namespace%\schema\sequences\sequence.sql -h server1-server.postgres.database.azure.com -p 5432 -U username@server1-server -d database -L %namespace%\ schema\sequences\create_sequences.log

psql -f %namespace%\schema\tables\table.sql -h server1-server.postgres.database.azure.com -p 5432 -U username@server1-server -d database -L %namespace%\schema\tables\create_table.log

以下是資料匯入命令:

psql -f %namespace%\data\table1.sql -h server1-server.postgres.database.azure.com -p 5432 -U username@server1-server -d database -l %namespace%\data\table1.log

psql -f %namespace%\data\table2.sql -h server1-server.postgres.database.azure.com -p 5432 -U username@server1-server -d database -l %namespace%\data\table2.log

在編譯檔案時,請檢查記錄並更正 ora2pg 本身無法轉換的任何語法。

如需詳細資訊,請參閱將 Oracle 移轉到適用於 PostgreSQL 的 Azure 資料庫的因應措施

移轉

在具備必要條件且已完成預先移轉步驟之後,您就可以開始結構描述和資料移轉。

移轉架構和資料

完成必要的修正後,即可準備部署穩定的資料庫組建。 執行 psql 匯入命令,指向包含已修改程式碼的檔案。 這項工作會針對 PostgreSQL 資料庫編譯資料庫物件並匯入資料。

在此步驟中,您可以在匯入資料時實作一定程度的平行處理。

同步處理資料並完全移轉

在線上 (最短停機時間) 移轉,移轉來源會持續變更。 其會在一次性移轉之後,從資料和架構方面偏離目標。

資料同步階段期間,請確定會近乎即時地擷取來源中的所有變更,並將其套用至目標。 確認所有變更都已套用之後,您就可以從來源完全移轉至目標環境。

若要進行線上移轉,請使用 AskAzureDBforPostgreSQL@service.microsoft.com 與支援人員連絡。

在使用 ora2pg 的差異/累加移轉中,對於每個資料表,使用依日期、時間或其他參數篩選 (縮減) 的查詢。 然後使用移轉其餘資料的第二個查詢來完成移轉作業。

在來源資料表中,先移轉所有歷程記錄資料。 以下是範例:

select * from table1 where filter_data < 01/01/2019

您可以透過執行如下列命令,來查詢初始移轉以來的變更:

select * from table1 where filter_data >= 01/01/2019

在此情況下,建議您藉由檢查來源和目標雙方的資料同位來增強驗證。

移轉後

「移轉」階段之後,完成移轉後的工作以確保一切都能順暢且有效率地運作。

修復應用程式

將資料移轉至目標環境之後,先前取用來源的所有應用程式都必須開始取用目標。 安裝程式有時需要變更應用程式。

Test

將資料移轉至目標之後,對資料庫執行測試以驗證應用程式與目標搭配運作良好。 藉由針對 Oracle 來源和 PostgreSQL 目標資料庫執行手動資料驗證指令碼,確保來源和目標已正確移轉。

在理想情況下,如果來源和目標資料庫具有網路路徑,則應使用 ora2pg 進行資料驗證。 您可以使用 TEST 動作來確保 Oracle 資料庫中的所有物件都已於 PostgreSQL 中建立。

執行此命令:

ora2pg -t TEST -c config/ora2pg.conf > migration_diff.txt

最佳化

移轉後階段對於協調任何資料精確度問題,以及驗證完整性而言非常重要。 在此階段中,您也會解決工作負載的效能問題。

移轉資產

如需此移轉案例的詳細資訊,請參閱下列資源。 這些資源支援實際移轉專案業務開發。

資源 描述
從 Oracle 移轉至 Azure PostgreSQL 的逐步指南 本文件可協助結構設計師、顧問、資料庫系統管理員以及相關角色,使用 ora2pg 將工作負載從 Oracle 快速移轉至適用於 PostgreSQL 的 Azure 資料庫。
將 Oracle 移轉到適用於 PostgreSQL 的 Azure 資料庫的因應措施 本文件可協助結構設計師、顧問、資料庫系統管理員以及相關角色,將工作負載從 Oracle 移轉至適用於 PostgreSQL 的 Azure 資料庫時快速修正或解決問題。
在 Windows 或 Linux 上安裝 ora2pg 的步驟 本文件提供快速安裝指南,可讓您使用 Windows 或 Linux 上的 ora2pg 將架構和資料從 Oracle 移轉至適用於 PostgreSQL 的 Azure 資料庫。 如需詳細資訊,請參閱 ora2pg 文件

資料 SQL 工程小組開發這些資源。 此小組的核心任務是為資料平台移轉專案的複雜現代化排除障礙,加速遷移至 Microsoft 的 Azure 資料平台。

更多支援

如需 ora2pg 工具範圍以外的移轉協助,請連絡 @Ask 適用於 PostgreSQL 的 Azure DB

下一步

如需用於資料庫和資料移轉以及特殊工作的服務和工具對照表,請參閱資料移轉的服務和工具

文件: