Oracle 移轉的設計和效能

本文是系列文章的第一部分 (共七部分),將提供從 Oracle 遷移到 Azure Synapse Analytics 的指引。 本文著重於設計和效能的最佳做法。

概觀

由於維護和升級舊版內部部署 Oracle 環境的成本和複雜度,許多現有的 Oracle 使用者都會想要利用新式雲端環境所提供的創新做法。 基礎結構即服務 (IaaS) 和平台即服務 (PaaS) 雲端環境可讓您將基礎結構維護和平台開發等工作委派給雲端提供者。

提示

不只是資料庫,Azure 環境還包含一組完整的功能和工具。

儘管 Oracle 和 Azure Synapse Analytics 都是使用大規模平行處理 (MPP) 技術在超大資料量上實現高查詢效能的 SQL 資料庫,但方法方面有一些基本差異:

  • 舊版 Oracle 系統通常會安裝在內部部署並使用成本相對高的硬體,而 Azure Synapse Analytics 是以雲端為基礎,並使用 Azure 儲存體和計算資源。

  • 升級 Oracle 設定為主要工作,其涉及額外實體硬體,且可能需要很長時間的資料庫重新設定或損毀傾印和重新載入。 由於儲存體和計算資源在 Azure 環境中是分開的,而且具有彈性的調整功能,因此這些資源可以獨立擴大或縮小。

  • 您可以根據需要暫停 Azure Synapse Analytics 或調整其大小,以降低資源使用率和成本。

Microsoft Azure 是全球可用、高度安全且可調整的雲端環境,包含 Azure Synapse 以及支援工具和功能的生態系統。 下圖摘要說明 Azure Synapse 生態系統。

圖表顯示支援工具和功能的 Azure Synapse Analytics 生態系統。

Azure Synapse 會使用 MPP 和自動記憶體內部快取等技術,提供最佳的關聯式資料庫效能。 您可以在獨立的基準測試中看到這些技術的結果,例如 GigaOm 最近一次執行的基準測試,其將 Azure Synapse Analytics 與其他熱門的雲端資料倉儲供應項目進行比較。 移轉至 Azure Synapse Analytics 環境的客戶會看到許多優點,包括:

  • 改善的效能與性價比。

  • 增加靈活度和較短的價值時間。

  • 較快的伺服器部署和應用程式開發。

  • 彈性可擴縮性—僅需支付實際使用量的費用。

  • 改善的安全性/合規性。

  • 降低儲存和災害復原的成本。

  • 降低整體 TCO、更好的成本控制,以及簡化的營運支出 (OPEX)。

若要充散發揮這些優點,請將新的和現有的資料與應用程式遷移至 Azure Synapse Analytics 平台中。 在許多組織中,移轉包括將現有的資料倉儲從舊版內部部署平台 (例如 Oracle) 移至 Azure Synapse。 概括而言,移轉程序包含下列步驟:

    準備 🡆

  • 定義範圍:要移轉的內容。

  • 建置要移轉的資料和程序詳細目錄。

  • 定義資料模型變更 (若有的話)。

  • 定義來源資料擷取機制。

  • 識別要使用的適當 Azure 和第三方工具與功能。

  • 盡早在新平台上培訓員工。

  • 設定 Azure 目標平台。

    移轉 🡆

  • 從小規模且簡單的內容著手。

  • 盡可能自動化。

  • 使用 Azure 內建工具和功能來減少移轉工作。

  • 遷移資料表和檢視的中繼資料。

  • 移轉要維護的歷史資料。

  • 遷移或重構預存程序和業務流程。

  • 遷移或重構 ETL/ELT 增量負載流程。

    移轉後工作

  • 監視並記錄程序的所有階段。

  • 使用獲得的經驗為將來的移轉建置範本。

  • 視需要重新設計資料模型 (使用新的平台效能和可擴縮性)。

  • 測試應用程式和查詢工具。

  • 基準和最佳化查詢效能。

本文提供將資料倉儲從現有 Oracle 環境遷移至 Azure Synapse 時的一般資訊和指引。 效能最佳化的目標是在移轉之後,於 Azure Synapse 中達到相同或更好的資料倉儲效能。

設計考量

移轉範圍

當您準備從 Oracle 環境遷移時,請考慮下列移轉選擇。

選擇初次移轉的工作負載

一般而言,舊版 Oracle 環境會隨著時間的推移而演變,以涵蓋多個主題區域和混合的工作負載。 當您決定要從何處開始移轉專案時,請選擇能夠達到下列條件的區域:

  • 透過快速提供新環境的優勢,證明遷移至 Azure Synapse 的可行性。

  • 可讓內部技術人員透過遷移其他區域時所使用的程序和工具,獲得相關體驗。

  • 建立範本,以利未來執行專屬於來源 Oracle 環境,以及目前已就緒工具和程序的移轉。

