Minimalizace problémů s SQL při migracích Oracle

Tento článek je pátou částí sedmidílné série, která obsahuje pokyny k migraci z Oracle na Azure Synapse Analytics. Tento článek se zaměřuje na osvědčené postupy pro minimalizaci problémů s SQL.

Přehled

Charakteristiky prostředí Oracle

Původní databázový produkt Společnosti Oracle, vydaný v roce 1979, byla komerční relační databáze SQL pro aplikace pro on-line zpracování transakcí (OLTP) – s mnohem nižší rychlostí transakcí než dnes. Od této počáteční verze se prostředí Oracle vyvinulo do mnohem složitějšího a zahrnuje řadu funkcí. Mezi tyto funkce patří architektury klient-server, distribuované databáze, paralelní zpracování, analýza dat, vysoká dostupnost, datové sklady, techniky dat v paměti a podpora cloudových instancí.

Tip

Oracle byl na začátku roku 2000 průkopníkem konceptu "zařízení datového skladu".

Vzhledem k nákladům a složitosti údržby a upgradu starších místních prostředí Oracle chce mnoho stávajících uživatelů Oracle využívat inovace, které cloudová prostředí poskytují. Moderní cloudová prostředí, jako je cloud, IaaS a PaaS, umožňují delegovat úlohy, jako je údržba infrastruktury a vývoj platformy, na poskytovatele cloudu.

Mnoho datových skladů, které podporují komplexní analytické dotazy SQL u velkých objemů dat, využívá technologie Oracle. Tyto datové sklady mají běžně dimenzionální datový model, například hvězdicová nebo vločková schémata, a používají datová tržiště pro jednotlivá oddělení.

Tip

Mnoho stávajících instalací Oracle jsou datové sklady, které používají model dimenzionálních dat.

Kombinace SQL a dimenzionálních datových modelů v Oracle zjednodušuje migraci na Azure Synapse, protože koncepty SQL a základní datové modely jsou přenositelné. Microsoft doporučuje přesunout stávající datový model tak, jak je, do Azure, aby se snížilo riziko, úsilí a doba migrace. I když váš plán migrace může zahrnovat změnu v podkladovém datovém modelu, například přechod z modelu Inmon na trezor dat, má smysl nejprve provést migraci tak, jak je. Po počáteční migraci pak můžete v cloudovém prostředí Azure provádět změny a využívat tak jeho výkon, elastickou škálovatelnost, integrované funkce a nákladové výhody.

I když je jazyk SQL standardizovaný, jednotliví dodavatelé někdy implementují proprietární rozšíření. V důsledku toho můžete během migrace najít rozdíly v SQL, které vyžadují alternativní řešení v Azure Synapse.

Použití zařízení Azure k implementaci migrace řízené metadaty

Proces migrace můžete automatizovat a orchestrovat s využitím možností prostředí Azure. Tento přístup minimalizuje výkon ve stávajícím prostředí Oracle, které se už může blížit kapacitě.

Azure Data Factory je cloudová služba pro integraci dat, která podporuje vytváření pracovních postupů řízených daty v cloudu za účelem orchestrace a automatizace přesunu a transformace dat. Pomocí služby Data Factory můžete vytvářet a plánovat pracovní postupy řízené daty (kanály), které ingestují data z různorodých úložišť dat. Data Factory může zpracovávat a transformovat data pomocí výpočetních služeb, jako jsou Azure HDInsight Hadoop, Spark, Azure Data Lake Analytics a Azure Machine Learning.

Azure také zahrnuje službu Azure Database Migration Services , která vám pomůže naplánovat a provést migraci z prostředí, jako je Oracle. Pomocník s migrací SQL Serveru (SSMA) pro Oracle může automatizovat migraci databází Oracle, včetně některých funkcí a procedurálního kódu.

Tip

Automatizujte proces migrace pomocí funkcí Azure Data Factory.

Když plánujete ke správě procesu migrace používat zařízení Azure, jako je například Data Factory, nejprve vytvořte metadata se seznamem všech tabulek dat, které je potřeba migrovat, a jejich umístění.

Rozdíly sql DDL mezi Oraclem a Azure Synapse

