sql >> Databáze >  >> RDS >> MariaDB

Migrace z databáze Oracle na MariaDB – hluboký ponor

V předchozích blozích jsme diskutovali o tématu Jak migrovat z Oracle na MySQL / Percona Server a naposledy o migraci z Oracle Database na MariaDB – co byste měli vědět.

V průběhu let a jak byly vydávány nové verze MySQL a MariaDB, oba projekty se zcela odchýlily do dvou velmi odlišných platforem RDBMS.

MariaDB a MySQL se nyní od sebe výrazně liší, zejména s příchodem jejich nejnovějších verzí:MySQL 8.0 a MariaDB 10.3 GA a její 10.4 (v současnosti kandidát na RC).

S vydáním MariaDB TX 3.0 překvapila MariaDB mnohé, protože již není náhradní náhradou za MySQL. Zavádí novou úroveň kompatibility s databází Oracle a nyní se stává skutečnou alternativou k Oracle i dalším podnikovým a proprietárním databázím, jako je IBM DB2 nebo EnterpriseDB.

Počínaje verzí MariaDB 10.3 byly zavedeny významné funkce, jako jsou tabulky se systémovou verzí a, co je pro Oracle DBA nejpřitažlivější, podpora pro PL/SQL!

Podle webu MariaDB lze přibližně 80 % starší verze Oracle PL/SQL migrovat bez přepisování kódu. MariaDB má také ColumnStore, což je jejich nový analytický engine a sloupcový úložný modul navržený pro distribuované, masivně paralelní zpracování (MPP), například pro analýzu velkých dat.

Tým MariaDB tvrdě pracoval na přidané podpoře pro PL/SQL. Přidává extra snadnost při migraci na MariaDB od Oracle. Jako referenční bod pro vaši plánovanou migraci můžete zkontrolovat následující referenci z MariaDB. Podle našeho předchozího blogu to nebude pokrývat celkový proces migrace, protože je to dlouhý proces. Doufejme však, že poskytne dostatek základních informací, které vám poslouží jako vodítko pro váš proces migrace.

Strategie plánování a rozvoje

Pro DBA migrace z databáze Oracle do MariaDB znamená migraci mnoho podobných faktorů, které by nemělo být příliš obtížné posunout a přizpůsobit se jim. MariaDB lze provozovat na serveru Windows a má k dispozici binární soubory pro platformu Windows ke stažení. Pokud používáte Oracle pro OLAP (Online Analytical Processing) nebo business intelligence, MariaDB má také ColumnStore, což je ekvivalent úložiště sloupců Database In-Memory společnosti Oracle.

Pokud jste zvyklí mít architekturu Oracle s MAA (maximální dostupná architektura) s Data Guard ++ Oracle RAC (skutečný aplikační klastr), stejně jako MySQL/Percona Server, v MariaDB, můžete si vybrat ze synchronní replikace, semi- synchronizace nebo asynchronní replikace.

Pro vysoce dostupné řešení má MariaDB Maxscale jako hlavní možnost, kterou můžete použít. MaxScale můžete kombinovat s Keepalived a HAProxy. ClusterControl to například dokáže efektivně spravovat a dokonce i s novým produktem MariaDB, MariaDB TX. Podívejte se na náš předchozí blog, kde se dozvíte více o tom, jak to může ClusterControl efektivně spravovat.

Vzhledem k tomu, že MariaDB je open source technologie, je třeba zvážit tuto otázku:„Jak získáme podporu?“

Při výběru možnosti podpory se musíte ujistit, že není omezena na databázi, ale měla by zahrnovat odborné znalosti v oblasti škálovatelnosti, redundance, odolnosti, zálohování, vysoké dostupnosti, zabezpečení, monitorování/pozorovatelnosti, obnovy a zapojení do kritických systémů. . Celkově platí, že nabízená podpora, kterou si vyberete, musí rozumět vašemu architektonickému nastavení, aniž by byla vystavena důvěrnosti vašich dat.

MariaDB má navíc velmi rozsáhlou a spolupracující komunitu po celém světě. Pokud máte problémy a chcete se zeptat lidí zapojených do této komunity, můžete vyzkoušet Freenode přes IRC klienta (Internet Relay Chat), přejít na stránku jejich komunity nebo se připojit k jejich mailing listu.

Posouzení nebo předběžná kontrola