從 Oracle 環境進行初始移轉的良好候選區域應支援上述項目,以及:

  • 實作 BI/分析工作負載,而不是線上交易處理 (OLTP) 工作負載。

  • 具有資料模型,例如可以透過最少修改進行移轉的星型或雪花式結構描述。

提示

建立需要移轉的物件詳細目錄,並記錄移轉程序。

初始移轉中移轉的資料量應該夠大,才能示範 Azure Synapse Analytics 環境的功能和優點,但也不能太大而無法快速展現價值。 1-10 TB 範圍內的大小是典型大小。

移轉專案的初始方法將風險、工作量和所需時間降到最低,以便快速了解 Azure 雲端環境的優點。 下列方法會將初始移轉的範圍限制為只有資料超市,而不處理更廣泛的移轉層面,例如 ETL 移轉和歷史資料移轉。 不過,一旦移轉的資料超市層回填資料和必要的建置程序之後,您就可以在專案的稍後階段中處理那些層面。

隨即轉移移轉與階段式方法

一般而言,不論計劃的移轉目的和範圍為何,移轉都有兩種類型:隨即轉移及包含變更的階段式方法。

隨即轉移

在隨即轉移中,現有的資料模型 (例如星型結構描述) 會依原樣移轉至新的 Azure Synapse Analytics 平台。 此方法只需少量工作就能實現移至 Azure 雲端環境的優點,進而將風險和移轉時間降到最低。 隨即轉移移轉適合下列案例:

  • 您的現有 Oracle 環境只有單一資料超市要遷移,或
  • 您現有 Oracle 環境中的資料已經是設計良好的星形或雪花式結構描述,或
  • 您有移至新式雲端環境的時間和成本壓力。

提示

隨即轉移是不錯的起點,即使後續階段會實作資料模型的變更也一樣。

納入變更的階段式方法

如果舊版資料倉儲已發展很長一段時間,您可能需要重新設計以維持所需的效能等級。 您可能也必須重新設計來支援新的資料,例如物聯網 (IoT) 資料流。 在重新設計的程序中,遷移至 Azure Synapse 可受益於可調整的雲端環境。 移轉可能包括基礎資料模型中的變更,例如從 Inmon 模型移至資料保存庫。

Microsoft 建議將現有的資料模型依原樣移至 Azure,並使用 Azure 環境的效能和彈性來套用重新設計的變更。 如此一來,您就可以使用 Azure 的功能進行變更,而不會影響現有的來源系統。

使用 Microsoft 設施來實作中繼資料驅動的移轉

您可以透過使用 Azure 環境的功能來自動化和協調移轉程序。 此方法會盡可能減少對現有 Oracle 環境的效能影響,該環境可能已接近執行容量的上限。

適用於 Oracle 的 SQL Server 移轉小幫手 (SSMA) 可以自動化移轉程序的許多部分,在某些情況下會包含函式和程序性程式碼。 SSMA 可支援 Azure Synapse 作為目標環境。

顯示適用於 Oracle 的 SQL Server 移轉小幫手可以自動化移轉程序中許多部分的螢幕擷取畫面。

適用于 Oracle 的 SSMA 可協助您將 Oracle 資料倉儲或資料超市移轉至 Azure Synapse。 SSMA 的設計目的是要將從現有 Oracle 環境中資料表、檢視表和資料的轉移流程自動化。

Azure Data Factory 是一項雲端式資料整合服務,可支援在雲端建立資料驅動工作流程,以便協調及自動進行資料移動和資料轉換。 您可以使用 Data Factory 建立並排定資料驅動的工作流程 (管線),以從不同的資料存放區內嵌資料。 透過使用計算服務 (例如,Azure HDInsight Hadoop、Spark、Azure Data Lake Analytics 和 Azure Machine Learning),Data Factory 可以處理或轉換資料。

Data Factory 可用來將來源的資料遷移至 Azure SQL 目標。 這種離線資料移動作業有助於大幅縮短移轉的停機時間。

Azure 資料庫移轉服務可協助您規劃和執行 Oracle 等環境的移轉。

當您打算使用 Azure 設施來管理移轉程序時,請建立中繼資料,列出要遷移的所有資料表及其位置。

Oracle 和 Azure Synapse 之間的設計差異