Standard ANSI SQL definuje základní syntaxi pro příkazy DDL (Data Definition Language). Některé příkazy DDL, jako CREATE TABLE jsou a CREATE VIEW, jsou společné pro Oracle i Azure Synapse, ale byly rozšířeny o funkce specifické pro implementaci, jako je indexování, distribuce tabulek a možnosti dělení.

Tip

Příkazy CREATE TABLE SQL DDL a CREATE VIEW mají standardní základní prvky, ale používají se také k definování možností specifických pro implementaci.

Následující části popisují možnosti specifické pro Oracle, které je potřeba zvážit během migrace do Azure Synapse.

Důležité informace o tabulce nebo zobrazení

Při migraci tabulek mezi různými prostředími se obvykle fyzicky migrují jenom nezpracovaná data a metadata, která je popisují. Jiné databázové prvky ze zdrojového systému, jako jsou indexy a soubory protokolu, se obvykle nemigrují, protože můžou být v novém prostředí zbytečné nebo implementované jinak. Například TEMPORARY možnost v syntaxi Oracle CREATE TABLE je ekvivalentem předpony názvu tabulky znakem # v Azure Synapse.

Optimalizace výkonu ve zdrojovém prostředí, například indexy, označují, kam byste mohli přidat optimalizaci výkonu v novém cílovém prostředí. Pokud se například indexy mapované bitem často používají v dotazech v rámci zdrojového prostředí Oracle, naznačuje to, že by se v rámci Azure Synapse měl vytvořit nes clusterovaný index. Jiné nativní techniky optimalizace výkonu, jako je replikace tabulek, můžou být vhodnější než přímé vytváření indexů podobného typu. SSMA pro Oracle může poskytovat doporučení k migraci pro distribuci a indexování tabulek.

Tip

Existující indexy označují kandidáty na indexování v migrovaném skladu.

Definice zobrazení SQL obsahují příkazy jazyka DML (Data Manipulation Language), které definují zobrazení, obvykle s jedním nebo více SELECT příkazy. Při migraci CREATE VIEW příkazů vezměte v úvahu rozdíly DML mezi Oracle a Azure Synapse.

Nepodporované typy databázových objektů Oracle

