sql >> Database >  >> RDS >> MariaDB

Migratie van Oracle Database naar MariaDB - een diepe duik

In eerdere blogs bespraken we het onderwerp Migreren van Oracle naar MySQL / Percona Server en meest recentelijk Migreren van Oracle Database naar MariaDB - wat u moet weten.

In de loop der jaren en toen nieuwe versies van MySQL en MariaDB werden uitgebracht, zijn beide projecten volledig afgeweken in twee zeer verschillende RDBMS-platforms.

MariaDB en MySQL verschillen nu aanzienlijk van elkaar, vooral met de komst van hun meest recente versies:MySQL 8.0 en MariaDB 10.3 GA en zijn 10.4 (momenteel RC-kandidaat).

Met de release MariaDB TX 3.0 verraste MariaDB velen omdat het niet langer een drop-in vervanging is voor MySQL. Het introduceert een nieuw niveau van compatibiliteit met de Oracle-database en wordt nu een echt alternatief voor Oracle en andere enterprise- en propriëtaire databases zoals IBM DB2 of EnterpriseDB.

Vanaf MariaDB versie 10.3 zijn er belangrijke functies geïntroduceerd, zoals tabellen met systeemversies en, wat het meest aantrekkelijk is voor Oracle DBA's, ondersteuning voor PL/SQL!

Volgens de MariaDB-website kan ongeveer 80% van de legacy Oracle PL/SQL worden gemigreerd zonder de code te herschrijven. MariaDB heeft ook ColumnStore, hun nieuwe analyse-engine en een kolomvormige opslag-engine die is ontworpen voor gedistribueerde, massaal parallelle verwerking (MPP), zoals voor big data-analyse.

Het MariaDB-team heeft hard gewerkt voor de toegevoegde ondersteuning voor PL/SQL. Het voegt extra gemak toe bij het migreren naar MariaDB vanuit Oracle. Als referentiepunt voor uw geplande migratie kunt u de volgende referentie van MariaDB raadplegen. Zoals aangegeven in onze vorige blog, zal dit niet het algehele migratieproces omvatten, omdat het een lang proces is. Maar hopelijk biedt het voldoende achtergrondinformatie om als leidraad te dienen voor uw migratieproces.

Plannings- en ontwikkelingsstrategie

Voor de DBA betekent een migratie van de Oracle-database naar MariaDB, een dergelijke migratie veel vergelijkbare factoren die niet al te moeilijk moeten zijn om over te schakelen en aan te passen. MariaDB kan worden gebruikt op een Windows-server en heeft binaire bestanden beschikbaar voor het Windows-platform om te downloaden. Als u Oracle voor OLAP (Online Analytical Processing) of business intelligence gebruikt, heeft MariaDB ook de ColumnStore, wat het equivalent is van Oracle's Database In-Memory column store.

Als u gewend bent een Oracle-architectuur te hebben met MAA (Maximum Available Architecture) met Data Guard ++ Oracle RAC (Real Application Cluster), hetzelfde als MySQL/Percona Server, in MariaDB, kunt u kiezen uit een synchrone replicatie, semi- synchronisatie of een asynchrone replicatie.

Voor een zeer beschikbare oplossing heeft MariaDB Maxscale als uw belangrijkste optie die u kunt gebruiken. Je kunt MaxScale mixen met Keepalive en HAProxy. ClusterControl kan dit bijvoorbeeld efficiënt beheren en zelfs met de nieuwe komst van MariaDB's product, MariaDB TX. Bekijk onze vorige blog voor meer informatie over hoe ClusterControl dit efficiënt kan beheren.

Aangezien MariaDB een open source-technologie is, moet deze vraag worden overwogen:"Hoe krijgen we ondersteuning?"

U moet er bij het kiezen van een ondersteuningsoptie voor zorgen dat deze niet beperkt is tot de database, maar expertise moet omvatten op het gebied van schaalbaarheid, redundantie, veerkracht, back-ups, hoge beschikbaarheid, beveiliging, monitoring/waarneembaarheid, herstel en betrokkenheid bij bedrijfskritische systemen . Over het algemeen moet het ondersteuningsaanbod dat u kiest inzicht geven in uw architecturale opstelling zonder de vertrouwelijkheid van uw gegevens bloot te stellen.

Bovendien heeft MariaDB een zeer grote en samenwerkende gemeenschap over de hele wereld. Als je problemen ervaart en mensen die betrokken zijn bij deze community wilt vragen, kun je Freenode proberen via de IRC-client (Internet Relay Chat), naar hun communitypagina gaan of lid worden van hun mailinglijst.