如先前所述,Oracle 與 Azure Synapse Analytics 資料庫之間有一些基本差異。 SSMA for Oracle 不僅有助於縮短這些差距,也會自動化移轉。 雖然對於非常大量的資料而言,SSMA 不是最有效率的方法,但在處理較小的資料表時很實用。

多個資料庫與單一資料庫和結構描述

Oracle 環境通常包含多個不同的資料庫。 例如,可能有不同的資料庫用於:資料擷取和暫存表格表、核心倉儲資料表和資料超市—有時稱為語意層。 ETL 或 ELT 管線中的處理可以實作跨資料庫聯結,並在不同的資料庫之間移動資料。

相反地,Azure Synapse 環境包含單一資料庫,並使用結構描述將資料表分成邏輯上的個別群組。 我們建議您使用目標 Azure Synapse Analytics 資料庫內的一系列結構描述,以模擬從 Oracle 環境遷移的個別資料庫。 如果 Oracle 環境已使用結構描述,當您將現有 Oracle 資料表和檢視移至新的環境時,您可能需要使用新的命名慣例。 例如,您可以將現有的 Oracle 結構描述和資料表名稱串連到新的 Azure Synapse 資料表名稱中,然後在新環境中使用結構描述名稱來維護原始的單獨資料庫名稱。 雖然您可以使用基礎資料表上的 SQL 檢視來維護邏輯結構,但該方法有一些潛在的缺點:

  • Azure Synapse Analytics 中的檢視僅供唯讀,因此必須在基礎基底資料表上更新任何資料。

  • 已經存在一個或多個檢視層,而新增額外的檢視層可能會影響效能。

提示

將多個資料庫結合成 Azure Synapse Analytics 中的單一資料庫,並使用結構描述名稱以邏輯方式分隔資料表。

資料表考量

當您在不同環境之間移轉資料表時,通常只有原始資料和描述其實際移轉的中繼資料。 來源系統的其他資料庫元素 (例如索引) 通常不會移轉,因為它們在新的環境中可能不必要,或會以不同的方式實作。

來源環境中的效能最佳化 (例如索引) 會指出您可以在新環境中新增效能最佳化的位置。 例如,如果來源 Oracle 環境中的查詢經常使用位元對應索引,則建議在 Azure Synapse 內建立非叢集索引。 其他原生效能最佳化技術 (如資料表複寫),可能比直接建立「類似」索引更為適用。 SSMA for Oracle 可用來提供資料表散發和編製索引的移轉建議。

提示

現有的索引會指出已移轉倉儲中用於編製索引的候選項目。

不支援的 Oracle 資料庫物件類型

