sql >> Databasteknik >  >> RDS >> MariaDB

Migration från Oracle Database till MariaDB - A Deep Dive

I tidigare bloggar diskuterade vi ämnet Hur man migrerar från Oracle till MySQL / Percona Server och nu senast Migrera från Oracle Database till MariaDB - Vad du bör veta.

Under årens lopp och när nya versioner av MySQL och MariaDB släpptes, har båda projekten avvikit helt och hållet till två mycket olika RDBMS-plattformar.

MariaDB och MySQL skiljer sig nu avsevärt från varandra, särskilt med ankomsten av deras senaste versioner:MySQL 8.0 och MariaDB 10.3 GA och dess 10.4 (för närvarande RC-kandidat).

Med releasen MariaDB TX 3.0 överraskade MariaDB många eftersom det inte längre är en drop-in-ersättning för MySQL. Den introducerar en ny nivå av kompatibilitet med Oracle-databasen och håller nu på att bli ett verkligt alternativ till Oracle såväl som andra företags- och egenutvecklade databaser som IBM DB2 eller EnterpriseDB.

Från och med MariaDB version 10.3 har betydande funktioner introducerats som systemversionsbaserade tabeller och, vad som är mest tilltalande för Oracle DBA:er, stöd för PL/SQL!

Enligt MariaDB-webbplatsen kan cirka 80 % av den äldre Oracle PL/SQL migreras utan att skriva om koden. MariaDB har också ColumnStore, som är deras nya analysmotor och en kolumnär lagringsmotor designad för distribuerad, massivt parallell bearbetning (MPP), såsom för big data-analys.

MariaDB-teamet har arbetat hårt för det extra stödet för PL/SQL. Det gör det extra lätt att migrera till MariaDB från Oracle. Som referenspunkt för din planerade migrering kan du kontrollera följande referens från MariaDB. Enligt vår tidigare blogg kommer detta inte att täcka den övergripande migrationsprocessen, eftersom det är en lång process. Men det kommer förhoppningsvis att ge tillräckligt med bakgrundsinformation för att fungera som en guide för din migreringsprocess.

Planerings- och utvecklingsstrategi

För DBA, migrering från Oracle-databasen till MariaDB, innebär en sådan migrering många liknande faktorer som inte borde vara alltför svåra att flytta och anpassa sig till. MariaDB kan drivas i Windows-server och har binärfiler tillgängliga för Windows-plattformen för nedladdning. Om du använder Oracle för OLAP (Online Analytical Processing) eller business intelligence, har MariaDB även ColumnStore, som är motsvarigheten till Oracles Database In-Memory kolumnlager.

Om du är van vid att ha en Oracle-arkitektur med MAA (Maximum Available Architecture) med Data Guard ++ Oracle RAC (Real Application Cluster), samma som MySQL/Percona Server, i MariaDB, kan du välja från en synkron replikering, semi- sync, eller en asynkron replikering.

För en mycket tillgänglig lösning har MariaDB Maxscale som ditt huvudalternativ du kan använda. Du kan blanda MaxScale med Keepalved och HAProxy. ClusterControl kan till exempel hantera detta effektivt och även med den nya ankomsten av MariaDBs produkt, MariaDB TX. Se vår tidigare blogg för att lära dig mer om hur ClusterControl effektivt kan hantera detta.

Eftersom MariaDB är en teknologi med öppen källkod kan denna fråga övervägas:"Hur får vi support?"

Du måste se till när du väljer ett supportalternativ att det inte är begränsat till databasen, utan det bör täcka expertis inom skalbarhet, redundans, resiliens, säkerhetskopiering, hög tillgänglighet, säkerhet, övervakning/observerbarhet, återställning och engagemang i verksamhetskritiska system . Sammantaget måste det supporterbjudande du väljer komma med en förståelse för din arkitektoniska konfiguration utan att avslöja konfidentialitet för dina data.

Dessutom har MariaDB en mycket stor och samarbetsgrupp över hela världen. Om du upplever problem och vill fråga personer som är involverade i den här communityn kan du prova Freenode via IRC-klient (Internet Relay Chat), gå till deras community-sida eller gå med i deras e-postlista.