Beoordeling of voorafgaande controle

Het maken van een back-up van uw gegevens, inclusief configuraties of installatiebestanden, kernelafstemmingen, automatiseringsscripts moet worden overwogen:het is een voor de hand liggende taak, maar voordat u migreert, moet u altijd eerst alles beveiligen, vooral wanneer u naar een ander platform verhuist.

U moet ook beoordelen of uw applicaties de up-to-date software-engineeringconventies volgen en ervoor zorgen dat ze platformonafhankelijk zijn. Deze praktijken kunnen in uw voordeel zijn, vooral wanneer u naar een ander databaseplatform verhuist.

Aangezien MariaDB een open-sourcetechnologie is, moet u ervoor zorgen dat u weet wat de beschikbare connectoren zijn die beschikbaar zijn in MariaDB. Dit is op dit moment vrij eenvoudig, aangezien er verschillende beschikbare clientbibliotheken zijn. Kijk hier voor een lijst van deze clientbibliotheken. Afgezien daarvan kunt u ook deze lijst met beschikbare Clients en Utilities-pagina bekijken.

Zorg ten slotte voor uw hardwarevereisten.

MariaDB heeft geen specifieke vereisten:een typische commodity-server kan werken, maar dat hangt af van hoeveel prestaties je nodig hebt. Als u echter betrokken bent bij ColumnStore voor uw analytische toepassingen of datawarehouse-toepassingen, bekijk dan hun documentatie. Genomen van hun pagina, voor AWS, hebben ze dit over het algemeen getest met behulp van m4.4xgrote instantietypen als een kosteneffectieve middenweg. De R4.8xlarge is ook getest en presteert ongeveer twee keer zo snel voor ongeveer twee keer de prijs.

Wat u moet weten

Hetzelfde als MySQL, in MariaDB kunt u meerdere databases maken, terwijl Oracle niet met dezelfde functionaliteit komt.

In MariaDB is een schema synoniem met een database. U kunt het trefwoord SCHEMA in plaats van DATABASE vervangen in de MariaDB SQL-syntaxis. Gebruik bijvoorbeeld SCHEMA MAKEN in plaats van DATABASE MAKEN; terwijl Oracle hier een onderscheiding voor heeft. Een schema vertegenwoordigt slechts een deel van een database:de tabellen en andere objecten die eigendom zijn van een enkele gebruiker. Normaal gesproken is er een één-op-één relatie tussen de instantie en de database.

In een replicatie-installatie-equivalent in Oracle (bijv. Real Application Clusters of RAC) hebben uw meerdere instanties bijvoorbeeld toegang tot één enkele database. Hierdoor kunt u Oracle starten op meerdere servers, die allemaal toegang hebben tot dezelfde gegevens. In MariaDB kunt u echter toegang verlenen tot meerdere databases vanuit uw meerdere instanties en zelfs filteren welke databases/schema's u naar een MariaDB-knooppunt kunt repliceren.

Verwijzend naar een van onze eerdere blogs (deze en deze), geldt hetzelfde principe als je spreekt over het converteren van je database met beschikbare tools op internet.

Er is geen dergelijke tool die de Oracle-database 100% kan converteren naar MariaDB, hoewel MariaDB Red Rover Migration Practice heeft; dit is een service die MariaDB aanbiedt en het is niet gratis.

MariaDB vertelt over migratie bij Development Bank of Singapore (DBS), naar aanleiding van de samenwerking met MariaDB op het gebied van Oracle-compatibiliteit. Het is erin geslaagd meer dan 50 procent van zijn bedrijfskritieke applicaties in slechts 12 maanden te migreren van Oracle Database naar MariaDB.

Maar als u op zoek bent naar tools, dan bieden sqlines-tools, SQLines SQL Converter en SQLines Data Tool, een eenvoudige maar operationele set tools.

In de volgende paragrafen hieronder wordt nader uiteengezet waar u op moet letten als het gaat om migratie en het verifiëren van het logische SQL-resultaat.

Gegevenstypetoewijzing

MySQL en MariaDB delen dezelfde beschikbare gegevenstypen. Hoewel er variaties zijn in de manier waarop het wordt geïmplementeerd, kunt u hier de lijst met gegevenstypen in MariaDB bekijken.