Oracle 特定功能通常可以由 Azure Synapse Analytics 功能取代。 但是,有些 Oracle Database 物件未在 Azure Synapse 受到直接支援。 下列不支援的 Oracle 資料庫物件清單說明如何在 Azure Synapse 中達成對等的功能。

  • 各種索引選項:在 Oracle 中,有數個索引選項 (例如位元對應索引、函式型索引和網域索引) 在 Azure Synapse 中沒有直接的對等項目。

    您可以透過下列方式找出哪些資料行已編製索引,以及索引類型:

    • 查詢系統目錄資料表和檢視,例如 ALL_INDEXESDBA_INDEXESUSER_INDEXESDBA_IND_COL。 您可以在 Oracle SQL Developer 中使用內建查詢,如下列螢幕擷取畫面所示。

      顯示如何在 Oracle SQL Developer 中查詢系統目錄資料表和檢視的螢幕擷取畫面。

      或者,請執行下列查詢來尋找指定類型的所有索引:

      SELECT * FROM dba_indexes WHERE index_type LIKE 'FUNCTION-BASED%';
      
    • 啟用監視時查詢 dba_index_usagev$object_usage 檢視。 您可以在 Oracle SQL Developer 中查詢這些檢視,如下列螢幕擷取畫面所示。

      顯示如何找出 Oracle SQL Developer 中使用哪些索引的螢幕擷取畫面。

    函式型索引 (其中索引包含基礎資料行上函式的結果) 在 Azure Synapse 中沒有直接的對等項目。 建議您先遷移資料,然後在 Azure Synapse 中執行 Oracle 查詢,以使用函式型索引來量測效能。 如果 Azure Synapse 中無法接受這些查詢的效能,請考慮建立包含預先計算值的資料行,然後為該資料行編製索引。

    當您設定 Azure Synapse 環境時,只實作使用中的索引是合理的。 Azure Synapse 目前支援此處顯示的索引類型:

    顯示 Azure Synapse 所支援索引類型的螢幕擷取畫面。

    Azure Synapse 功能,例如資料與結果的平行查詢處理和記憶體內部快取,可讓資料倉儲應用程式需要較少的索引來達成效能目標。 建議您在 Azure Synapse 中使用下列索引類型:

    • 叢集資料行存放區索引:未針對資料表指定任何索引選項時,Azure Synapse 預設會建立叢集資料行存放區索引。 叢集資料行存放區資料表提供最高層級的資料壓縮、最佳的整體查詢效能,而且通常優於叢集索引或堆積資料表。 叢集資料行存放區索引通常是大型資料表的最佳選擇。 當您建立資料表時,如果您不確定如何編製資料表的索引,請選擇叢集資料行存放區。 不過,在某些情況下,叢集資料行存放區索引並不是最佳選項:

      • 排序索引鍵上具有預先排序資料的資料表, (s) 可能會受益于 已排序 叢集資料行存放區索引所啟用的區段消除。
      • 資料類型為 varchar(max)、Nvarchar(max) 或 varbinary(max) 的資料表,因為叢集資料行存放區索引不支援這些資料類型。 相反地,請考慮使用堆積或叢集索引。
      • 具有暫時性資料的資料表,因為資料行存放區資料表的效率可能比堆積或暫存資料表低。
      • 具有少於 1 億個資料列的小型資料表。 相反地,請考慮使用堆積資料表。
    • 已排序的叢集資料行存放區索引:藉由啟用有效率的區段消除,Azure Synapse專用 SQL 集區中的已排序資料行存放區索引,藉由略過不符合查詢述詞的大量已排序資料,提供更快速的效能。 由於資料排序作業,將資料載入已排序 CCI 資料表可能會較載入非排序 CCI 資料表花費更長的時間,但之後查詢可利用已排序 CCI 使執行速度更快。 如需詳細資訊,請參閱使用已排序的叢集資料行存放區索引微調效能

    • 叢集和非叢集索引:需要快速擷取單一資料列時,叢集索引可能會優於叢集資料行存放區索引。 對於必須以極快速度查閱單一資料列或查閱少數資料列的查詢,請考慮使用叢集索引或非叢集次要索引。 使用叢集索引的缺點是只有在叢集索引資料行上使用高度選擇性篩選的查詢才可受益。 若要改善其他資料行的篩選,您可以將非叢集索引新增至其他資料行。 不過,您新增至資料表的每個索引都會使用更多空間,並增加載入的處理時間。

    • 堆積資料表:當您暫時將資料登陸至 Azure Synapse 時,您可能會發現使用堆積資料表可讓整體程序更快。 這是因為將資料載入堆積資料表的速度比將資料載入索引資料表更快,而且在某些情況下,可以從快取中完成後續的讀取。 如果您載入資料只是在做執行更多轉換之前的預備,將資料載入堆積資料表會遠快於將資料載入叢集資料行存放區資料表。 此外,將資料載入暫存資料表會比將資料表載入永久儲存體快速。 對於少於 1 億個資料列的小型查閱資料表,堆積資料表通常是正確的選擇。 當資料表超過 1 億個資料列後,叢集資料行存放區資料表會開始達到最佳壓縮。

  • 叢集資料表:Oracle 資料表可以進行組織,因此通常一起存取的資料表資料列 (以通用值為基礎) 在實體上會儲存在一起,以降低擷取資料時的磁碟 I/O。 Oracle 也提供個別資料表的雜湊叢集選項,其會將雜湊值套用至叢集索引鍵,並在實體上將具有相同雜湊值的資料列儲存在一起。 若要列出 Oracle 資料庫內的叢集,請使用 SELECT * FROM DBA_CLUSTERS; 查詢。 若要判斷某個資料表是否在叢集中,請使用 SELECT * FROM TAB; 查詢,其中會顯示每個資料表的資料表名稱和叢集識別碼。

    在 Azure Synapse 中,您可以使用具體化和/或複寫的資料表來達成類似的結果,因為這些資料表類型可將查詢執行階段所需的 I/O 降到最低。

  • 具體化檢視:Oracle 支援具體化檢視,並建議針對具有許多資料行的大型資料表 (查詢中只會定期使用幾個資料行),使用一個或多個具體化檢視。 當基底資料表的資料已更新時,系統會自動重新整理具體化檢視。

    在 2019 年時,Microsoft 已宣佈 Azure Synapse 將支援與 Oracle 中功能相同的具體化檢視。 具體化檢視現在是 Azure Synapse 中的預覽功能。

  • 資料庫內觸發程序:在 Oracle 中,觸發程序可以設定為在觸發事件發生時自動執行。 觸發事件可以是:

    • 資料操作語言 (DML) 陳述式 (例如 INSERTUPDATEDELETE) 在資料表上執行。 如果您定義了在客戶資料表上執行 INSERT 陳述式之前引發觸發程序,則該觸發程序會在新的資料列插入客戶資料表之前引發一次。

    • DDL 陳述式 (例如 CREATEALTER) 執行。 此觸發程序通常用於稽核目的,可記錄結構描述變更。

    • 系統事件,例如 Oracle 資料庫的啟動或關機。

    • 使用者事件,例如登入或登出。

    您可以查詢 ALL_TRIGGERSDBA_TRIGGERSUSER_TRIGGERS 檢視,以取得 Oracle 資料庫中定義的觸發程序清單。 下列螢幕擷取畫面顯示 Oracle SQL Developer 中的 DBA_TRIGGERS 查詢。

    顯示如何在 Oracle SQL Developer 中查詢觸發程序清單的螢幕擷取畫面。

    Azure Synapse 不支援 Oracle 資料庫觸發程序。 不過,您可以使用 Data Factory 來新增對等的功能,但這麼做會要求您重構使用觸發程序的程序。

  • 同義字:Oracle 支援將同義字定義為數個資料庫物件類型的替代名稱。 這些物件類型包括:資料表、檢視、序列、程序、預存函式、套件、具體化檢視、Java 類別結構描述物件、使用者定義物件或其他同義字。

    雖然 Azure Synapse 目前不支援定義同義字,但如果 Oracle 中的同義字代表資料表或檢視,則您可以在 Azure Synapse 中定義檢視以符合該替代名稱。 如果 Oracle 中的同義字代表函式或預存程序,則您可以在 Azure Synapse 中以符合該同義字的名稱,建立另一個呼叫目標的函式或預存程序。

  • 使用者定義型別:Oracle 支援使用者定義物件,這些物件可以包含一系列個別欄位,且每個欄位都有自己的定義和預設值。 這些物件可以在資料表定義內參考,且方式與 NUMBERVARCHAR 等內建資料類型相同。 您可以查詢 ALL_TYPESDBA_TYPESUSER_TYPES 檢視,以取得 Oracle 資料庫中的使用者定義型別清單。

    Azure Synapse 目前不支援使用者定義型別。 如果您需要遷移的資料包含使用者定義的資料類型,請將其「壓平合併」成傳統資料表定義,或如果是資料陣列,請將其正規化為個別資料表。