Utvärdering eller preliminär kontroll

Säkerhetskopiering av dina data inklusive konfigurationer eller installationsfiler, kärnjusteringar, automatiseringsskript måste övervägas:det är en självklar uppgift, men innan du migrerar, säkra alltid allt först, särskilt när du flyttar till en annan plattform.

Du måste också bedöma att dina applikationer följer uppdaterade programvarukonstruktionskonventioner och se till att de är plattformsognostiska. Dessa metoder kan vara till din fördel, särskilt när du flyttar till en annan databasplattform.

Eftersom MariaDB är en teknologi med öppen källkod, se till att du vet vilka tillgängliga anslutningar som är tillgängliga i MariaDB. Detta är ganska enkelt just nu eftersom det finns olika tillgängliga klientbibliotek. Kolla här för en lista över dessa klientbibliotek. Bortsett från det kan du också kontrollera den här listan över tillgängliga klienter och verktygssida.

Se till sist till dina hårdvarukrav.

MariaDB har inga specifika krav:en typisk råvaruserver kan fungera men det beror på hur mycket prestanda du behöver. Men om du är engagerad med ColumnStore för dina analytiska applikationer eller datalagerapplikationer, kolla in deras dokumentation. Taget från deras sida, för AWS, har de testat detta i allmänhet med hjälp av m4.4xlarge instanstyper som en kostnadseffektiv mellanväg. R4.8xlarge har också testats och presterar ungefär dubbelt så snabbt för ungefär dubbelt så mycket pris.

Vad du bör veta

Samma som MySQL, i MariaDB kan du skapa flera databaser medan Oracle inte kommer med samma funktionalitet.

I MariaDB är ett schema synonymt med en databas. Du kan ersätta nyckelordet SCHEMA istället för DATABASE i MariaDB SQL-syntaxen. Till exempel genom att använda SKAPA SCHEMA istället för SKAPA DATABAS; medan Oracle har en distinktion för detta. Ett schema representerar bara en del av en databas:tabellerna och andra objekt som ägs av en enda användare. Normalt finns det en en-till-en-relation mellan instansen och databasen.

Till exempel, i en replikeringskonfiguration motsvarande i Oracle (t.ex. Real Application Clusters eller RAC), har du dina flera instanser åtkomst till en enda databas. Detta låter dig starta Oracle på flera servrar, alla med åtkomst till samma data. Men i MariaDB kan du tillåta åtkomst till flera databaser från dina flera instanser och kan till och med filtrera bort vilka databaser/schema du kan replikera till en MariaDB-nod.

Med hänvisning från en av våra tidigare bloggar (denna och den här), gäller samma princip när man talar om att konvertera din databas med tillgängliga verktyg som finns på internet.

Det finns inget sådant verktyg som till 100 % kan konvertera Oracle-databas till MariaDB, även om MariaDB har Red Rover Migration Practice; det här är en tjänst som MariaDB erbjuder och den är inte gratis.

MariaDB pratar om migration på Development Bank of Singapore (DBS), som ett resultat av samarbetet med MariaDB om Oracle-kompatibilitet. Den har kunnat migrera mer än 50 procent av sina verksamhetskritiska applikationer på bara 12 månader från Oracle Database till MariaDB.

Men om du letar efter några verktyg, erbjuder sqlines-verktyg, som är SQLines SQL Converter och SQLines Data Tool, en enkel men ändå fungerande uppsättning verktyg.

Följande avsnitt nedan beskriver ytterligare de saker som du måste vara medveten om när det gäller migrering och verifiering av det logiska SQL-resultatet.

Datatypmappning

MySQL och MariaDB delar samma datatyper tillgängliga. Även om det finns variationer i hur det implementeras, kan du söka efter listan över datatyper i MariaDB här.

Medan MySQL använder JSON-datatypen, skiljer sig MariaDB eftersom det bara är ett alias av LONGTEXT-datatypen. MariaDB har också en funktion, JSON_VALID, som kan användas inom begränsningsuttrycket CHECK.

