Sdílet prostřednictvím


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

Tento článek je 5. čá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

Počáteční databázový produkt Oracle, vydaný v roce 1979, byl komerční relační databáze SQL pro on-line zpracování transakcí (OLTP) aplikací – s mnohem nižšími mírami transakcí než dnes. Od této počáteční verze se prostředí Oracle vyvinulo tak, aby bylo mnohem složitější a zahrnuje celou řadu funkcí. Mezi tyto funkce patří architektury klientských serverů, distribuované databáze, paralelní zpracování, analýzy dat, vysoká dostupnost, datové sklady, techniky v paměti a podpora cloudových instancí.

Tip

Oracle v raném roce 2000 povýšil koncept "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 poskytované cloudovými prostředími. Moderní cloudová prostředí, jako je cloud, IaaS a PaaS, umožňují delegovat úlohy, jako je údržba infrastruktury a vývoj platforem, na poskytovatele cloudu.

Mnoho datových skladů, které podporují složité analytické dotazy SQL na velké objemy dat, využívají technologie Oracle. Tyto datové sklady obvykle mají dimenzionální datový model, například hvězdicová nebo sněhová vločková schémata, a používají datové tržiště pro jednotlivá oddělení.

Tip

Řada existujících instalací Oracle je datových skladů, které používají dimenzionální datový model.

Kombinace datových modelů SQL a dimenzionálních datových modelů v Oracle zjednodušuje migraci do Azure Synapse, protože koncepty SQL a základních datových modelů 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 do trezoru dat, je vhodné nejprve provést migraci. Po počáteční migraci pak můžete provádět změny v cloudovém prostředí Azure, abyste využili výhod jeho výkonu, elastické škálovatelnosti, integrovaných funkcí a nákladových výhod.

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 pomocí funkcí prostředí Azure. Tento přístup minimalizuje dosažení výkonu v existujícím prostředí Oracle, které už může být v blízkosti kapacity.

Azure Data Factory je cloudová služba pro integraci dat, která podporuje vytváření pracovních postupů řízených daty v cloudu pro orchestraci a automatizaci přesunu a transformace dat. Data Factory můžete použít k vytváření a plánování pracovních postupů řízených 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í služby Azure Data Factory.

Pokud plánujete ke správě procesu migrace použít zařízení Azure, jako je data Factory, nejprve vytvořte metadata, která uvádějí všechny tabulky dat, které je potřeba migrovat a jejich umístění.

Rozdíly v SQL DDL mezi Oraclem a Azure Synapse

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

Tip

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

V následujících částech najdete informace o možnostech specifických pro Oracle, které je potřeba při migraci na Azure Synapse zvážit.

Aspekty tabulek a zobrazení

Když migrujete tabulky mezi různými prostředími, obvykle pouze nezpracovaná data a metadata, která je popisují fyzicky migrovat. Jiné databázové prvky ze zdrojového systému, jako jsou indexy a soubory protokolů, se obvykle nemigrují, protože můžou být zbytečné nebo implementované jinak v novém prostředí. Například TEMPORARY možnost v syntaxi Oracle CREATE TABLE odpovídá předponě názvu tabulky znakem # v Azure Synapse.

Optimalizace výkonu ve zdrojovém prostředí, například indexy, označují, kde můžete v novém cílovém prostředí přidat optimalizaci výkonu. Pokud se například bitové mapované indexy často používají v dotazech ve zdrojovém prostředí Oracle, znamená to, že by se měl v Azure Synapse vytvořit neskupený index. Jiné nativní techniky optimalizace výkonu, jako je například replikace tabulek, můžou být vhodnější než přímé vytvoření indexu 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 pro indexování v migrovaném skladu.