Oracle 資料類型對應

大部分的 Oracle 資料類型在 Azure Synapse Analytics 中都有直接的對等項目。 下列資料表顯示將 Oracle 資料類型對應到 Azure Synapse 的建議方法。

Oracle 資料類型 Azure Synapse 資料類型
BFILE 不支援。 對應至 VARBINARY (MAX)。
BINARY_FLOAT 不支援。 對應至 FLOAT。
BINARY_DOUBLE 不支援。 對應至 DOUBLE。
BLOB 未直接支援。 取代為 VARBINARY (MAX)。
CHAR CHAR
CLOB 未直接支援。 取代為 VARCHAR(MAX)。
日期 Oracle 中的 DATE 也可以包含時間資訊。 視使用量對應至 DATE 或 TIMESTAMP。
DECIMAL DECIMAL
DOUBLE PRECISION DOUBLE
FLOAT FLOAT
INTEGER INT
INTERVAL YEAR TO MONTH 不支援 INTERVAL 資料類型。 針對日期計算,請使用日期比較函式,例如 DATEDIFF 或 DATEADD。
INTERVAL DAY TO SECOND 不支援 INTERVAL 資料類型。 針對日期計算,請使用日期比較函式,例如 DATEDIFF 或 DATEADD。
LONG 不支援。 對應至 VARCHAR(MAX)。
LONG RAW 不支援。 對應至 VARBINARY(MAX)。
NCHAR NCHAR
NVARCHAR2 NVARCHAR
NUMBER FLOAT
NCLOB 未直接支援。 取代為 NVARCHAR(MAX)。
NUMERIC NUMERIC
ORD 媒體資料類型 不支援
RAW 不支援。 對應至 VARBINARY。
REAL REAL
ROWID 不支援。 對應至類似的 GUID。
SDO 地理空間資料類型 不支援
SMALLINT SMALLINT
timestamp DATETIME2 或 CURRENT_TIMESTAMP() 函式
TIMESTAMP WITH LOCAL TIME ZONE 不支援。 對應至 DATETIMEOFFSET。
TIMESTAMP WITH TIME ZONE 不支援,因為 TIME 會使用時鐘時間儲存,沒有時區偏移。
URIType 不支援。 儲存在 VARCHAR 中。
UROWID 不支援。 對應至類似的 GUID。
VARCHAR VARCHAR
VARCHAR2 VARCHAR
XMLType 不支援。 將 XML 資料儲存在 VARCHAR 中。