Hoewel MySQL het JSON-gegevenstype gebruikt, verschilt MariaDB omdat het slechts een alias is van het LONGTEXT-gegevenstype. MariaDB heeft ook een functie, JSON_VALID, die kan worden gebruikt binnen de beperkingsexpressie CHECK.

Daarom zal ik gebruik maken van deze tabelpresentatie hieronder op basis van de informatie hier, aangezien data-types van MySQL tegen MariaDB niet zo veel afwijken, maar ik heb wijzigingen toegevoegd aangezien het ROW-datatype is geïntroduceerd in MariaDB 10.3. 0 als onderdeel van de PL/SQL-compatibiliteitsfunctie.

Bekijk de onderstaande tabel:

Oracle MySQL
1 BFILE Aanwijzer naar binair bestand, ⇐ 4G VARCHAR(255)
2 BINARY_FLOAT 32-bits getal met drijvende komma FLOAT
3 BINARY_DOUBLE 64-bits getal met drijvende komma DUBBEL
4 BLOB Binair groot object, ⇐ 4G LONGBLOB
5 CHAR(n), CHARACTER(n) Tekenreeks met vaste lengte, 1 ⇐ n ⇐ 255 CHAR(n), CHARACTER(n)
6 CHAR(n), CHARACTER(n) Snaar met vaste lengte, 256 ⇐ n ⇐ 2000 VARCHAR(n)
7 CLOB Karakter groot object, ⇐ 4G LONGTEXT
8 DATUM Datum en tijd DATETIME
9 DECIMAAL(p,s), DEC(p,s) Vast nummer DECIMAAL(p,s), DEC(p,s)
10 DUBBELE PRECISIE Drijvende-kommagetal DUBBELE PRECISIE
11 FLOAT(p) Drijvende-kommagetal DUBBEL
12 INTEGER, INT 38 cijfers geheel getal INT DECIMAAL(38)
13 INTERVAL JAAR(p) TOT MAAND Datuminterval VARCHAR(30)
14 INTERVALDAG(p) TOT SECOND(EN) Dag en tijdsinterval VARCHAR(30)
15 LANG Karaktergegevens, ⇐ 2G LONGTEXT
16 LANG RAUW Binaire gegevens, ⇐ 2G LONGBLOB
17 NCHAR(n) UTF-8-tekenreeks met vaste lengte, 1 ⇐ n ⇐ 255 NCHAR(n)
18 NCHAR(n) UTF-8-tekenreeks met vaste lengte, 256 ⇐ n ⇐ 2000 NVARCHAR(n)
19 NCHAR VARYING(n) UTF-8-tekenreeks met verschillende lengtes, 1 ⇐ n ⇐ 4000 NCHAR VARIANT(n)
20 NCLOB Unicode-tekenreeks met variabele lengte, ⇐ 4G NVARCHAR(max)
21 NUMBER(p,0), NUMBER(p) 8-bits geheel getal, 1 <=p <3 TINYINT (0 tot 255)
16-bits geheel getal, 3 <=p <5 KLEIN
32-bits geheel getal, 5 <=p <9 INT
64-bits geheel getal, 9 <=p <19 BIGINT
Vast punt, 19 <=p <=38 DECIMAAL(p)
22 NUMBER(p,s) Vast punt, s> 0 DECIMAAL(p,s)
23 NUMMER, NUMBER(*) Drijvende-kommagetal DUBBEL
24 NUMERIEK(p,s) Vast nummer NUMERIEK(p,s)
25 NVARCHAR2(n) UTF-8-tekenreeks met variabele lengte, 1 ⇐ n ⇐ 4000 NVARCHAR(n)
26 RAW(n) Binaire string met variabele lengte, 1 ⇐ n ⇐ 255 BINAIR(n)
27 RAW(n) Binaire string met variabele lengte, 256 ⇐ n ⇐ 2000 VARBINARY(n)
28 ECHT Drijvende-kommagetal DUBBEL
29 ROWID Fysiek rijadres CHAR(10)
Daarom kunt u voor PL/SQL-compatibiliteit ROW gebruiken ( [{, }. .. ])
30 KLEIN 38 cijfers geheel getal DECIMAAL (38)
31 TIMESTAMP(p) Datum en tijd met breuk DATETIME(p)
32 TIMESTAMP(p) MET TIJDZONE Datum en tijd met breuk en tijdzone DATUMTIJD(p)
33 UROWID(n) Logische rijadressen, 1 ⇐ n ⇐ 4000 VARCHAR(n)
34 VARCHAR(n) Snaar met variabele lengte, 1 ⇐ n ⇐ 4000 VARCHAR(n)
35 VARCHAR2(n) Snaar met variabele lengte, 1 ⇐ n ⇐ 4000 VARCHAR(n)
36 XMLTYPE XML-gegevens LONGTEXT

