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_INDEXES
jsou ,DBA_INDEXES
,USER_INDEXES
aDBA_IND_COL
. Nebo se můžete dotazovat nadba_index_usage
zobrazení nebov$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
,UPDATE
neboDELETE
. Pokud jste definovali aktivační událost, která se aktivuje před příkazemINSERT
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
neboALTER
. 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
NUMBER
VARCHAR
.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.
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.
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 SELECT
jsou , INSERT
, UPDATE
a 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 SELECT
SQL DML , INSERT
a 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ázvemDUAL
, která se skládá z přesně jednoho sloupce s názvemdummy
a jednoho záznamu s hodnotouX
. Systémová tabulka seDUAL
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, jeSELECT sysdate from dual;
. Ekvivalentem Azure Synapse jeSELECT 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ý typemCHAR
VARCHAR
nebo typu řetězce o délce0
. 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 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í 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 OracleDATE
může datový typ ukládat datum i čas. Azure Synapse ukládá datum a čas v samostatnýchDATE
datových typech ,TIME
aDATETIME
. Při migraci sloupců OracleDATE
zkontrolujte, jestli jsou v nich uložené datum a čas, nebo jenom datum. Pokud se v nich uloží jenom datum, namapujte sloupec naDATE
, jinak naDATETIME
.DATE
aritmetika: Oracle podporuje odečtení jednoho data od druhého, napříkladSELECT date '2018-12-31' - date '2018-1201' from dual;
. V Azure Synapse můžete kalendářní data odečíst pomocíDATEDIFF()
funkce , napříkladSELECT 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:
- Zachyťte některé reprezentativní příkazy SQL ze starších protokolů historie dotazů systému.
- Před tyto dotazy zadejte předponu příkazem
EXPLAIN
. - 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.