Oracle 也支援使用者定義物件,這些物件可以包含一系列個別欄位,且每個欄位都有自己的定義和預設值。 然後這些物件可以在資料表定義內參考,且方式與 NUMBERVARCHAR 等內建資料類型相同。 Azure Synapse 目前不支援使用者定義型別。 如果您需要遷移的資料包含使用者定義的資料類型,請將其「壓平合併」成傳統資料表定義,或如果是資料陣列,請將其正規化為個別資料表。

提示

在移轉準備階段評估不支援的資料類型數目和類型。

協力廠商會提供工具和服務來自動化移轉,包括資料類型的對應。 若您已在 Oracle 環境中使用協力廠商 ETL 工具,請使用此工具來實作所有必要的資料轉換。

SQL DML 語法差異

Oracle SQL 與 Azure Synapse T-SQL 之間存在 SQL DML 語法差異。 這些差異會在將 Oracle 移轉的 SQL 問題最小化中詳細討論。 在某些情況下,您可以使用 SSMA for Oracle 和 Azure 資料庫移轉服務等 Microsoft 工具,或協力廠商的移轉產品和服務,將 DML 移轉自動化。

函數、預存程序及序列

從 Oracle 之類的成熟環境遷移資料倉儲時,您可能需要遷移簡單資料表和檢視以外的元素。 檢查 Azure 環境中的工具是否可以取代函式、預存程序和序列的功能,因為比起為了 Azure Synapse 重新編碼,使用內建 Azure 工具通常更有效率。

在準備階段中,請建立需要遷移的物件詳細目錄、定義處理這些物件的方法,並在移轉計畫中配置適當的資源。

Microsoft 工具 (例如 SSMA for Oracle 和 Azure 資料庫移轉服務) 或 協力廠商的移轉產品和服務,可以將函式、預存程序和序列的移轉自動化。

下列各節會進一步討論函式、預存程序和序列的移轉。

函式

與大多數資料庫產品相同,Oracle 支援 SQL 實作中的系統函式和使用者定義函式。 當您將舊版資料庫平台遷移至 Azure Synapse 時,通常不需要變更即可遷移一般系統函式。 某些系統函式的語法可能稍有不同,但仍可以將必要的變更自動化。 您可以使用適當的 WHERE 子句查詢 ALL_OBJECTS 檢視,以取得 Oracle 資料庫中的函式清單。 您可以使用 Oracle SQL Developer 來取得函式清單,如下列螢幕擷取畫面所示。

顯示如何在 Oracle SQL Developer 中查詢函式清單的螢幕擷取畫面。

針對在 Azure Synapse 中沒有對等項目的 Oracle 系統函式或任意使用者定義函式,請使用目標環境語言重新編碼這些函式。 Oracle 使用者定義函式會以 PL/SQL、Java 或 C 撰寫程式碼。Azure Synapse 會使用 Transact-SQL 語言來實作使用者定義函式。

預存程序

大部分的新式資料庫產品都支援在資料庫中儲存程序。 Oracle 為此目的提供了 PL/SQL 語言。 預存程序通常包含 SQL 陳述式和程序邏輯,並且會傳回資料或狀態。 您可以使用適當的 WHERE 子句查詢 ALL_OBJECTS 檢視,以取得 Oracle 資料庫中的預存程序清單。 您可以使用 Oracle SQL Developer 來取得預存程序的清單,如以下螢幕擷取畫面所示。

顯示如何在 Oracle SQL Developer 中查詢預存程序清單的螢幕擷取畫面。

Azure Synapse 支援使用 T-SQL 的預存程序,因此您必須以該語言重新編碼任何已遷移的預存程序。

序列

在 Oracle 中,序列是使用 CREATE SEQUENCE 所建立的具名資料庫物件。 序列透過 CURRVALNEXTVAL 方法提供唯一的數值。 您可以使用產生的唯一數字,作為主索引鍵值的代理索引鍵值。

Azure Synapse 不會實作 CREATE SEQUENCE,但您可以使用 IDENTITY 資料行或 SQL 程式碼來實作序列,以產生數列中的下一個序號。

從 Oracle 環境擷取中繼資料和資料

產生資料定義語言 (Data Definition Language)