Gegevenstype attributen en opties:

Oracle MySQL
Semantiek van kolomgrootte BYTE en CHAR Grootte is altijd in tekens

Transacties

MariaDB gebruikt XtraDB van eerdere versies tot 10.1 en verschoven naar InnoDB vanaf versie 10.2; hoewel verschillende opslagengines een alternatieve keuze kunnen zijn voor het afhandelen van transacties, zoals de MyRocks-opslagengine.

Standaard heeft MariaDB de autocommit-variabele ingesteld op ON, wat betekent dat u expliciet transactie-instructies moet afhandelen om te profiteren van ROLLBACK voor het negeren van wijzigingen of het profiteren van het gebruik van SAVEPOINT.

Het is eigenlijk hetzelfde concept dat Oracle gebruikt in termen van commit, rollbacks en savepoints.

Voor expliciete transacties betekent dit dat u de START TRANSACTIE/BEGIN; ; COMMIT; syntaxis.

Anders, als u autocommit moet uitschakelen, moet u altijd expliciet COMMIT maken voor uw verklaringen waarvoor wijzigingen in uw gegevens nodig zijn.

Dubbele tafel

MariaDB heeft de dubbele compatibiliteit met Oracle die bedoeld is voor compatibiliteit van databases met behulp van een dummy-tabel, namelijk DUAL. Het werkt precies hetzelfde als MySQL waar de FROM-clausule niet verplicht is, dus de DUAL-tabel is niet nodig. De DUAL-tabel werkt echter niet precies hetzelfde als voor Oracle, maar voor eenvoudige SELECT's in MariaDB is dit prima.

Dit past bij Oracle's gebruik van DUAL, dus alle bestaande instructies in uw applicatie die DUAL gebruiken, hoeven bij migratie naar MariaDB mogelijk niet te worden gewijzigd.

De Oracle FROM-clausule is verplicht voor elke SELECT-instructie, dus Oracle-database gebruikt DUAL-tabel voor SELECT-instructie waar een tabelnaam niet vereist is.

Zie het volgende voorbeeld hieronder:

In Orakel:

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

Maar in 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)

Opmerking:de DESC DUAL syntaxis werkt niet in MariaDB en de resultaten verschillen ook, aangezien CURRENT_TIMESTAMP (gebruikt TIMESTAMP-gegevenstype) in MySQL de tijdzone niet bevat.

SYSDATUM

De SYSDATE-functie van Oracle is bijna hetzelfde in MariaDB.

MariaDB retourneert datum en tijd en het is een functie die () . vereist (haakjes sluiten en openen zonder dat er argumenten nodig zijn. Om dit hieronder te demonstreren, volgen hier Oracle en MariaDB over het gebruik van SYSDATE.

In Oracle retourneert het gebruik van gewone SYSDATE alleen de datum van de dag zonder de tijd. Maar om de tijd en datum te krijgen, gebruik TO_CHAR om de datum-tijd om te zetten in het gewenste formaat; terwijl je het in MariaDB misschien niet nodig hebt om de datum en de tijd te krijgen, omdat het beide retourneert.

Zie voorbeeld hieronder.

In Orakel:

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

Maar in MariaDB:

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

Als je de datum wilt opmaken, heeft MariaDB een DATE_FORMAT()-functie.

U kunt de datum- en tijddocumentatie van MariaDB raadplegen voor meer informatie.

TO_DATE

Oracle's TO_DATE-equivalent in MariaDB is de STR_TO_DATE()-functie.

Het is bijna identiek aan die in Oracle:het retourneert het DATE-gegevenstype, terwijl het in MariaDB het DATETIME-gegevenstype retourneert.

Orakel:

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)

SYNONIEM

MariaDB heeft hier nog geen gelijkwaardige functionaliteit voor. Op dit moment, op basis van hun Jira-ticket MDEV-16482, is dit functieverzoek om SYNONYM toe te voegen nog steeds open en op dit moment is er nog geen teken van vooruitgang. We hopen dat dit in de toekomstige release zal worden opgenomen. Een mogelijk alternatief zou echter het gebruik van VIEW kunnen zijn.

Hoewel SYNONYM in Oracle kan worden gebruikt om een ​​alias van een externe tabel te maken,