Je třeba zvážit zálohování vašich dat včetně konfigurací nebo instalačních souborů, ladění jádra, automatizačních skriptů:je to samozřejmý úkol, ale před migrací vždy nejprve vše zabezpečte, zvláště když přecházíte na jinou platformu.

Musíte také posoudit, zda vaše aplikace dodržují aktuální konvence softwarového inženýrství, a zajistit, že jsou agnostické pro platformu. Tyto postupy mohou být pro vás přínosem zejména při přechodu na jinou databázovou platformu.

Vzhledem k tomu, že MariaDB je open-source technologie, ujistěte se, že víte, jaké jsou dostupné konektory, které jsou v MariaDB k dispozici. To je nyní docela jednoduché, protože existují různé dostupné klientské knihovny. Zde naleznete seznam těchto klientských knihoven. Kromě toho můžete zkontrolovat také tuto stránku seznamu dostupných klientů a nástrojů.

Nakonec se ujistěte, že máte hardwarové požadavky.

MariaDB nemá specifické požadavky:typický komoditní server může fungovat, ale to závisí na tom, jaký výkon požadujete. Pokud však používáte ColumnStore pro své analytické aplikace nebo aplikace datového skladu, podívejte se na jejich dokumentaci. Převzato z jejich stránky pro AWS to obecně testovali pomocí typů instancí m4.4xlarge jako nákladově efektivní střední cestu. R4.8xlarge byl také testován a funguje přibližně dvakrát rychleji za přibližně dvojnásobnou cenu.

Co byste měli vědět

Stejně jako MySQL, v MariaDB můžete vytvořit více databází, zatímco Oracle nepřichází se stejnou funkčností.

V MariaDB je schéma synonymem pro databázi. V syntaxi MariaDB SQL můžete místo klíčového slova DATABASE nahradit klíčové slovo SCHEMA. Například pomocí CREATE SCHEMA místo CREATE DATABASE; zatímco Oracle má za to vyznamenání. Schéma představuje pouze část databáze:tabulky a další objekty vlastněné jedním uživatelem. Normálně je mezi instancí a databází vztah jedna ku jedné.

Například v ekvivalentu nastavení replikace v Oracle (např. Real Application Clusters nebo RAC) máte více instancí přistupujících k jediné databázi. To vám umožní spustit Oracle na více serverech, přičemž všechny mají přístup ke stejným datům. V MariaDB však můžete povolit přístup k více databázím z vašich více instancí a můžete dokonce odfiltrovat, které databáze/schéma můžete replikovat do uzlu MariaDB.

S odkazem na jeden z našich předchozích blogů (tento a tento) platí stejný princip, když mluvíme o konverzi vaší databáze pomocí dostupných nástrojů dostupných na internetu.

Neexistuje žádný takový nástroj, který by dokázal 100% převést databázi Oracle na MariaDB, ačkoli MariaDB má Red Rover Migration Practice; toto je služba, kterou MariaDB nabízí a není zdarma.

MariaDB hovoří o migraci v Development Bank of Singapore (DBS), která je výsledkem její spolupráce s MariaDB na kompatibilitě Oracle. Dokázala migrovat více než 50 procent svých kriticky důležitých aplikací za pouhých 12 měsíců z databáze Oracle do MariaDB.

Pokud ale hledáte nějaké nástroje, nástroje sqlines, což jsou SQLines SQL Converter a SQLines Data Tool, nabízejí jednoduchou, ale funkční sadu nástrojů.

Následující části dále popisují věci, kterých si musíte být vědomi, pokud jde o migraci a ověření logického výsledku SQL.

Mapování datových typů

MySQL a MariaDB sdílejí stejné dostupné typy dat. I když existují rozdíly v tom, jak je implementována, můžete se podívat na seznam datových typů v MariaDB zde.

Zatímco MySQL používá datový typ JSON, MariaDB se liší, protože je to jen alias datového typu LONGTEXT. MariaDB má také funkci JSON_VALID, kterou lze použít ve výrazu omezení CHECK.

Použiji tedy níže uvedenou tabulkovou prezentaci založenou na informacích zde, protože datové typy z MySQL se oproti MariaDB tolik neliší, ale přidal jsem změny, protože datový typ ROW byl zaveden v MariaDB 10.3. 0 jako součást funkce kompatibility PL/SQL.

Podívejte se na tabulku níže:

Oracle MySQL
1 BFILE Ukazatel na binární soubor, ⇐ 4G VARCHAR(255)
2 BINARY_FLOAT 32bitové číslo s plovoucí desetinnou čárkou PLOVOUCÍ
3 BINARY_DOUBLE 64bitové číslo s plovoucí desetinnou čárkou DVOJNÁSOBKA
4 BLOB Binární velký objekt, ⇐ 4G LONGBLOB
5 CHAR(n), CHARACTER(n) Řetězec pevné délky, 1 ⇐ n ⇐ 255 CHAR(n), CHARACTER(n)
6 CHAR(n), CHARACTER(n) Řetězec pevné délky, 256 ⇐ n ⇐ 2000 VARCHAR(n)
7 CLOB Znak velký objekt, ⇐ 4G LONGTEXT
8 DATUM Datum a čas DATETIME
9 DECIMAL(p,s), DEC(p,s) Číslo s pevnou čárkou DECIMAL(p,s), DEC(p,s)
10 DVOJNÁSOBNÁ PŘESNOST Číslo s plovoucí desetinnou čárkou DVOJNÁSOBNÁ PŘESNOST
11 FLOAT(p) Číslo s plovoucí desetinnou čárkou DVOJNÁSOBKA
12 INTEGER, INT 38místné celé číslo INT DECIMAL(38)
13 INTERVAL ROK(p) DO MĚSÍCE Interval dat VARCHAR(30)
14 INTERVAL DEN(p) AŽ SEKUNDA(y) Den a časový interval VARCHAR(30)
15 DLOUHÉ Údaje o postavách, ⇐ 2G LONGTEXT
16 LONG RAW Binární data, ⇐ 2G LONGBLOB
17 NCHAR(n) Řetězec UTF-8 pevné délky, 1 ⇐ n ⇐ 255 NCHAR(n)
18 NCHAR(n) Řetězec UTF-8 s pevnou délkou, 256 ⇐ n ⇐ 2000 NVARCHAR(n)
19 NCHAR VARYING(n) Řetězec UTF-8 různé délky, 1 ⇐ n ⇐ 4000 NCHAR VARYING(n)
20 NCLOB Řetězec Unicode s proměnnou délkou, ⇐ 4G NVARCHAR(max)
21 NUMBER(p,0), NUMBER(p) 8bitové celé číslo, 1 <=p <3 TINYINT (0 až 255)
16bitové celé číslo, 3 <=p <5 SMALLINT
32bitové celé číslo, 5 <=p <9 INT
64bitové celé číslo, 9 <=p <19 VELKÝ
Číslo s pevnou čárkou, 19 <=p <=38 DECIMAL(p)
22 NUMBER(p,s) Číslo s pevnou čárkou, s> 0 DECIMAL(p,s)
23 ČÍSLO, ČÍSLO(*) Číslo s plovoucí desetinnou čárkou DVOJNÁSOBKA
24 NUMERIC(p,s) Číslo s pevnou čárkou NUMERIC(p,s)
25 NVARCHAR2(n) Řetězec UTF-8 s proměnnou délkou, 1 ⇐ n ⇐ 4000 NVARCHAR(n)
26 RAW(n) Binární řetězec s proměnnou délkou, 1 ⇐ n ⇐ 255 BINARY(n)
27 RAW(n) Binární řetězec s proměnnou délkou, 256 ⇐ n ⇐ 2000 VARBINARY(n)
28 SKUTEČNÉ Číslo s plovoucí desetinnou čárkou DVOJNÁSOBKA
29 ROWID Fyzická adresa řádku CHAR(10)
Pro kompatibilitu s PL/SQL tedy můžete použít ROW ( [{, }. .. ])
30 SMALLINT 38místné celé číslo DECIMAL(38)
31 TIMESTAMP(p) Datum a čas se zlomkem DATETIME(p)
32 TIMESTAMP(p) S ČASOVÝM PÁSEM Datum a čas se zlomkem a časovým pásmem DATETIME(p)
33 UROWID(n) Logické adresy řádků, 1 ⇐ n ⇐ 4000 VARCHAR(n)
34 VARCHAR(n) Řetězec s proměnnou délkou, 1 ⇐ n ⇐ 4000 VARCHAR(n)
35 VARCHAR2(n) Řetězec s proměnnou délkou, 1 ⇐ n ⇐ 4000 VARCHAR(n)
36 XMLTYPE Data XML LONGTEXT

Atributy a možnosti datových typů:

Oracle MySQL
Sémantika velikosti sloupců BYTE a CHAR Velikost je vždy ve znacích