ANSI SQL 標準會定義資料定義語言 (DDL) 命令的基本語法。 CREATE TABLECREATE VIEW 等 DDL 命令常見於 Oracle 和 Azure Synapse,但也提供實作專屬的功能,例如索引編製、資料表散發和資料分割選項。

您可以編輯現有的 Oracle CREATE TABLECREATE VIEW 指令碼,以在 Azure Synapse 中達成對等的定義。 若要這樣做,您可能需要使用修改過的資料類型,並移除或修改 Oracle 特定子句,例如 TABLESPACE

在 Oracle 環境中,系統目錄資料表會指定目前的資料表和檢視定義。 與使用者維護的文件不同,系統類別目錄資訊一律是完整的,且與目前的資料表定義同步。 您可以使用 Oracle SQL Developer 之類的公用程式來存取系統類別目錄資訊。 Oracle SQL Developer 可以產生 CREATE TABLE DDL 陳述式,讓您可以在 Azure Synapse 中編輯並建立對等資料表。

或者,您可以使用 SSMA for Oracle 將資料表從現有的 Oracle 環境遷移至 Azure Synapse。 SSMA for Oracle 會套用適當的資料類型對應和建議的資料表及散發類型,如下列螢幕擷取畫面所示。

顯示如何使用適用於 Oracle 的 SQL Server 移轉小幫手將資料表從現有 Oracle 環境遷移至 Azure Synapse 的螢幕擷取畫面。

您也可以使用協力廠商的移轉和 ETL 工具來處理系統類別目錄資訊,以達到類似的結果。

從 Oracle 擷取資料

您可以使用 Oracle SQL Developer、SQL*PlusSCLcl 等標準 Oracle 公用程式,將原始資料表的資料從 Oracle 資料表擷取到一般分隔檔案,例如 CSV 檔案。 然後,您可以使用 gzip 壓縮一般分隔檔案,並使用 AzCopy 或 Azure 資料箱之類的 Azure 資料傳輸工具,將壓縮的檔案上傳至 Azure Blob 儲存體。

盡可能有效率地擷取資料表資料,特別是移轉大型事實資料表時。 針對 Oracle 資料表,請使用平行處理原則將擷取輸送量最大化。 您可以執行多個可個別擷取離散資料區段的程序,或使用可透過資料分割自動化平行擷取的工具,來達到平行處理原則。

提示

使用平行處理原則進行最有效率的資料擷取。

如果有足夠的網路頻寬可用,您可以將資料從內部部署 Oracle 系統直接擷取到 Azure Synapse 資料表或 Azure Blob 資料儲存體。 若要這樣做,請使用 Data Factory 程序、Azure 資料庫移轉服務或協力廠商的資料移轉或 ETL 產品。

擷取的資料檔案應該包含 CSV、最佳化資料列單欄式 (ORC) 或 Parquet 格式的分隔文字。

如需從 Oracle 環境遷移資料和 ETL 的詳細資訊,請參閱 Oracle 移轉的資料移轉、ETL 和載入

Oracle 移轉的效能建議

效能最佳化的目標是在遷移至 Azure Synapse 之後獲得相同或更好的資料倉儲效能。

效能微調方法概念的相似性

Oracle 資料庫的許多效能微調概念同樣適用於 Azure Synapse 資料庫。 例如:

  • 使用資料散發將要聯結的資料集中至相同處理節點上。

  • 使用指定資料行的最小資料類型可節省儲存體空間,並加速查詢流程。

  • 請確定要聯結的資料行具有相同的資料類型,以利最佳化聯結處理,並減少資料轉換的需求。

  • 為協助最佳化工具產生最適合的執行計畫,請確保統計資料是最新的。

  • 使用內建資料庫功能監視效能,以確保有效率地使用資源。

提示

在移轉開始時,優先熟悉 Azure Synapse 微調選項。

效能微調方法的差異

本節強調 Oracle 與 Azure Synapse 之間的低階效能微調實作差異。

資料散發選項

為了提高效能,Azure Synapse 設計為使用多節點架構,並使用平行處理。 若要最佳化 Azure Synapse 中的資料表效能,您可以在 CREATE TABLE 陳述式中使用 DISTRIBUTION 陳述式定義資料散發選項。 例如,您可以指定雜湊分散式資料表,其會使用決定性雜湊函式,將資料表的資料列分散到計算節點上。 許多 Oracle 實作 (特別是較舊的內部部署系統) 都不支援此功能。