Funkce specifické pro Oracle mohou být často nahrazeny Azure Synapse funkcemi. Některé databázové objekty Oracle se ale v Azure Synapse přímo nepodporují. Následující seznam nepodporovaných databázových objektů Oracle popisuje, jak můžete dosáhnout ekvivalentních funkcí v Azure Synapse:

  • Možnosti indexování: V Oracle nemá několik možností indexování, jako jsou indexy mapované bity, indexy založené na funkcích a indexy domény, v Azure Synapse žádný přímý ekvivalent. I když Azure Synapse tyto typy indexů nepodporuje, můžete dosáhnout podobného snížení počtu vstupně-výstupních operací disku pomocí typů indexů definovaných uživatelem nebo dělením na oddíly: Snížení počtu vstupně-výstupních operací disku zlepšuje výkon dotazů.

    Pokud chcete zjistit, které sloupce jsou indexované a jejich typ indexu, můžete dotazováním tabulek a zobrazení systémového katalogu, jako ALL_INDEXESjsou , DBA_INDEXES, USER_INDEXESa DBA_IND_COL. Nebo se můžete dotazovat na dba_index_usage zobrazení nebo v$object_usage , když je povolené monitorování.

    Azure Synapse funkcích, jako je paralelní zpracování dotazů a ukládání dat a výsledků do mezipaměti v paměti, je pravděpodobné, že aplikace datového skladu vyžadují méně indexů, aby mohly dosáhnout vynikajících výkonnostních cílů.

  • Clusterované tabulky: Tabulky Oracle je možné uspořádat tak, aby řádky tabulky, ke kterým se často přistupuje společně (na základě společné hodnoty), byly fyzicky uloženy společně. Tato strategie snižuje počet vstupně-výstupních operací disku při načítání dat. Oracle má také možnost hash-cluster pro jednotlivé tabulky, která aplikuje hodnotu hash na klíč clusteru a fyzicky ukládá řádky se stejnou hodnotou hash dohromady.

    V Azure Synapse můžete dosáhnout podobného výsledku rozdělením nebo použitím jiných indexů.

  • Materializovaná zobrazení: Oracle podporuje materializovaná zobrazení a doporučuje jedno nebo více z nich pro velké tabulky s mnoha sloupci, kde se v dotazech pravidelně používá jenom několik sloupců. Materializovaná zobrazení se automaticky aktualizují systémem při aktualizaci dat v základní tabulce.

    V roce 2019 Microsoft oznámil, že Azure Synapse bude podporovat materializovaná zobrazení se stejnými funkcemi jako v Oracle. Materializovaná zobrazení jsou teď ve verzi Preview v Azure Synapse.

  • Triggery v databázi: V Oracle je možné trigger nakonfigurovat tak, aby se automaticky spustil při výskytu aktivační události. Aktivační události můžou být:

    • Spustí se příkaz DML, například INSERT, UPDATEnebo DELETE. Pokud jste definovali aktivační událost, která se aktivuje před příkazem INSERT v tabulce zákazníka, aktivuje se jednou před vložením nového řádku do tabulky zákazníka.

    • Spustí se příkaz DDL, například CREATE nebo ALTER. Tato aktivační událost se často používá k zaznamenávání změn schématu pro účely auditování.

    • Systémová událost, například spuštění nebo vypnutí databáze Oracle.

    • Událost uživatele, jako je přihlášení nebo odhlášení.

    Azure Synapse nepodporuje triggery databáze Oracle. Ekvivalentní funkce ale můžete dosáhnout pomocí služby Data Factory, i když to bude vyžadovat refaktoring procesů, které používají triggery.

  • Synonyma: Oracle podporuje definování synonym jako alternativních názvů pro několik typů databázových objektů. Mezi tyto typy patří tabulky, zobrazení, sekvence, procedury, uložené funkce, balíčky, materializovaná zobrazení, objekty schématu třídy Java, uživatelem definované objekty nebo jiná synonyma.

    Azure Synapse v současné době nepodporuje definování synonym, i když pokud synonymum v Oracle odkazuje na tabulku nebo zobrazení, můžete definovat zobrazení v Azure Synapse tak, aby odpovídalo alternativnímu názvu. Pokud synonymum v Oracle odkazuje na funkci nebo uloženou proceduru, můžete synonymum v Azure Synapse nahradit jinou funkcí nebo uloženou procedurou, která volá cíl.

  • Uživatelem definované typy: Oracle podporuje uživatelem definované objekty, které mohou obsahovat řadu jednotlivých polí, z nichž každé má vlastní definici a výchozí hodnoty. Na tyto objekty pak lze v rámci definice tabulky odkazovat stejným způsobem jako na předdefinované datové typy, jako je nebo NUMBERVARCHAR.

    Azure Synapse v současné době nepodporuje uživatelsky definované typy. Pokud data, která potřebujete migrovat, zahrnují datové typy definované uživatelem, buď je "zploštěte" do definice konvenční tabulky, nebo pokud se jedná o pole dat, normalizujte je v samostatné tabulce.

Generování DDL SQL

Úpravou existujících oracle CREATE TABLE a CREATE VIEW skriptů můžete dosáhnout ekvivalentních definic v Azure Synapse. K tomu možná budete muset použít upravené datové typy a odebrat nebo upravit klauzule specifické pro Oracle, například TABLESPACE.

Tip

Použijte existující metadata Oracle k automatizaci generování CREATE TABLE a CREATE VIEW DDL pro Azure Synapse.

Tabulky systémového katalogu v prostředí Oracle určují aktuální definici tabulky nebo zobrazení. Na rozdíl od uživatelsky spravované dokumentace jsou informace systémového katalogu vždy úplné a synchronizované s aktuálními definicemi tabulek. K informacím v systémovém katalogu můžete získat přístup pomocí nástrojů, jako je Oracle SQL Developer. Oracle SQL Developer může generovat CREATE TABLE příkazy DDL, které můžete upravit tak, aby se použily na ekvivalentní tabulky v Azure Synapse, jak je znázorněno na následujícím snímku obrazovky.

Snímek obrazovky znázorňující příkaz create table vygenerovaný vývojářem Oracle SQL

