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_INDEXES
aDBA_IND_COL
. Nebo můžete dotazovat zobrazenídba_index_usage
nebov$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
,UPDATE
neboDELETE
. Pokud jste definovali trigger, který se aktivuje před příkazemINSERT
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
neboALTER
. 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
neboVARCHAR
.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.
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.
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
, UPDATE
a 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 SELECT
INSERT
SQL 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ázvemDUAL
, která se skládá z přesně jednoho sloupce pojmenovanéhodummy
a jednoho záznamu s hodnotouX
.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, jeSELECT sysdate from dual;
. Ekvivalent azure Synapse jeSELECT 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 typemCHAR
VARCHAR
délky0
. 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 zajistiliNULL
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 OracleDATE
může datový typ ukládat datum i čas. Azure Synapse ukládá datum a čas v samostatnýchDATE
TIME
datových typech aDATETIME
datových typech. Při migraci sloupců OracleDATE
zkontrolujte, jestli ukládají datum i čas nebo jenom datum. Pokud uloží pouze datum, namapujte sloupec naDATE
, jinak naDATETIME
.DATE
aritmetika: Oracle podporuje odčítání jednoho data od jiného, napříkladSELECT date '2018-12-31' - date '2018-1201' from dual;
. V Azure Synapse můžete odečíst kalendářní data pomocíDATEDIFF()
funkce, napříkladSELECT 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:
- Zachyťte některé reprezentativní příkazy SQL ze starších protokolů historie dotazů systému.
- Předpona těchto dotazů pomocí
EXPLAIN
příkazu. 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.