不同於 Oracle,Azure Synapse 支援透過小型資料表複寫在小型資料表與大型資料表之間進行本機聯結。 例如,星狀架構模型中的小型維度資料表和大型事實資料表。 Azure Synapse Analytics 可以跨所有節點複寫較小的維度資料表,以確保大型資料表的任何聯結索引鍵值都有相符的本機可用維度資料列。 小型維度資料表的維度資料表複寫額外負荷相對較低。 對於大型維度資料表,雜湊散發方法更合適。 如需有關資料散發選項的詳細資訊,請參閱使用複寫資料表的設計指引設計分散式資料表的指引

提示

雜湊散發可改善大型事實資料表的查詢效能。 循環配置資源散發可用於改善載入速度。

雜湊散發可以在多個資料行上套用,讓基底資料表的分佈更平均。 多資料行散發可讓您選擇最多八個資料行進行散發。 這不僅可減少一段時間的資料扭曲,也會改善查詢效能。

注意

多資料行散發目前處於預覽狀態,適用於 Azure Synapse Analytics。 您可以搭配 CREATE MATERIALIZED VIEWCREATE TABLECREATE TABLE AS SELECT 使用多資料行散發。

散發 Advisor

在 Azure Synapse SQL 中,您可以自訂每個資料表的散發方式。 資料表散發策略會大幅影響查詢效能。

散發建議程式是 Synapse SQL 中的新功能,可分析查詢,並建議資料表的最佳散發策略,以改善查詢效能。 建議程式要考慮的查詢可由您提供,或從 DMV 中的可用歷史查詢中提取。

如需如何使用散發建議程式的詳細資料和範例,請造訪 Azure Synapse SQL 中的散發建議程式

資料的索引編製

相較於 Oracle 中的系統管理區域對應,Azure Synapse 支援數個使用者可定義的索引選項,這些選項具有不同的作業和使用方式。 如需有關 Azure Synapse 中不同索引編製選項的詳細資訊,請參閱專用 SQL 集區資料表上的索引

來源 Oracle 環境內的索引定義提供資料使用量和候選資料行的實用指示,可用於在 Azure Synapse 環境中編製索引。 一般而言,您不需要從舊版 Oracle 環境遷移每個索引,因為 Azure Synapse 不會過度依賴索引,並且會實作下列功能來達到極佳效能:

  • 平行查詢處理。

  • 記憶體內部資料和結果集快取。

  • 資料散發 (例如小型維度資料表的複寫),可減少 I/O。

資料分割

在企業資料倉儲中,事實資料表可能包含數十億個資料列。 資料分割可最佳化這些資料表的維護和查詢,因為將這些資料表分割成不同的部分,可減少所處理的資料量。 在 Azure Synapse 中,CREATE TABLE 陳述式會定義資料表的分割規格。

每個資料表只能使用一個欄位進行資料分割。 該欄位通常是日期欄位,因為許多查詢都會依日期或日期範圍進行篩選。 您可以在初始載入之後變更資料表的分割,只要使用 CREATE TABLE AS (CTAS) 陳述式以新的散發來重新建立資料表即可。 如需 Azure Synapse 中資料分割的詳細說明,請參閱專用 SQL 集區中的資料分割資料表

用於載入資料的 PolyBase 或 COPY INTO

PolyBase 支援使用平行載入資料流,有效率地將大量資料載入至資料倉儲。 如需詳細資訊,請參閱 PolyBase 資料載入策略

COPY INTO 也支援高輸送量的資料擷取,以及:

  • 從資料夾和子資料夾內的所有檔案中擷取資料。
  • 從相同儲存體帳戶中的多個位置中擷取資料。 您可以使用逗號分隔路徑來指定多個位置。
  • Azure Data Lake Storage (ADLS) 和 Azure Blob 儲存體。
  • CSV、PARQUET 和 ORC 檔案格式。

提示

資料載入的建議方法是搭配 PARQUET 檔案格式使用 COPY INTO

工作負載管理

執行混合工作負載可能會造成忙碌系統上的資源挑戰。 成功的工作負載管理配置可有效地管理資源、確保高效率的資源使用率,以及最大化的投資報酬率 (ROI)。 工作負載分類工作負載重要性工作負載隔離可更充分地控制工作負載如何利用系統資源。

工作負載管理指南會說明分析工作負載、管理和監視工作負載重要性的技術,以及將資源類別轉換為工作負載群組的步驟。 使用 Azure 入口網站DMV 上的 T-SQL 查詢來監視工作負載,以確保有效率地利用適用資源。

下一步

若要深入了解 Oracle 移轉的 ETL 和載入,請參閱本系列中的下一篇文章:Oracle 移轉的資料移轉、ETL 和載入