Oracle SQL Developer vypíše následující CREATE TABLE příkaz, který obsahuje klauzule specifické pro Oracle, které byste měli odebrat. Před spuštěním upraveného CREATE TABLE příkazu na Azure Synapse namapujte všechny nepodporované datové typy.

Snímek obrazovky znázorňující možnost rychlé nabídky DDL ve vývojáři Oracle SQL

Alternativně můžete příkazy automaticky generovat CREATE TABLE z informací v tabulkách katalogu Oracle pomocí dotazů SQL, SSMA nebo nástrojů pro migraci třetích stran . Tento přístup představuje nejrychlejší a nejkonzistentnější způsob generování CREATE TABLE příkazů pro mnoho tabulek.

Tip

Nástroje a služby třetích stran můžou automatizovat úlohy mapování dat.

Dodavatelé třetích stran nabízejí nástroje a služby pro automatizaci migrace, včetně mapování datových typů. Pokud se v prostředí Oracle již používá nástroj ETL třetí strany , použijte ho k implementaci všech požadovaných transformací dat.

Rozdíly sql DML mezi Oraclem a Azure Synapse

Standard ANSI SQL definuje základní syntaxi pro příkazy DML, jako SELECTjsou , INSERT, UPDATEa DELETE. I když Oracle i Azure Synapse podporují příkazy DDL, v některých případech implementují stejný příkaz odlišně.

Tip

Standardní příkazy SELECTSQL DML , INSERTa UPDATE můžou mít v různých databázových prostředích další možnosti syntaxe.

Následující části popisují příkazy DML specifické pro Oracle, které je potřeba vzít v úvahu během migrace do Azure Synapse.

Rozdíly v syntaxi SQL DML

Mezi Oracle SQL a Azure Synapse T-SQL existuje několik rozdílů v syntaxi DML SQL:

  • DUAL table: Oracle má systémovou tabulku s názvem DUAL , která se skládá z přesně jednoho sloupce s názvem dummy a jednoho záznamu s hodnotou X. Systémová tabulka se DUAL používá, když dotaz vyžaduje název tabulky ze syntaktických důvodů, ale obsah tabulky není potřeba.

    Příkladem dotazu Oracle, který používá DUAL tabulku, je SELECT sysdate from dual;. Ekvivalentem Azure Synapse je SELECT GETDATE();. Pokud chcete migraci DML zjednodušit, mohli byste vytvořit ekvivalentní DUAL tabulku v Azure Synapse pomocí následujícího DDL.

    CREATE TABLE DUAL
    (
      DUMMY VARCHAR(1)
    )
    GO
    INSERT INTO DUAL (DUMMY)
    VALUES ('X')
    GO
    
  • NULL values: NULL Hodnota v Oracle je prázdný řetězec reprezentovaný typem CHARVARCHAR nebo typu řetězce o délce 0. V Azure Synapse a většině ostatních databází NULL znamená něco jiného. Při migraci dat nebo procesů, které zpracovávají nebo ukládají data, buďte opatrní, abyste zajistili NULL konzistentní zpracování hodnot.

  • Syntaxe vnějšího spojení Oracle: I když novější verze Oracle podporují syntaxi vnějšího spojení ANSI, starší systémy Oracle používají pro vnější spojení vlastní syntaxi, která v příkazu SQL používá znaménko plus (+). Pokud migrujete starší prostředí Oracle, můžete se setkat se starší syntaxí. Příklad:

    SELECT
        d.deptno, e.job
    FROM
        dept d,
        emp e
    WHERE
        d.deptno = e.deptno (+)
        AND e.job (+) = 'CLERK'
    GROUP BY
        d.deptno, e.job;
    

    Ekvivalentní standardní syntaxe ANSI je:

    SELECT
        d.deptno, e.job
    FROM
        dept d
        LEFT OUTER JOIN emp e ON d.deptno = e.deptno
        and e.job = 'CLERK'
    GROUP BY
        d.deptno,
        e.job
    ORDER BY
        d.deptno, e.job;
    
  • DATE data: V Oracle DATE může datový typ ukládat datum i čas. Azure Synapse ukládá datum a čas v samostatných DATEdatových typech , TIMEa DATETIME . Při migraci sloupců Oracle DATE zkontrolujte, jestli jsou v nich uložené datum a čas, nebo jenom datum. Pokud se v nich uloží jenom datum, namapujte sloupec na DATE, jinak na DATETIME.

  • DATE aritmetika: Oracle podporuje odečtení jednoho data od druhého, například SELECT date '2018-12-31' - date '2018-1201' from dual;. V Azure Synapse můžete kalendářní data odečíst pomocí DATEDIFF() funkce , například SELECT DATEDIFF(day, '2018-12-01', '2018-12-31');.

    Oracle může od kalendářních dat odečítat celá čísla, například SELECT hire_date, (hire_date-1) FROM employees;. V Azure Synapse můžete pomocí DATEADD() funkce přičítat nebo odečítat celá čísla kalendářních dat.

  • Aktualizace prostřednictvím zobrazení: V Oracle můžete v zobrazení spustit operace vložení, aktualizace a odstranění a aktualizovat tak podkladovou tabulku. V Azure Synapse tyto operace spouštíte v základní tabulce, nikoli v zobrazení. Zpracování ETL možná budete muset přepracovat, pokud se tabulka Oracle aktualizuje prostřednictvím zobrazení.

  • Předdefinované funkce: Následující tabulka ukazuje rozdíly v syntaxi a použití některých předdefinovaných funkcí.