Transakce

MariaDB používá XtraDB z předchozích verzí do 10.1 a od verze 10.2 se přesunula na InnoDB; ačkoli různé úložné moduly mohou být alternativní volbou pro zpracování transakcí, jako je úložný modul MyRocks.

Ve výchozím nastavení má MariaDB proměnnou autocommit nastavenou na ON, což znamená, že musíte explicitně zpracovávat transakční příkazy, abyste mohli využít ROLLBACK pro ignorování změn nebo využití výhod používání SAVEPOINT.

Je to v podstatě stejný koncept, který Oracle používá, pokud jde o odevzdání, vrácení zpět a body uložení.

Pro explicitní transakce to znamená, že musíte použít START TRANSACTION/BEGIN; ; COMMIT; syntaxe.

V opačném případě, pokud musíte deaktivovat autocommit, musíte explicitně COMMIT po celou dobu pro vaše výpisy, které vyžadují změny vašich dat.

Duální stůl

MariaDB má duální kompatibilitu s Oracle, která je určena pro kompatibilitu databází pomocí fiktivní tabulky, konkrétně DUAL. Funguje stejně jako MySQL, kde klauzule FROM není povinná, takže tabulka DUAL není nutná. Tabulka DUAL však nefunguje úplně stejně jako pro Oracle, ale pro jednoduché SELECT v MariaDB je to v pořádku.

To vyhovuje tomu, jak Oracle používá DUAL, takže jakékoli stávající příkazy ve vaší aplikaci, které používají DUAL, nemusí po migraci na MariaDB vyžadovat žádné změny.

Klauzule Oracle FROM je povinná pro každý příkaz SELECT, takže databáze Oracle používá pro příkaz SELECT DUAL tabulku, kde není vyžadován název tabulky.

Viz následující příklad níže:

V Oracle:

SQL> DESC DUAL;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 DUMMY                                              VARCHAR2(1)

SQL> SELECT CURRENT_TIMESTAMP FROM DUAL;
CURRENT_TIMESTAMP
---------------------------------------------------------------------------
16-FEB-19 04.16.18.910331 AM +08:00

Ale v MariaDB:

MariaDB [test]> DESC DUAL;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DUAL' at line 1
MariaDB [test]> SELECT CURRENT_TIMESTAMP FROM DUAL;
+---------------------+
| CURRENT_TIMESTAMP   |
+---------------------+
| 2019-02-27 04:11:01 |
+---------------------+
1 row in set (0.000 sec)

Poznámka:DESC DUAL syntaxe nefunguje v MariaDB a výsledky se také liší, protože CURRENT_TIMESTAMP (používá datový typ TIMESTAMP) v MySQL nezahrnuje časové pásmo.

SYSDATE

Funkce SYSDATE společnosti Oracle je v MariaDB téměř stejná.