Därför kommer jag att använda denna tabellpresentation nedan baserat på informationen här, eftersom datatyper från MySQL mot MariaDB inte avviker så mycket, men jag har lagt till ändringar eftersom ROW-datatypen har introducerats i MariaDB 10.3. 0 som en del av PL/SQL-kompatibilitetsfunktionen.

Kolla in tabellen nedan:

Oracle MySQL
1 BFILE Pekare till binär fil, ⇐ 4G VARCHAR(255)
2 BINARY_FLOAT 32-bitars flyttal FLYTTA
3 BINARY_DOUBLE 64-bitars flyttal DUBBLA
4 BLOB Binärt stort objekt, ⇐ 4G LONGBLOB
5 CHAR(n), CHARACTER(n) sträng med fast längd, 1 ⇐ n ⇐ 255 CHAR(n), CHARACTER(n)
6 CHAR(n), CHARACTER(n) Sträng med fast längd, 256 ⇐ n ⇐ 2000 VARCHAR(n)
7 CLOB Tecken stort objekt, ⇐ 4G LONGTEXT
8 DATE Datum och tid DATETIME
9 DECIMAL(p,s), DEC(p,s) Fastpunktsnummer DECIMAL(p,s), DEC(p,s)
10 DUBBEL PRECISION Flertal DUBBEL PRECISION
11 FLYTTA(p) Flertal DUBBLA
12 INTEGER, INT 38 siffror heltal INT DECIMAL(38)
13 INTERVALL ÅR(p) TILL MÅNAD Datumintervall VARCHAR(30)
14 INTERVALL DAG(p) TILL SEKUND(AR) Dag och tidsintervall VARCHAR(30)
15 LÅNG Teckendata, ⇐ 2G LONGTEXT
16 LONG RAW Binära data, ⇐ 2G LONGBLOB
17 NCHAR(n) UTF-8-sträng med fast längd, 1 ⇐ n ⇐ 255 NCHAR(n)
18 NCHAR(n) UTF-8-sträng med fast längd, 256 ⇐ n ⇐ 2000 NVARCHAR(n)
19 NCHAR VARIERANDE(n) UTF-8-sträng med varierande längd, 1 ⇐ n ⇐ 4000 NCHAR VARIANDE(n)
20 NCLOB Unicode-sträng med variabel längd, ⇐ 4G NVARCHAR(max)
21 NUMBER(p,0), NUMBER(p) 8-bitars heltal, 1 <=p <3 TINYINT (0 till 255)
16-bitars heltal, 3 <=p <5 SMALLINT
32-bitars heltal, 5 <=p <9 INT
64-bitars heltal, 9 <=p <19 STORT
Fastpunktsnummer, 19 <=p <=38 DECIMAL(p)
22 ANTAL(p,s) Fastpunktsnummer, s> 0 DECIMAL(p,s)
23 NUMBER, NUMBER(*) Flertal DUBBLA
24 NUMERISK(p,s) Fastpunktsnummer NUMERIC(p,s)
25 NVARCHAR2(n) UTF-8-sträng med variabel längd, 1 ⇐ n ⇐ 4000 NVARCHAR(n)
26 RAW(n) Binär sträng med variabel längd, 1 ⇐ n ⇐ 255 BINÄR(n)
27 RAW(n) Binär sträng med variabel längd, 256 ⇐ n ⇐ 2000 VARBINÄR(n)
28 VERKLIG Flertal DUBBLA
29 ROWID Fysisk radadress CHAR(10)
Därför, för PL/SQL-kompatibilitet, kan du använda ROW ( [{, }. .. ])
30 SMALLINT 38 siffror heltal DECIMAL(38)
31 TIMESTAMP(p) Datum och tid med bråkdel DATETIME(p)
32 TIDSSTÄMPEL(p) MED TIDZON Datum och tid med bråktal och tidszon DATETIME(p)
33 UROWID(n) Logiska radadresser, 1 ⇐ n ⇐ 4000 VARCHAR(n)
34 VARCHAR(n) Snöre med variabel längd, 1 ⇐ n ⇐ 4000 VARCHAR(n)
35 VARCHAR2(n) Snöre med variabel längd, 1 ⇐ n ⇐ 4000 VARCHAR(n)
36 XMLTYPE XML-data LONGTEXT