Funkce Oracle Popis Ekvivalent Synapse
ADD_MONTHS Přidání zadaného počtu měsíců DATEADD
CAST Převod jednoho integrovaného datového typu na jiný CAST
DEKÓDOVAT Vyhodnocení seznamu podmínek Výraz CASE
EMPTY_BLOB Vytvoření prázdné hodnoty objektu BLOB 0x konstanta (prázdný binární řetězec)
EMPTY_CLOB Vytvoření prázdné hodnoty CLOB nebo NCLOB '' (prázdný řetězec)
INITCAP Velká písmena prvního písmena každého slova Uživatelem definovaná funkce
INSTR Vyhledání pozice podřetězce v řetězci CHARINDEX
LAST_DAY Získání posledního data v měsíci EOMONTH
LENGTH Získání délky řetězce ve znach LEN
LPAD Řetězec levého panelu na zadanou délku Výraz využívající repliky, zprava a zleva
MOD Získání zbytku dělení jednoho čísla jiným číslem % Operátor
MONTHS_BETWEEN Získání počtu měsíců mezi dvěma daty DATEDIFF
NVL Nahradit NULL výrazem ISNULL
SUBSTR Vrácení podřetězce z řetězce SUBSTRING
TO_CHAR datetime Převod datetime na řetězec CONVERT
TO_DATE Převod řetězce na datetime CONVERT
PŘELOŽIT Náhrada jednoho k jednomu znaku Výrazy používající funkci REPLACE nebo uživatelem definovanou funkci
TRIM Oříznutí úvodních nebo koncových znaků LTRIM a RTRIM
TRUNC pro datetime Zkrácení data a času Výrazy používající funkci CONVERT
UNISTR Převod bodů kódu Unicode na znaky Výrazy používající NCHAR

Funkce, uložené procedury a sekvence

Při migraci datového skladu z vyspělého prostředí, jako je Oracle, budete pravděpodobně muset migrovat jiné prvky než jednoduché tabulky a zobrazení. U funkcí, uložených procedur a sekvencí zkontrolujte, jestli nástroje v prostředí Azure můžou nahradit jejich funkce, protože je obvykle efektivnější používat integrované nástroje Azure než překódovat funkce Oracle.

V rámci přípravné fáze vytvořte inventář objektů, které je potřeba migrovat, definujte metodu pro jejich zpracování a přidělte příslušné prostředky v plánu migrace.

Nástroje Microsoftu, jako je SSMA for Oracle a Azure Database Migration Services, nebo produkty a služby pro migraci třetích stran , můžou automatizovat migraci funkcí, uložených procedur a sekvencí.

Tip

Produkty a služby třetích stran můžou automatizovat migraci jiných než datových prvků.

Následující části popisují migraci funkcí, uložených procedur a sekvencí.

Functions