MariaDB vrací datum a čas a je to funkce, která vyžaduje () (zavřená a otevřená závorka bez požadovaných argumentů. Abychom to demonstrovali níže, zde jsou Oracle a MariaDB o používání SYSDATE.

V Oracle použití prostého SYSDATE pouze vrátí datum dne bez času. Chcete-li však získat čas a datum, použijte TO_CHAR k převodu data a času do požadovaného formátu; zatímco v MariaDB ji možná nebudete potřebovat k získání data a času, protože vrací obojí.

Viz příklad níže.

V Oracle:

SQL> SELECT TO_CHAR (SYSDATE, 'MM-DD-YYYY HH24:MI:SS') "NOW" FROM DUAL;
NOW
-------------------
02-16-2019 04:39:00

SQL> SELECT SYSDATE FROM DUAL;

SYSDATE
---------
16-FEB-19

Ale v MariaDB:

MariaDB [test]> SELECT SYSDATE() FROM DUAL;
+---------------------+
| SYSDATE()           |
+---------------------+
| 2019-02-27 04:11:57 |
+---------------------+
1 row in set (0.000 sec)

Pokud chcete formátovat datum, MariaDB má funkci DATE_FORMAT().

Další informace naleznete v dokumentaci data a času MariaDB.

TO_DATE

Ekvivalentem TO_DATE společnosti Oracle v MariaDB je funkce STR_TO_DATE().

Je téměř identický s tím v Oracle:vrací datový typ DATE, zatímco v MariaDB vrací datový typ DATETIME.

Oracle:

SQL> SELECT TO_DATE ('20190218121212','yyyymmddhh24miss') as "NOW" FROM DUAL; 
NOW
-------------------------
18-FEB-19

MariaDB:

MariaDB [test]> SELECT STR_TO_DATE('2019-02-18 12:12:12','%Y-%m-%d %H:%i:%s') as "NOW" FROM DUAL;
+---------------------+
| NOW                 |
+---------------------+
| 2019-02-18 12:12:12 |
+---------------------+
1 row in set (0.000 sec)

SYNONYM

MariaDB zatím nemá ekvivalentní funkcionalitu. V současné době, na základě jejich tiketu Jira MDEV-16482, je tento požadavek na přidání SYNONYM stále otevřený a zatím žádné známky pokroku. Doufáme, že to bude začleněno do budoucí verze. Možnou alternativou však může být použití VIEW.

Ačkoli SYNONYM v Oracle lze použít k vytvoření aliasu vzdálené tabulky,

např.

CREATE PUBLIC SYNONYM emp_table FOR [email protected]

V MariaDB můžete využít výhody úložiště CONNECT, které je výkonnější než úložiště FederatedX, protože vám umožňuje připojit různé databázové zdroje. Můžete se podívat na tuto krátkou videoprezentaci.

V manuálové stránce MariaDB je dobrý příklad, který zde nebudu opakovat, protože existují určitá hlediska, se kterými se musíte řídit zejména při používání ODBC. Přečtěte si prosím manuál.

Chování prázdného řetězce a NULL

Vezměte na vědomí, že v MariaDB není prázdný řetězec NULL, zatímco Oracle považuje prázdný řetězec za hodnoty null.

V Oracle:

SQL> SELECT CASE WHEN '' IS NULL THEN 'Yes' ELSE 'No' END AS "Null Eval" FROM dual;
Nul
---
Yes

V MariaDB:

MariaDB [test]> SELECT CASE WHEN '' IS NULL THEN 'Yes' ELSE 'No' END AS "Null Eval" FROM dual;
+-----------+
| Null Eval |
+-----------+
| No        |
+-----------+
1 row in set (0.001 sec)

Sekvence

Od MariaDB 10.3 byly zavedeny sekvence kompatibilní s Oracle a jazyk uložených procedur kompatibilní s Oracle PL/SQL. V MariaDB je vytváření sekvence velmi podobné SEQUENCE společnosti Oracle.

Příklad MariaDB:

CREATE SEQUENCE s START WITH 100 INCREMENT BY 10;
CREATE SEQUENCE s2 START WITH -100 INCREMENT BY -10;

a specifikování funkčních minimálních a maximálních hodnot ukazuje následovně

CREATE SEQUENCE s3 START WITH -100 INCREMENT BY 10 MINVALUE=-100 MAXVALUE=1000;

Funkce řetězce znaků

MariaDB, stejně jako MySQL, má také několik řetězcových funkcí, které jsou příliš dlouhé na to, abychom je zde probírali jeden po druhém. Proto můžete zkontrolovat dokumentaci odtud a porovnat ji s funkcemi řetězců Oracle.

Prohlášení DML

Příkazy Insert/Update/Delete od Oracle jsou v MariaDB shodné.

INSERT ALL/INSERT FIRST společnosti Oracle není podporováno v MariaDB a nikdo dosud neotevřel tento požadavek na funkci ve svém Jira (o kterém vím).

Jinak byste museli své dotazy MySQL uvádět jeden po druhém.

např.

V Oracle:

SQL> INSERT ALL
  INTO CUSTOMERS (customer_id, customer_name, city) VALUES (1000, 'Jase Alagaban', 'Davao City')
  INTO CUSTOMERS (customer_id, customer_name, city) VALUES (2000, 'Maximus Aleksandre Namuag', 'Davao City')
SELECT * FROM dual;
2 rows created.

Ale v MariaDB musíte spustit vkládání jeden po druhém:

MariaDB [test]> INSERT INTO CUSTOMERS (customer_id, customer_name, city) VALUES (1000, 'Jase Alagaban', 'Davao City');
Query OK, 1 row affected (0.02 sec)
MariaDB [test]> INSERT INTO CUSTOMERS (customer_id, customer_name, city) VALUES (2000, 'Maximus Aleksandre Namuag', 'Davao City');
Query OK, 1 row affected (0.00 sec)

INSERT ALL/INSERT FIRST se nedá srovnávat s tím, jak se používá v Oracle, kde můžete využít podmínky přidáním klíčového slova WHEN do své syntaxe; v MariaDB zatím není žádná ekvivalentní možnost.

Proto je vaším alternativním řešením použití procedur.

Vnější spojení symbolu „+“

V současné době z důvodu kompatibility ještě není přítomen v MariaDB. V MariaDB jsem tedy našel spoustu lístků Jira, ale tento je mnohem přesnější, pokud jde o požadavky na funkce. Pro tuto chvíli je tedy vaší alternativní volbou použít syntaxi JOIN. Další informace o tom naleznete v dokumentaci.

ZAČÍT S..CONNECT BY

Oracle používá START WITH..CONNECT BY pro hierarchické dotazy.

Počínaje MariaDB 10.2 zavedli CTE (Common Table Expression), který je navržen tak, aby podporoval generování výsledků hierarchických dat, které používají modely, jako jsou seznamy sousedství nebo modely vnořených množin.

Podobně jako PostgreSQL a MySQL používá MariaDB nerekurzivní a rekurzivní CTE.

Například jednoduchý nerekurzivní, který se používá k porovnání jednotlivců s jejich skupinou:

WITH sales_product_year AS (
SELECT product,
YEAR(ship_date) AS year,
SUM(price) AS total_amt
FROM item_sales
GROUP BY product, year
)

SELECT * 
FROM sales_product_year S1
WHERE
total_amt > 
    (SELECT 0.1 * SUM(total_amt)
     FROM sales_product_year S2
     WHERE S2.year = S1.year)

zatímco rekurzivní CTE (příklad:návrat do autobusových destinací s New Yorkem jako výchozím bodem)

WITH RECURSIVE bus_dst as ( 
    SELECT origin as dst FROM bus_routes WHERE origin='New York' 
  UNION
    SELECT bus_routes.dst FROM bus_routes, bus_dst WHERE bus_dst.dst= bus_routes.origin 
) 
SELECT * FROM bus_dst;

PL/SQL v MariaDB?

Dříve jsme v našem blogu o „Migraci z databáze Oracle na MariaDB – co byste měli vědět“ ukázali, jak mocná je nyní MariaDB, když přidává její soulad s přijetím PL/SQL jako součásti jejího databázového jádra. Kdykoli v MariaDB používáte kompatibilitu PL/SQL, ujistěte se, že jste nastavili SQL_MODE ='Oracle' stejně jako následovně:

SET SQL_MODE='ORACLE';

Nový režim kompatibility pomáhá s následující syntaxí:

  • Smyčková syntaxe
  • Prohlášení o proměnné
  • Konstrukt uložené procedury mimo ANSI
  • Syntaxe kurzoru
  • Parametry uložené procedury
  • Dědičnost typu dat (%TYPE, %ROWTYPE)
  • Výjimky stylu PL/SQL
  • Synonyma pro základní typy SQL (VARCHAR2, NUMBER, …)

Například v Oracle můžete vytvořit balíček, což je objekt schématu, který seskupuje logicky související typy, proměnné a podprogramy PL/SQL. V MariaDB to tedy můžete udělat stejně jako níže:

MariaDB [test]> CREATE OR REPLACE PACKAGE BODY hello AS
    -> 
    ->   vString VARCHAR2(255) := NULL;
    -> 
    ->   -- was declared public in PACKAGE
    ->   PROCEDURE helloFromS9s(pString VARCHAR2) AS
    ->   BEGIN
    ->     SELECT 'Severalnines showing MariaDB Package Procedure in ' || pString || '!' INTO vString FROM dual;
    ->     SELECT vString;
    ->   END;
    -> 
    -> BEGIN
    ->   SELECT 'called only once per connection!';
    -> END hello;
    -> /
Query OK, 0 rows affected (0.021 sec)

MariaDB [test]> 
MariaDB [test]> DECLARE
    ->   vString VARCHAR2(255) := NULL;
    ->   -- CONSTANT seems to be not supported yet by MariaDB
    ->   -- cString CONSTANT VARCHAR2(255) := 'anonymous block';
    ->   cString VARCHAR2(255) := 'anonymous block';
    -> BEGIN
    ->   CALL hello.helloFromS9s(cString);
    -> END;
    -> /
+----------------------------------+
| called only once per connection! |
+----------------------------------+
| called only once per connection! |
+----------------------------------+
1 row in set (0.000 sec)

+--------------------------------------------------------------------+
| vString                                                            |
+--------------------------------------------------------------------+
| Severalnines showing MariaDB Package Procedure in anonymous block! |
+--------------------------------------------------------------------+
1 row in set (0.000 sec)

Query OK, 1 row affected (0.000 sec)

MariaDB [test]> 
MariaDB [test]> DELIMITER ;

Oracle PL/SQL je však kompilován před spuštěním, když je načten na server. Ačkoli to MariaDB ve svém manuálu neříká, předpokládám, že přístup je stejný jako u MySQL, kde je kompilován a ukládán do mezipaměti, když je vyvolán.

Nástroje pro migraci

Jak uvedl můj kolega Bart v našem předchozím blogu zde, nástroje sqlines, což jsou SQLines SQL Converter a SQLines Data Tool, mohou také poskytnout pomoc jako součást vaší migrace.

MariaDB má svou službu Red Rover Migration Practice, kterou můžete využít.

Celkově není migrace Oracle na MariaDB tak snadná jako migrace na MySQL/Percona, která by mohla přinést více problémů než MariaDB; zejména v MySQL neexistuje žádná kompatibilita s PL/SQL.

Každopádně pokud najdete nebo znáte nějaké nástroje, které považujete za užitečné a přínosné pro migraci z Oracle na MariaDB, zanechte prosím komentář na tomto blogu!

Testování

Stejně jako to, co jsem uvedl v tomto blogu, dovolte mi zde něco z toho zopakovat.

V rámci vašeho plánu migrace je testování životně důležitým úkolem, který hraje velmi důležitou roli a ovlivňuje vaše rozhodnutí ohledně migrace.

Nástroj dbdeployer (náhrada MySQL Sandbox) je velmi užitečný nástroj, který můžete využít. To je pro vás docela snadné vyzkoušet a otestovat různé přístupy a ušetří vám to čas, spíše než nastavování celého zásobníku, pokud je vaším účelem nejprve vyzkoušet a otestovat platformu RDBMS.

K testování vašich uložených rutin SQL (funkcí nebo procedur), spouštěčů, událostí vám doporučuji použít tyto nástroje mytap nebo Google Unit Testing Framework.

Nástroje Percona mohou být stále užitečné a lze je začlenit do vašich DBA nebo inženýrských úkolů i s MariaDB. Pokladna Percona Toolkit zde. Můžete si vybrat nástroje podle svých potřeb, zejména pro úlohy testování a produkčního použití.

Celkově vzato, věci, které musíte mít na paměti jako své pokyny při provádění testu serveru MariaDB, jsou:

  • Po instalaci je třeba zvážit provedení určitého doladění. Podívejte se na náš webinář o vyladění serveru MariaDB.
  • Proveďte několik srovnávacích testů a zátěžových testů pro nastavení konfigurace na aktuálním uzlu. Podívejte se na mysqlslap a sysbench, které vám s tím mohou pomoci. Podívejte se také na náš blog „Jak srovnávat výkon MySQL a MariaDB pomocí SysBench“.
  • Zkontrolujte, zda jsou vaše DDL správně definovány, jako jsou datové typy, omezení, seskupené a sekundární indexy nebo oddíly, pokud nějaké máte.
  • Zkontrolujte svůj DML, zejména pokud je syntaxe správná a ukládá data správně podle očekávání.
  • Podívejte se na své uložené rutiny, události a spouštěče, abyste se ujistili, že se spouští/vrací očekávané výsledky.
  • Ověřte, zda jsou vaše spuštěné dotazy výkonné. Navrhuji, abyste využili nástrojů s otevřeným zdrojovým kódem nebo vyzkoušeli náš produkt ClusterControl. Nabízí monitorování/pozorovatelnost zejména vašeho clusteru MariaDB. Podívejte se na tento předchozí blog, ve kterém předvádíme, jak vám ClusterControl může pomoci spravovat MariaDB TX 3.0. Zde můžete použít ClusterControl ke sledování vašich dotazů a jejich plánu dotazů, abyste se ujistili, že jsou výkonné.

  1. Na obranu sar (a jak jej nakonfigurovat)

  2. Limit položky 1000 položek SQL IN

  3. Nastavení fyzického pohotovostního režimu Active Data Guard v architektuře RAC One Node – část 2

  4. Jak omezit výsledky v MySQL, PostgreSQL a SQLite