Datatypsattribut och alternativ:

Oracle MySQL
BYTE och CHAR kolumnstorlek semantik Storlek är alltid i tecken

Transaktioner

MariaDB använder XtraDB från tidigare versioner fram till 10.1 och flyttade till InnoDB från version 10.2 och framåt; även om olika lagringsmotorer kan vara ett alternativt val för att hantera transaktioner som MyRocks lagringsmotor.

Som standard har MariaDB variabeln autocommit inställd på ON vilket innebär att du explicit måste hantera transaktionssatser för att dra fördel av ROLLBACK för att ignorera ändringar eller utnyttja SAVEPOINT.

Det är i princip samma koncept som Oracle använder när det gäller commit, rollbacks och savepoints.

För explicita transaktioner betyder detta att du måste använda START TRANSACTION/BEGIN; ; ÅTGÄRDER; syntax.

I annat fall, om du måste inaktivera autocommit, måste du uttryckligen COMMIT hela tiden för dina uttalanden som kräver ändringar av dina data.

Dubbel tabell

MariaDB har den dubbla kompatibiliteten med Oracle som är avsedd för kompatibilitet av databaser med hjälp av en dummy-tabell, nämligen DUAL. Den fungerar precis som MySQL där FROM-satsen inte är obligatorisk, så DUAL-tabellen är inte nödvändig. DUAL-tabellen fungerar dock inte exakt på samma sätt som den gör för Oracle, men för enkla SELECT:s i MariaDB är det bra.

Detta passar Oracles användning av DUAL så eventuella befintliga uttalanden i din applikation som använder DUAL kanske inte kräver några ändringar vid migrering till MariaDB.

Oracle FROM-satsen är obligatorisk för varje SELECT-sats, så Oracle-databasen använder DUAL-tabell för SELECT-sats där ett tabellnamn inte krävs.

Se följande exempel nedan:

I 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

Men i 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)

Obs:DESC DUAL syntax fungerar inte i MariaDB och resultaten skiljer sig också eftersom CURRENT_TIMESTAMP (använder datatyp TIMESTAMP) i MySQL inte inkluderar tidszonen.

SYSDATE

Oracles SYSDATE-funktion är nästan densamma i MariaDB.