Stejně jako u většiny databázových produktů podporuje Oracle systémové a uživatelem definované funkce v rámci implementace SQL. Při migraci starší databázové platformy do Azure Synapse můžete obvykle migrovat běžné systémové funkce beze změny. Některé systémové funkce můžou mít trochu odlišnou syntaxi, ale můžete automatizovat všechny požadované změny.

V případě systémových funkcí Oracle nebo libovolných uživatelem definovaných funkcí, které nemají v Azure Synapse žádný ekvivalent, překódujte tyto funkce pomocí cílového jazyka prostředí. Uživatelem definované funkce Oracle jsou kódovány v PL/SQL, Javě nebo C. Azure Synapse k implementaci uživatelem definovaných funkcí používá jazyk Transact-SQL.

Uložené procedury

Většina moderních databázových produktů podporuje ukládání procedur v rámci databáze. Oracle pro tento účel poskytuje jazyk PL/SQL. Uložená procedura obvykle obsahuje příkazy SQL i procedurální logiku a vrací data nebo stav.

Azure Synapse podporuje uložené procedury pomocí T-SQL, takže budete muset překódovat všechny migrované uložené procedury v T-SQL.

Sekvence

V Oracle je posloupnost pojmenovaným databázovým objektem vytvořeným pomocí CREATE SEQUENCE. Sekvence poskytuje jedinečné číselné hodnoty prostřednictvím CURRVAL metod a NEXTVAL . Vygenerovaná jedinečná čísla můžete použít jako hodnoty náhradního klíče pro primární klíče. Azure Synapse neimplementuje CREATE SEQUENCE, ale můžete implementovat sekvence pomocí IDENTITY sloupců nebo kódu SQL, který vygeneruje další pořadové číslo v řadě.

Použití funkce EXPLAIN k ověření starší verze SQL

Tip

K vyhledání potenciálních problémů s migrací použijte skutečné dotazy z existujících protokolů dotazů systému.

Za předpokladu, že migrovaný datový model podobného typu v Azure Synapse se stejnými názvy tabulek a sloupců, je jedním ze způsobů, jak otestovat kompatibilitu starší verze Oracle SQL s Azure Synapse:

  1. Zachyťte některé reprezentativní příkazy SQL ze starších protokolů historie dotazů systému.
  2. Před tyto dotazy zadejte předponu příkazem EXPLAIN .
  3. Příkazy spusťte EXPLAIN v Azure Synapse.

Jakýkoli nekompatibilní SQL vygeneruje chybu a informace o chybě se dají použít k určení měřítka rekódující úlohy. Tento přístup nevyžaduje, abyste do prostředí Azure načetli žádná data, stačí vytvořit relevantní tabulky a zobrazení.

Souhrn

Stávající starší instalace Oracle se obvykle implementují tak, aby migrace na Azure Synapse poměrně jednoduchá. Obě prostředí používají SQL pro analytické dotazy na velké objemy dat a obecně používají určitou formu dimenzionálního datového modelu. Díky těmto faktorům jsou instalace Oracle vhodným kandidátem pro migraci do Azure Synapse.

Abychom to shrnuli, naše doporučení pro minimalizaci úlohy migrace kódu SQL z Oracle na Azure Synapse jsou:

  • Migrace stávajícího datového modelu tak, jak je, aby se minimalizovala rizika, úsilí a doba migrace, a to i v případě, že se plánuje jiný datový model, například trezor dat.

  • Seznamte se s rozdíly mezi implementací Oracle SQL a implementací Azure Synapse.

  • K vyhodnocení dopadu změny prostředí použijte metadata a protokoly dotazů ze stávající implementace Oracle. Naplánujte přístup ke zmírnění rozdílů.

  • Automatizujte proces migrace, abyste minimalizovali riziko, úsilí a dobu migrace. Můžete použít nástroje Microsoftu, jako jsou Azure Database Migration Services a SSMA.

  • Zvažte použití specializovaných nástrojů a služeb třetích stran ke zjednodušení migrace.

Další kroky

Další informace o nástrojích Microsoftu a třetích stran najdete v dalším článku této série: Nástroje pro migraci datového skladu Oracle do Azure Synapse Analytics.