bijv.

CREATE PUBLIC SYNONYM emp_table FOR [email protected]

In MariaDB kunt u profiteren van het gebruik van de CONNECT-opslagengine die krachtiger is dan de FederatedX-opslagengine, omdat u hiermee verschillende databasebronnen kunt verbinden. Je kunt deze korte videopresentatie bekijken.

Er is een goed voorbeeld in de handleiding van MariaDB, die ik hier niet zal herhalen omdat er bepaalde overwegingen zijn waaraan u moet voldoen, vooral bij het gebruik van ODBC. Raadpleeg de handleiding.

Gedrag van lege string en NULL

Houd er rekening mee dat in MariaDB de lege tekenreeks niet NULL is, terwijl Oracle de lege tekenreeks als null-waarden behandelt.

In Orakel:

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

In 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)

Sequenties

Sinds MariaDB 10.3 zijn Oracle-compatibele sequenties en een opgeslagen proceduretaal geïntroduceerd die compatibel is met Oracle PL/SQL. In MariaDB is het maken van een reeks vrij gelijkaardig aan de SEQUENTIE van Oracle.

MariaDB's voorbeeld:

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

en het specificeren van werkbare minimum- en maximumwaarden wordt als volgt weergegeven

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

Tekenreeksfuncties

MariaDB, hetzelfde als MySQL, heeft ook een handvol tekenreeksfuncties die te lang zijn om hier één voor één te bespreken. Daarom kunt u de documentatie hier controleren en dit vergelijken met de stringfuncties van Oracle.

DML-verklaringen

Insert/Update/Delete statements van Oracle zijn congruent in MariaDB.

Oracle's INSERT ALL/INSERT FIRST wordt niet ondersteund in MariaDB en niemand heeft dit functieverzoek nog geopend in hun Jira (voor zover ik weet).

Anders moet u uw MySQL-query's één voor één opgeven.

bijv.

In Orakel:

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.

Maar in MariaDB moet u de invoegtoepassing één voor één uitvoeren:

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)

De INSERT ALL/INSERT FIRST is niet te vergelijken met hoe het wordt gebruikt in Oracle, waar u kunt profiteren van voorwaarden door een WHEN-sleutelwoord in uw syntaxis toe te voegen; er is op dit moment geen gelijkwaardige optie in MariaDB.

Daarom is uw alternatieve oplossing hiervoor het gebruik van procedures.

Buitenste joins "+"-symbool

Momenteel is het voor compatibiliteit nog niet aanwezig in MariaDB. Daarom zijn er veel Jira-tickets die ik in MariaDB heb gevonden, maar deze is veel nauwkeuriger in termen van functieverzoeken. Daarom is uw alternatieve keuze voor deze tijd om de JOIN-syntaxis te gebruiken. Raadpleeg de documentatie voor meer informatie hierover.

BEGIN MET..VERBINDEN DOOR

Oracle gebruikt START WITH..CONNECT BY voor hiërarchische zoekopdrachten.

Vanaf MariaDB 10.2 introduceerden ze CTE (Common Table Expression) dat is ontworpen om generaties hiërarchische gegevensresultaten te ondersteunen, die modellen gebruiken zoals aangrenzende lijsten of geneste set-modellen.

Net als PostgreSQL en MySQL gebruikt MariaDB niet-recursieve en recursieve CTE's.

Bijvoorbeeld een eenvoudige niet-recursieve die wordt gebruikt om individuen te vergelijken met hun groep:

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)

terwijl een recursieve CTE (voorbeeld:retourneer de busbestemmingen met New York als vertrekpunt)

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 in MariaDB?

Eerder, in onze blog over "Migreren van Oracle Database naar MariaDB - wat u moet weten", hebben we laten zien hoe krachtig het nu is in MariaDB door de naleving toe te voegen om PL/SQL te gebruiken als onderdeel van de database-kernel. Wanneer je PL/SQL-compatibiliteit in MariaDB gebruikt, zorg er dan voor dat je SQL_MODE ='Oracle' hebt ingesteld net als als volgt:

SET SQL_MODE='ORACLE';

De nieuwe compatibiliteitsmodus helpt met de volgende syntaxis:

  • Lussyntaxis
  • Variabele declaratie
  • Constructie van niet-ANSI opgeslagen procedure
  • Cursorsyntaxis
  • Opgeslagen procedureparameters
  • Overerving van gegevenstype (%TYPE, %ROWTYPE)
  • PL/SQL-stijluitzonderingen
  • Synoniemen voor Basic SQL Types (VARCHAR2, NUMBER, …)