MariaDB returnerar datum och tid och det är en funktion som kräver () (stäng och öppen parentes utan några argument krävs. För att demonstrera detta nedan, här är Oracle och MariaDB om att använda SYSDATE.

I Oracle returnerar du med vanlig SYSDATE bara dagens datum utan tid. Men för att få tid och datum, använd TO_CHAR för att konvertera datum och tid till önskat format; medan i MariaDB kanske du inte behöver det för att få datum och tid eftersom det returnerar båda.

Se exempel nedan.

I 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

Men i MariaDB:

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

Om du vill formatera datumet har MariaDB en DATE_FORMAT() funktion.

Du kan kontrollera MariaDB:s datum och tid dokumentation för mer information.

TO_DATE

Oracles TO_DATE-motsvarighet i MariaDB är STR_TO_DATE()-funktionen.

Den är nästan identisk med den i Oracle:den returnerar datatypen DATE, medan den i MariaDB returnerar datatypen 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 har inte en likvärdig funktionalitet till detta ännu. För närvarande, baserat på deras Jira-biljett MDEV-16482, är denna funktionsbegäran om att lägga till SYNONYM fortfarande öppen och inga tecken på framsteg än vid denna tidpunkt. Vi hoppas att detta kommer att införlivas i den framtida utgåvan. Ett möjligt alternativ kan dock vara att använda VIEW.

Även om SYNONYM i Oracle kan användas för att skapa ett alias för en fjärrtabell,

t.ex.

CREATE PUBLIC SYNONYM emp_table FOR [email protected]

I MariaDB kan du dra fördel av att använda CONNECT-lagringsmotorn som är kraftfullare än FederatedX-lagringsmotorn är, eftersom den låter dig ansluta olika databaskällor. Du kan kolla in den här korta videopresentationen.

Det finns ett bra exempel på MariaDB:s manualsida, som jag inte kommer att upprepa här eftersom det finns vissa överväganden du måste uppfylla, särskilt när du använder ODBC. Se bruksanvisningen.

Beteende av tom sträng och NULL

Observera att i MariaDB är tom sträng inte NULL medan Oracle behandlar tom sträng som nollvärden.

I Oracle:

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

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

Sekvenser

Sedan MariaDB 10.3 har Oracle-kompatibla sekvenser och ett lagrat procedurspråk som är kompatibelt med Oracle PL/SQL introducerats. I MariaDB är att skapa en sekvens ganska lik Oracles SEQUENCE.

MariaDB:s exempel:

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

och specificering av fungerande minimi- och maximivärden visar följande

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

Teckensträngsfunktioner

MariaDB, samma som MySQL, har också en handfull strängfunktioner som är för långa för att diskutera det här en i taget. Därför kan du kontrollera dokumentationen härifrån och jämföra detta med Oracles strängfunktioner.

DML-uttalanden

Infoga/Uppdatera/Ta bort uttalanden från Oracle är kongruenta i MariaDB.

Oracles INSERT ALL/INSERT FIRST stöds inte i MariaDB och ingen har ännu öppnat denna funktionsbegäran i sin Jira (som jag känner till).

Annars måste du ange dina MySQL-frågor en i taget.

t.ex.

I 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.

Men i MariaDB måste du köra infogningen en i taget:

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 kan inte jämföras med hur det används i Oracle, där du kan dra fördel av villkoren genom att lägga till ett WHEN-nyckelord i din syntax; det finns inget motsvarande alternativ för närvarande i MariaDB.

Därför är din alternativa lösning på detta att använda procedurer.

Yttre sammanfogar "+"-symbol

För närvarande, för kompatibilitet, är det ännu inte närvarande i MariaDB. Därför finns det gott om Jira-biljetter jag har hittat i MariaDB, men den här är mycket mer exakt när det gäller funktionsbegäran. Därför är ditt alternativa val för denna tid att använda JOIN-syntax. Se dokumentationen för mer information om detta.

BÖRJA MED..KOPPLA VID

Oracle använder START WITH..CONNECT BY för hierarkiska frågor.

Från och med MariaDB 10.2 introducerade de CTE (Common Table Expression) som är designat för att stödja generationer av hierarkiska dataresultat, som använder modeller som närliggande listor eller kapslade uppsättningsmodeller.

I likhet med PostgreSQL och MySQL använder MariaDB icke-rekursiva och rekursiva CTE:er.

Till exempel en enkel icke-rekursiv som används för att jämföra individer med deras grupp:

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)

medan en rekursiv CTE (exempel:returnera bussdestinationerna med New York som utgångspunkt)

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

Tidigare, i vår blogg om "Migrera från Oracle Database to MariaDB - What You Should Know", visade vi hur kraftfullt det nu är i MariaDB och lägger till dess efterlevnad för att adoptera PL/SQL som en del av sin databaskärna. När du använder PL/SQL-kompatibilitet i MariaDB, se till att du har ställt in SQL_MODE ='Oracle' precis som följer:

SET SQL_MODE='ORACLE';

Det nya kompatibilitetsläget hjälper till med följande syntax:

  • Slingasyntax
  • Variabeldeklaration
  • Icke-ANSI lagrad procedurkonstruktion
  • Markörsyntax
  • Lagrade procedurparametrar
  • Arv av datatyp (%TYPE, %ROWTYPE)
  • PL/SQL Style Undantag
  • Synonymer för grundläggande SQL-typer (VARCHAR2, NUMBER, …)