Definice zobrazení SQL obsahují příkazy jazyka DML (SQL 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 Oraclem a Azure Synapse.

Nepodporované typy databázových objektů Oracle

Funkce specifické pro Oracle je často možné nahradit funkcemi Azure Synapse. 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 v Azure Synapse dosáhnout ekvivalentních funkcí:

  • Možnosti indexování: v Oracle, několik možností indexování, jako jsou bitové mapované indexy, indexy založené na funkcích a indexy domén, nemají 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í uživatelsky definovaných typů indexů nebo dělením oddílů, které snižují vstupně-výstupní operace disku, což zvyšuje výkon dotazů.

    Můžete zjistit, které sloupce jsou indexovány a jejich typ indexu dotazováním tabulek a zobrazení systémového katalogu, například ALL_INDEXES, DBA_INDEXES, USER_INDEXESa DBA_IND_COL. Nebo můžete dotazovat zobrazení dba_index_usage nebo v$object_usage zobrazení, když je povoleno monitorování.

    Díky funkcím Azure Synapse, jako je paralelní zpracování dotazů a ukládání dat do mezipaměti v paměti, je pravděpodobné, že pro aplikace datového skladu je potřeba méně indexů, aby bylo dosaženo vynikajících cílů výkonu.

  • Clusterované tabulky: Tabulky Oracle je možné uspořádat tak, aby se řádky tabulky, ke kterým se často přistupuje společně (na základě společné hodnoty), fyzicky ukládaly dohromady. Tato strategie snižuje vstupně-výstupní operace 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 společně.

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

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

    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 službě Azure Synapse funkcí Preview.

  • Triggery v databázi: V Oracle je možné trigger nakonfigurovat tak, aby se automaticky spouštěl, když dojde k 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 trigger, který se aktivuje před příkazem INSERT v tabulce zákazníka, aktivuje se aktivační událost 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ání změn schématu pro účely auditování.

    • Systémová událost, jako je 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ází Oracle. Můžete ale dosáhnout ekvivalentních funkcí 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říd Java, uživatelem definované objekty nebo jiná synonyma.

    Azure Synapse v současné době nepodporuje definování synonym, i když synonyma v Oracle odkazuje na tabulku nebo zobrazení, můžete v Azure Synapse definovat zobrazení 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é můžou obsahovat řadu jednotlivých polí, z nichž každá má vlastní definici a výchozí hodnoty. Na tyto objekty pak lze odkazovat v definici tabulky stejným způsobem jako předdefinované datové typy jako NUMBER nebo VARCHAR.

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

Generování DDL SQL

Existující oracle CREATE TABLE a CREATE VIEW skripty můžete upravit, abyste dosáhli 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

Pomocí existujících metadat Oracle můžete automatizovat 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 dokumentace spravované uživatelem se informace o katalogu systému vždy dokončí a synchronizují s aktuálními definicemi tabulek. K informacím o systémovém katalogu můžete přistupovat 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 platily pro ekvivalentní tabulky v Azure Synapse, jak je znázorněno na dalším snímku obrazovky.

Snímek obrazovky s příkazem create table vygenerovaným 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 v Azure Synapse namapujte všechny nepodporované datové typy.

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

Alternativně můžete automaticky generovat CREATE TABLE příkazy 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 nejkonzistence 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 je nástroj ETL třetí strany již používán v prostředí Oracle, použijte tento nástroj k implementaci všech požadovaných transformací dat.

Rozdíly v SQL DML mezi Oraclem a Azure Synapse

Standard ANSI SQL definuje základní syntaxi příkazů DML, například SELECT, INSERT, UPDATEa DELETE. I když Oracle i Azure Synapse podporují příkazy DDL, v některých případech implementují stejný příkaz jinak.

Tip

Standardní příkazy SELECTINSERTSQL DML a UPDATE mohou mít další možnosti syntaxe v různých databázových prostředích.

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

Rozdíly v syntaxi SQL DML

Mezi Oracle SQL a Azure Synapse T-SQL existují některé rozdíly v syntaxi JAZYKa SQL SQL:

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

    Příkladem dotazu Oracle, který používá DUAL tabulku, je SELECT sysdate from dual;. Ekvivalent azure Synapse je SELECT GETDATE();. Pokud chcete zjednodušit migraci DML, můžete 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 řetězce nebo typem CHAR VARCHAR délky 0. Ve službě Azure Synapse a ve většině ostatních databází NULL to znamená něco jiného. Při migraci dat nebo při migraci 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í speciální syntaxi, která v příkazu SQL používá znaménko plus (+). Pokud migrujete starší prostředí Oracle, může dojít ke starší syntaxi. 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 DATETIMEdatových typech a DATETIME datových typech. Při migraci sloupců Oracle DATE zkontrolujte, jestli ukládají datum i čas nebo jenom datum. Pokud uloží pouze datum, namapujte sloupec na DATE, jinak na DATETIME.

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

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

  • Aktualizace prostřednictvím zobrazení: V Oracle můžete spouštět operace vložení, aktualizace a odstranění v zobrazení, aby se aktualizovala podkladová tabulka. V Azure Synapse spustíte tyto operace na základní tabulce, nikoli v zobrazení. Pokud se tabulka Oracle aktualizuje prostřednictvím zobrazení, budete možná muset znovu zpracovat ETL.

  • 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 předdefinovaných datových typů 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 měsíce EOMONTH
LENGTH Získání délky řetězce ve značce LEN
LPAD Řetězec levého panelu na zadanou délku Výraz s využitím replikace, pravého a levého
Zkratka modulo Získání zbytku dělení jednoho čísla o druhé % 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 pro datum a čas Převod data a času na řetězec PŘEMĚNIT
TO_DATE Převod řetězce na datetime PŘEMĚNIT
PŘEKLÁDAT Nahrazení jednoznakového znaku 1:1 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 for 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 mohou 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 pro Oracle a Azure Database Migration Services nebo produkty a služby migrace 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í.

Funkce

Stejně jako většina databázových produktů podporuje Oracle systémové a uživatelem definované funkce v rámci implementace SQL. Při migraci starší verze 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ódované v PL/SQL, Javě nebo C. Azure Synapse používá jazyk Transact-SQL k implementaci uživatelem definovaných funkcí.

Uložené procedury

Většina moderních databázových produktů podporuje ukládání procedur v databázi. 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 všechny migrované uložené procedury v T-SQL překódovat.

Sekvence

V Oracle je sekvence pojmenovaný databázový objekt vytvořený pomocí CREATE SEQUENCE. Sekvence poskytuje jedinečné číselné hodnoty prostřednictvím CURRVAL metod a NEXTVAL metod. Vygenerovaná jedinečná čísla můžete použít jako náhradní hodnoty 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 ze stávajících systémových protokolů dotazů.

Za předpokladu, že migrovaný datový model podobný podobnému ve službě Azure Synapse se stejnými názvy tabulek a sloupců je jedním ze způsobů, jak otestovat starší verzi Oracle SQL kvůli kompatibilitě se službou Azure Synapse:

  1. Zachyťte některé reprezentativní příkazy SQL ze starších protokolů historie dotazů systému.
  2. Předpona těchto dotazů pomocí EXPLAIN příkazu.
  3. EXPLAIN Spusťte příkazy v Azure Synapse.

Jakékoli nekompatibilní SQL vygeneruje chybu a informace o chybě lze použít k určení měřítka úlohy přepočítávání. Tento přístup nevyžaduje, abyste do prostředí Azure načetli žádná data, stačí vytvořit jenom relevantní tabulky a zobrazení.

Shrnutí

Stávající starší instalace Oracle se obvykle implementují způsobem, díky kterému je migrace do Azure Synapse relativně 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 na migraci do Azure Synapse.

Abychom mohli shrnout, naše doporučení pro minimalizaci úlohy migrace kódu SQL z Oracle do Azure Synapse jsou následující:

  • Migrujte stávající datový model tak, jak je minimalizovat riziko, úsilí a čas migrace, i když se plánuje jiný datový model, například trezor dat.

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

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

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

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

Další kroky

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