In Oracle kunt u bijvoorbeeld een pakket maken, een schemaobject dat logisch gerelateerde PL/SQL-typen, variabelen en subprogramma's groepeert. Daarom kunt u het in MariaDB net als hieronder doen:

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's PL/SQL wordt echter vóór uitvoering gecompileerd wanneer het in de server wordt geladen. Hoewel MariaDB dit niet in hun handleiding zegt, neem ik aan dat de aanpak hetzelfde is als MySQL, waar het wordt gecompileerd en opgeslagen in de cache wanneer het wordt aangeroepen.

Migratietools

Zoals mijn collega Bart in onze vorige blog hier aangaf, kunnen sqlines-tools, SQLines SQL Converter en SQLines Data Tool, ook hulp bieden als onderdeel van uw migratie.

MariaDB heeft hun Red Rover Migration Practice-service waarvan u kunt profiteren.

Over het algemeen is de migratie van Oracle naar MariaDB niet zo eenvoudig als de migratie naar MySQL/Percona, wat voor meer uitdagingen zou kunnen zorgen dan MariaDB; vooral geen PL/SQL-compatibiliteit bestaat in MySQL.

Hoe dan ook, als je tools vindt of kent die je nuttig en nuttig vindt voor het migreren van Oracle naar MariaDB, laat dan alsjeblieft een reactie achter op deze blog!

Testen

Hetzelfde als wat ik in deze blog heb gezegd, sta me toe een deel ervan hier te herhalen.

Als onderdeel van uw migratieplan is testen een essentiële taak die een zeer belangrijke rol speelt en van invloed is op uw beslissing met betrekking tot migratie.

De tool dbdeployer (een vervanging van MySQL Sandbox) is een zeer handige tool waar je je voordeel mee kunt doen. Dit is vrij eenvoudig voor u om verschillende benaderingen te proberen en te testen en bespaart u tijd, in plaats van de hele stapel in te stellen als het uw doel is om eerst het RDBMS-platform te testen.

Voor het testen van uw in SQL opgeslagen routines (functies of procedures), triggers, gebeurtenissen, raad ik u aan deze tools mytap of het Unit Testing Framework van Google te gebruiken.

Percona-tools kunnen nog steeds nuttig zijn en kunnen zelfs met MariaDB worden opgenomen in uw DBA- of engineeringtaken. Bekijk hier de Percona Toolkit. U kunt de tools kiezen op basis van uw behoeften, met name voor test- en productiegebruikstaken.

Over het algemeen zijn dingen die u in gedachten moet houden als uw richtlijnen bij het doen van een test voor uw MariaDB Server:

  • Na je installatie moet je overwegen om af te stemmen. Bekijk onze webinar over het afstemmen van uw MariaDB-server.
  • Doe een aantal benchmarks en stress-load-tests voor uw configuratie-instellingen op uw huidige node. Check mysqlslap en sysbench die je hierbij kunnen helpen. Bekijk ook onze blog "Hoe de prestaties van MySQL &MariaDB te benchmarken met SysBench".
  • Controleer uw DDL's of ze correct zijn gedefinieerd, zoals gegevenstypes, beperkingen, geclusterde en secundaire indexen of partities, als u die heeft.
  • Controleer uw DML, vooral als de syntaxis correct is en de gegevens correct opslaat zoals verwacht.
  • Bekijk uw opgeslagen routines, gebeurtenissen, trigger om ervoor te zorgen dat ze de verwachte resultaten uitvoeren/retourneren.
  • Controleer of uw uitgevoerde query's goed werken. Ik raad u aan gebruik te maken van open-sourcetools of ons ClusterControl-product te proberen. Het biedt monitoring/waarneming, met name van uw MariaDB-cluster. Bekijk deze vorige blog waarin we laten zien hoe ClusterControl u kan helpen bij het beheren van MariaDB TX 3.0. U kunt ClusterControl hier gebruiken om uw query's en het bijbehorende queryplan te controleren om er zeker van te zijn dat ze presteren.

  1. JSON_OBJECT() - Maak een JSON-object van een lijst met sleutel-/waardeparen in MySQL

  2. Alleen-lezen routering voor een Always On

  3. SQL Union – Een uitgebreide gids over de UNION-operator

  4. Zoeken naar alle exemplaren van een tekenreeks in een mysql-database