Till exempel i Oracle kan du skapa ett paket, som är ett schemaobjekt som grupperar logiskt relaterade PL/SQL-typer, variabler och underprogram. Därför, i MariaDB, kan du göra det precis som nedan:

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 ;

Oracles PL/SQL kompileras dock före körning när den laddas in på servern. Även om MariaDB inte säger detta i sin manual, skulle jag anta att tillvägagångssättet är detsamma som MySQL där det kompileras och lagras i cachen när det anropas.

Migreringsverktyg

Som min kollega Bart indikerade i vår tidigare blogg här, kan sqlines-verktyg som är SQLines SQL Converter och SQLines Data Tool också ge hjälp som en del av din migrering.

MariaDB har sin Red Rover Migration Practice-tjänst som du kan dra nytta av.

Sammantaget är Oracles migrering till MariaDB inte lika lätt som att migrera till MySQL/Percona, vilket kan lägga till fler utmaningar än MariaDB; speciellt ingen PL/SQL-kompatibilitet finns i MySQL.

Hur som helst, om du hittar eller känner till några verktyg som du tycker är användbara och fördelaktiga för att migrera från Oracle till MariaDB, vänligen lämna en kommentar på den här bloggen!

Testning

Samma som jag har sagt i den här bloggen, tillåt mig att upprepa en del av det här.

Som en del av din migreringsplan är testning en viktig uppgift som spelar en mycket viktig roll och som påverkar ditt beslut om migrering.

Verktyget dbdeployer (en ersättning för MySQL Sandbox) är ett mycket användbart verktyg som du kan dra nytta av. Detta är ganska enkelt för dig att testa olika tillvägagångssätt och sparar tid, snarare än att ställa in hela stacken om ditt syfte är att testa RDBMS-plattformen först.

För att testa dina SQL-lagrade rutiner (funktioner eller procedurer), triggers, händelser, föreslår jag att du använder dessa verktyg mytap eller Googles enhetstestningsram.

Percona-verktyg kan fortfarande vara användbara och kan integreras i dina DBA- eller ingenjörsuppgifter även med MariaDB. Kolla in Percona Toolkit här. Du kan välja verktygen efter dina behov, särskilt för test- och produktionsuppgifter.

Sammantaget är saker som du måste ha i åtanke som dina riktlinjer när du gör ett test för din MariaDB-server:

  • Efter installationen måste du överväga att göra lite justering. Kolla in vårt webbseminarium om att ställa in din MariaDB-server.
  • Gör några riktmärken och stressbelastningstester för din konfigurationskonfiguration på din nuvarande nod. Kolla in mysqlslap och sysbench som kan hjälpa dig med detta. Kolla även in vår blogg "Hur man jämför prestanda för MySQL &MariaDB med SysBench".
  • Kontrollera dina DDL:er om de är korrekt definierade såsom datatyper, begränsningar, klustrade och sekundära index eller partitioner, om du har några.
  • Kontrollera din DML särskilt om syntaxen är korrekt och sparar data korrekt som förväntat.
  • Kolla in dina lagrade rutiner, händelser, trigger för att säkerställa att de körs/returnerar de förväntade resultaten.
  • Verifiera att dina sökfrågor fungerar. Jag föreslår att du drar fördel av verktyg med öppen källkod eller provar vår ClusterControl-produkt. Det erbjuder övervakning/observerbarhet speciellt av ditt MariaDB-kluster. Kolla in den här tidigare bloggen där vi visar hur ClusterControl kan hjälpa dig att hantera MariaDB TX 3.0. Du kan använda ClusterControl här för att övervaka dina frågor och dess frågeplan för att se till att de fungerar.

  1. Olaglig blandning av sammanställningar (utf8_unicode_ci,IMPLICIT) och (utf8_general_ci,IMPLICIT) för operation '='

  2. Hur får man tabellskript i Oracle SQL Developer?

  3. Hur bestämmer man antalet dagar i en månad i SQL Server?

  4. Installera Oracle SQL Developer 19.1 på Mac OS med JDK 8