I tidligere blogs diskuterede vi emnet Hvordan man migrerer fra Oracle til MySQL / Percona Server og senest migrering fra Oracle-database til MariaDB - Hvad du bør vide.
I årenes løb og efterhånden som nye versioner af MySQL og MariaDB blev frigivet, er begge projekter afveget fuldstændigt til to meget forskellige RDBMS-platforme.
MariaDB og MySQL afviger nu betydeligt fra hinanden, især med ankomsten af deres seneste versioner:MySQL 8.0 og MariaDB 10.3 GA og dens 10.4 (i øjeblikket RC-kandidat).
Med udgivelsen MariaDB TX 3.0 overraskede MariaDB mange, da det ikke længere er en drop-in erstatning for MySQL. Det introducerer et nyt niveau af kompatibilitet med Oracle-databasen og er nu ved at blive et reelt alternativ til Oracle såvel som andre virksomheds- og proprietære databaser såsom IBM DB2 eller EnterpriseDB.
Fra og med MariaDB version 10.3 er der blevet introduceret væsentlige funktioner såsom systemversionerede tabeller og, hvad der er mest tiltalende for Oracle DBA'er, understøttelse af PL/SQL!
Ifølge MariaDB-webstedet kan cirka 80% af den gamle Oracle PL/SQL migreres uden at omskrive koden. MariaDB har også ColumnStore, som er deres nye analysemotor og en kolonneformet lagermotor designet til distribueret, massivt parallel behandling (MPP), såsom til big data-analyse.
MariaDB-teamet har arbejdet hårdt for den ekstra support til PL/SQL. Det tilføjer ekstra lethed, når du migrerer til MariaDB fra Oracle. Som referencepunkt for din planlagte migrering kan du tjekke følgende reference fra MariaDB. Som i vores tidligere blog vil dette ikke dække den overordnede migrationsproces, da det er en lang proces. Men det vil forhåbentlig give tilstrækkelig baggrundsinformation til at tjene som en guide til din migreringsproces.
Planlægnings- og udviklingsstrategi
For DBA betyder migrering fra Oracle-databasen til MariaDB en sådan migrering en masse lignende faktorer, som ikke burde være for svære at flytte og tilpasse sig. MariaDB kan betjenes i Windows-server og har binære filer til rådighed for Windows-platformen til downloads. Hvis du bruger Oracle til OLAP (Online Analytical Processing) eller business intelligence, har MariaDB også ColumnStore, som svarer til Oracles Database In-Memory kolonnelager.
Hvis du er vant til at have en Oracle-arkitektur med MAA (Maximum Available Architecture) med Data Guard ++ Oracle RAC (Real Application Cluster), samme som MySQL/Percona Server, i MariaDB, kan du vælge mellem en synkron replikering, semi- synkronisering eller en asynkron replikering.
For en yderst tilgængelig løsning har MariaDB Maxscale som din vigtigste mulighed, du kan bruge. Du kan blande MaxScale med Keepalived og HAProxy. ClusterControl kan for eksempel styre dette effektivt og endda med den nye ankomst af MariaDBs produkt, MariaDB TX. Se vores tidligere blog for at lære mere om, hvordan ClusterControl effektivt kan administrere dette.
Da MariaDB er en open source-teknologi, overvejes dette spørgsmål:"Hvordan får vi support?"
Du skal sikre dig, når du vælger en supportmulighed, at den ikke er begrænset til databasen, men den bør dække ekspertise inden for skalerbarhed, redundans, robusthed, sikkerhedskopier, høj tilgængelighed, sikkerhed, overvågning/observabilitet, gendannelse og brug af missionskritiske systemer . Samlet set skal det supporttilbud, du vælger, komme med en forståelse af din arkitektoniske opsætning uden at afsløre fortroligheden af dine data.
Derudover har MariaDB et meget stort og samarbejdende fællesskab på verdensplan. Hvis du oplever problemer og ønsker at spørge folk involveret i dette fællesskab, kan du prøve på Freenode via IRC-klient (Internet Relay Chat), gå til deres fællesskabsside eller tilmelde dig deres mailingliste.
Vurdering eller foreløbig kontrol
Sikkerhedskopiering af dine data inklusive konfigurationer eller opsætningsfiler, kernejusteringer, automatiseringsscripts skal overvejes:det er en indlysende opgave, men før du migrerer, skal du altid sikre alt først, især når du flytter til en anden platform.
Du skal også vurdere, at dine applikationer følger opdaterede softwarekonstruktionskonventioner og sikre, at de er platformagnostiske. Denne praksis kan være til din fordel, især når du flytter til en anden databaseplatform.
Da MariaDB er en open source-teknologi, skal du sørge for at vide, hvad de tilgængelige stik er, der er tilgængelige i MariaDB. Dette er ret ligetil lige nu, da der er forskellige tilgængelige klientbiblioteker. Tjek her for en liste over disse klientbiblioteker. Bortset fra det kan du også tjekke denne liste over tilgængelige klienter og hjælpeprogrammer.
Til sidst skal du sørge for dine hardwarekrav.
MariaDB har ikke specifikke krav:en typisk råvareserver kan fungere, men det afhænger af, hvor meget ydeevne du har brug for. Men hvis du er engageret i ColumnStore til dine analytiske applikationer eller datavarehusapplikationer, så tjek deres dokumentation. Taget fra deres side, for AWS, har de testet dette generelt ved at bruge m4.4xlarge instanstyper som en omkostningseffektiv mellemvej. R4.8xlarge er også blevet testet og yder cirka dobbelt så hurtigt til cirka det dobbelte af prisen.
Hvad du bør vide
Samme som MySQL, i MariaDB kan du oprette flere databaser, mens Oracle ikke kommer med den samme funktionalitet.
I MariaDB er et skema synonymt med en database. Du kan erstatte nøgleordet SCHEMA i stedet for DATABASE i MariaDB SQL-syntaksen. For eksempel ved at bruge CREATE SCHEMA i stedet for CREATE DATABASE; mens Oracle har en sondring for dette. Et skema repræsenterer kun en del af en database:tabellerne og andre objekter, der ejes af en enkelt bruger. Normalt er der en en-til-en-relation mellem instansen og databasen.
For eksempel, i en replikeringsopsætning, der svarer til Oracle (f.eks. Real Application Clusters eller RAC), har du dine flere forekomster adgang til en enkelt database. Dette lader dig starte Oracle på flere servere, som alle har adgang til de samme data. Men i MariaDB kan du tillade adgang til flere databaser fra dine flere instanser og kan endda filtrere ud, hvilke databaser/skemaer du kan replikere til en MariaDB-node.
Med henvisning fra en af vores tidligere blogs (denne og denne), gælder det samme princip, når man taler om at konvertere din database med tilgængelige værktøjer, der findes på internettet.
Der er ikke noget sådant værktøj, der 100 % kan konvertere Oracle-database til MariaDB, selvom MariaDB har Red Rover Migration Practice; dette er en tjeneste, som MariaDB tilbyder, og den er ikke gratis.
MariaDB taler om migration hos Development Bank of Singapore (DBS), som et resultat af deres samarbejde med MariaDB om Oracle-kompatibilitet. Det har været i stand til at migrere mere end 50 procent af sine missionskritiske applikationer på kun 12 måneder fra Oracle Database til MariaDB.
Men hvis du leder efter nogle værktøjer, tilbyder sqlines-værktøjer, som er SQLines SQL Converter og SQLines Data Tool, et enkelt, men operationelt sæt værktøjer.
De følgende afsnit nedenfor skitserer yderligere de ting, du skal være opmærksom på, når det kommer til migrering og verificering af det logiske SQL-resultat.
Data Type Mapping
MySQL og MariaDB deler de samme tilgængelige datatyper. Selvom der er variationer i, hvordan det implementeres, kan du se efter listen over datatyper i MariaDB her.
Mens MySQL bruger JSON-datatypen, adskiller MariaDB sig, da det kun er et alias af LONGTEXT-datatypen. MariaDB har også en funktion, JSON_VALID, som kan bruges i CHECK-begrænsningsudtrykket.
Derfor vil jeg gøre brug af denne tabelpræsentation nedenfor baseret på informationen her, da datatyper fra MySQL mod MariaDB ikke afviger så meget, men jeg har tilføjet ændringer, da ROW-datatypen er blevet introduceret i MariaDB 10.3. 0 som en del af PL/SQL-kompatibilitetsfunktionen.
Tjek tabellen nedenfor:
Oracle | MySQL | |||
---|---|---|---|---|
1 | BFILE | Pejler til binær fil, ⇐ 4G | VARCHAR(255) | |
2 | BINARY_FLOAT | 32-bit flydende kommanummer | FLYDE | |
3 | BINARY_DOUBLE | 64-bit flydende kommanummer | DOUBLE | |
4 | BLOB | Binært stort objekt, ⇐ 4G | LONGBLOB | |
5 | CHAR(n), CHARACTER(n) | streng med fast længde, 1 ⇐ n ⇐ 255 | CHAR(n), CHARACTER(n) | |
6 | CHAR(n), CHARACTER(n) | streng med fast længde, 256 ⇐ n ⇐ 2000 | VARCHAR(n) | |
7 | CLOB | Karakter stort objekt, ⇐ 4G | LONGTEXT | |
8 | DATO | Dato og tid | DATETIME | |
9 | DECIMAL(p,s), DEC(p,s) | Fastpunktnummer | DECIMAL(p,s), DEC(p,s) | |
10 | DObbel PRÆCISION | Flydende kommanummer | DObbel PRÆCISION | |
11 | FLOAT(p) | Flydende kommanummer | DOUBLE | |
12 | INTEGER, INT | 38 cifre heltal | INT | DECIMAL(38) |
13 | INTERVAL ÅR(p) TIL MÅNED | Datointerval | VARCHAR(30) | |
14 | INTERVALDAG(p) TIL SEKUND(ER) | Dag og tidsinterval | VARCHAR(30) | |
15 | LANG | Tegndata, ⇐ 2G | LONGTEXT | |
16 | LANG RAW | Binære data, ⇐ 2G | LONGBLOB | |
17 | NCHAR(n) | UTF-8-streng med fast længde, 1 ⇐ n ⇐ 255 | NCHAR(n) | |
18 | NCHAR(n) | UTF-8-streng med fast længde, 256 ⇐ n ⇐ 2000 | NVARCHAR(n) | |
19 | NCHAR VARIERENDE(n) | UTF-8-streng med varierende længde, 1 ⇐ n ⇐ 4000 | NCHAR VARIENDE(n) | |
20 | NCLOB | Unicode-streng med variabel længde, ⇐ 4G | NVARCHAR(maks.) | |
21 | NUMBER(s,0), NUMBER(p) | 8-bit heltal, 1 <=p <3 | TINYINT | (0 til 255) |
16-bit heltal, 3 <=p <5 | SMALLINT | |||
32-bit heltal, 5 <=p <9 | INT | |||
64-bit heltal, 9 <=p <19 | STORT | |||
Fastpunktnummer, 19 <=p <=38 | DECIMAL(p) | |||
22 | ANTAL(p,s) | Fastpunktnummer, s> 0 | DECIMAL(p,s) | |
23 | NUMBER, NUMBER(*) | Flydende kommanummer | DOUBLE | |
24 | NUMERISK(p,s) | Fastpunktnummer | NUMERIC(p,s) | |
25 | NVARCHAR2(n) | UTF-8-streng med variabel længde, 1 ⇐ n ⇐ 4000 | NVARCHAR(n) | |
26 | RAW(n) | Binær streng med variabel længde, 1 ⇐ n ⇐ 255 | BINÆR(n) | |
27 | RAW(n) | Binær streng med variabel længde, 256 ⇐ n ⇐ 2000 | VARBINARY(n) | |
28 | RIGTIG | Flydende kommanummer | DOUBLE | |
29 | ROWID | Fysisk rækkeadresse | CHAR(10) Til PL/SQL-kompatibilitet kan du derfor bruge ROW ( | |
30 | SMALLINT | 38 cifre heltal | DECIMAL(38) | |
31 | TIMESTAMP(p) | Dato og tid med brøk | DATETIME(p) | |
32 | TIMESTAMP(p) MED TIDSZONE | Dato og tid med brøk og tidszone | DATETIME(p) | |
33 | UROWID(n) | Logiske rækkeadresser, 1 ⇐ n ⇐ 4000 | VARCHAR(n) | |
34 | VARCHAR(n) | Snor med variabel længde, 1 ⇐ n ⇐ 4000 | VARCHAR(n) | |
35 | VARCHAR2(n) | Snor med variabel længde, 1 ⇐ n ⇐ 4000 | VARCHAR(n) | |
36 | XMLTYPE | XML-data | LONGTEXT |
Datatypeattributter og muligheder:
Oracle | MySQL |
---|---|
BYTE og CHAR kolonnestørrelse semantik | Størrelse er altid i tegn |
Transaktioner
MariaDB bruger XtraDB fra tidligere versioner indtil 10.1 og skiftede til InnoDB fra version 10.2 og fremefter; selvom forskellige lagringsmotorer kan være et alternativt valg til håndtering af transaktioner såsom MyRocks lagringsmotor.
Som standard har MariaDB autocommit-variablen sat til ON, hvilket betyder, at du eksplicit skal håndtere transaktionsudsagn for at drage fordel af ROLLBACK for at ignorere ændringer eller drage fordel af at bruge SAVEPOINT.
Det er dybest set det samme koncept, som Oracle bruger med hensyn til commit, rollbacks og savepoints.
For eksplicitte transaktioner betyder det, at du skal bruge START TRANSACTION/BEGIN;
Ellers, hvis du skal deaktivere autocommit, skal du udtrykkeligt COMMIT hele tiden for dine udsagn, der kræver ændringer af dine data.
Dobbelt bord
MariaDB har den dobbelte kompatibilitet med Oracle, som er beregnet til kompatibilitet af databaser ved hjælp af en dummy-tabel, nemlig DUAL. Det fungerer på samme måde som MySQL, hvor FROM-sætningen ikke er obligatorisk, så DUAL-tabellen er ikke nødvendig. DUAL-tabellen fungerer dog ikke helt på samme måde, som den gør for Oracle, men for simple SELECT'er i MariaDB er dette fint.
Dette passer til Oracles brug af DUAL, så eventuelle eksisterende udsagn i din applikation, der bruger DUAL, kræver muligvis ingen ændringer ved migrering til MariaDB.
Oracle FROM-sætningen er obligatorisk for hver SELECT-sætning, så Oracle-databasen bruger DUAL-tabel til SELECT-sætning, hvor et tabelnavn ikke er påkrævet.
Se følgende eksempel nedenfor:
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)
Bemærk:DESC DUAL syntaks virker ikke i MariaDB, og resultaterne er også forskellige, da CURRENT_TIMESTAMP (bruger TIMESTAMP datatype) i MySQL ikke inkluderer tidszonen.
SYSDATE
Oracles SYSDATE-funktion er næsten den samme i MariaDB.
MariaDB returnerer dato og klokkeslæt, og det er en funktion, der kræver () (luk og åben parentes uden argumenter. For at demonstrere dette nedenfor, her er Oracle og MariaDB om at bruge SYSDATE.
I Oracle returnerer brug af almindelig SYSDATE blot datoen på dagen uden klokkeslæt. Men for at få klokkeslæt og dato, brug TO_CHAR til at konvertere dato og klokkeslæt til det ønskede format; mens du i MariaDB muligvis ikke har brug for det for at få datoen og klokkeslættet, da det returnerer begge dele.
Se eksempel nedenfor.
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)
Hvis du vil formatere datoen, har MariaDB en DATE_FORMAT() funktion.
Du kan tjekke MariaDB's Dato- og Tidsdokumentation for mere information.
TO_DATE
Oracles TO_DATE-ækvivalent i MariaDB er STR_TO_DATE()-funktionen.
Den er næsten identisk med den i Oracle:den returnerer datatypen DATE, mens den i MariaDB returnerer 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 endnu ikke en tilsvarende funktionalitet til dette. I øjeblikket, baseret på deres Jira-billet MDEV-16482, er denne funktionsanmodning om at tilføje SYNONYM stadig åben, og der er endnu ingen tegn på fremskridt på nuværende tidspunkt. Vi håber, at dette vil blive indarbejdet i den fremtidige udgivelse. Et muligt alternativ kunne dog være at bruge VIEW.
Selvom SYNONYM i Oracle kan bruges til at oprette et alias for en ekstern tabel,
f.eks.
CREATE PUBLIC SYNONYM emp_table FOR [email protected]
I MariaDB kan du drage fordel af at bruge CONNECT-lagringsmotoren, som er mere kraftfuld end FederatedX-lagringsmotoren, da den giver dig mulighed for at forbinde forskellige databasekilder. Du kan se denne korte videopræsentation.
Der er et godt eksempel på MariaDB's manualside, som jeg ikke vil gentage her, da der er visse overvejelser, du skal opfylde, især når du bruger ODBC. Se venligst manualen.
Opførsel af tom streng og NULL
Bemærk, at i MariaDB er tom streng ikke NULL, mens Oracle behandler tom streng som nulværdier.
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
Siden MariaDB 10.3 er Oracle-kompatible sekvenser og et lagret proceduresprog, der er kompatibelt med Oracle PL/SQL, blevet introduceret. I MariaDB er oprettelse af en sekvens ret lig Oracles SEQUENCE.
MariaDB's eksempel:
CREATE SEQUENCE s START WITH 100 INCREMENT BY 10;
CREATE SEQUENCE s2 START WITH -100 INCREMENT BY -10;
og angivelse af brugbare minimum- og maksimumværdier viser som følger
CREATE SEQUENCE s3 START WITH -100 INCREMENT BY 10 MINVALUE=-100 MAXVALUE=1000;
Tegnstrengfunktioner
MariaDB, samme som MySQL, har også en håndfuld strengfunktioner, som er for lang til at diskutere det her én efter én. Derfor kan du tjekke dokumentationen herfra og sammenligne denne med Oracles strengfunktioner.
DML-erklæringer
Indsæt/Opdater/Slet-udsagn fra Oracle stemmer overens i MariaDB.
Oracles INSERT ALL/INSERT FIRST er ikke understøttet i MariaDB, og ingen har endnu åbnet denne funktionsanmodning i deres Jira (som jeg kender).
Ellers skal du angive dine MySQL-forespørgsler én efter én.
f.eks.
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 skal du køre indsættet en ad gangen:
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 ikke sammenlignes med, hvordan det bruges i Oracle, hvor du kan drage fordel af betingelserne ved at tilføje et NÅR nøgleord i din syntaks; der er ingen tilsvarende mulighed på nuværende tidspunkt i MariaDB.
Derfor er din alternative løsning på dette at bruge procedurer.
Ydre forbinder "+"-symbol
I øjeblikket, for kompatibilitet, er det endnu ikke til stede i MariaDB. Derfor er der masser af Jira-billetter, jeg har fundet i MariaDB, men denne er meget mere præcis med hensyn til funktionsanmodning. Derfor er dit alternative valg for denne gang at bruge JOIN-syntaks. Se venligst dokumentationen for mere information om dette.
START MED..OPSLUT VED
Oracle bruger START WITH..CONNECT BY for hierarkiske forespørgsler.
Fra MariaDB 10.2 introducerede de CTE (Common Table Expression), som er designet til at understøtte generationer af hierarkiske dataresultater, som bruger modeller såsom tilstødende lister eller indlejrede sætmodeller.
I lighed med PostgreSQL og MySQL bruger MariaDB ikke-rekursive og rekursive CTE'er.
For eksempel en simpel ikke-rekursiv, som bruges til at sammenligne individer med deres gruppe:
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)
mens en rekursiv CTE (eksempel:returner busdestinationerne med New York som udgangspunkt)
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?
Tidligere, i vores blog om "Migrering fra Oracle-database til MariaDB - Hvad du bør vide", viste vi, hvor kraftfuldt det nu er i MariaDB og tilføjer dets compliance til at adoptere PL/SQL som en del af sin databasekerne. Når du bruger PL/SQL-kompatibilitet i MariaDB, skal du sørge for at have indstillet SQL_MODE ='Oracle' ligesom som følger:
SET SQL_MODE='ORACLE';
Den nye kompatibilitetstilstand hjælper med følgende syntaks:
- Sløjfesyntaks
- Variabelerklæring
- Ikke-ANSI Stored Procedure Construct
- Markørsyntaks
- Lagrede procedureparametre
- Datatypearv (%TYPE, %ROWTYPE)
- PL/SQL-stilundtagelser
- Synonymer for grundlæggende SQL-typer (VARCHAR2, NUMBER, …)
For eksempel kan du i Oracle oprette en pakke, som er et skemaobjekt, der grupperer logisk relaterede PL/SQL-typer, variabler og underprogrammer. Derfor kan du i MariaDB gøre det ligesom nedenfor:
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 kompileres dog før udførelse, når den indlæses på serveren. Selvom MariaDB ikke siger dette i deres manual, vil jeg antage, at tilgangen er den samme som MySQL, hvor den kompileres og gemmes i cachen, når den startes.
Migreringsværktøjer
Som min kollega Bart indikerede i vores tidligere blog her, kan sqlines-værktøjer, som er SQLines SQL Converter og SQLines Data Tool, også hjælpe som en del af din migrering.
MariaDB har deres Red Rover Migration Practice-tjeneste, som du kan drage fordel af.
Overordnet set er Oracles migrering til MariaDB ikke så let som at migrere til MySQL/Percona, hvilket kunne tilføje flere udfordringer end MariaDB; Der findes især ingen PL/SQL-kompatibilitet i MySQL.
Under alle omstændigheder, hvis du finder eller kender til værktøjer, som du finder nyttige og gavnlige til at migrere fra Oracle til MariaDB, bedes du efterlade en kommentar på denne blog!
Test
Det samme som jeg har sagt i denne blog, tillad mig at gentage noget af det her.
Som en del af din migrationsplan er test en vital opgave, der spiller en meget vigtig rolle og påvirker din beslutning med hensyn til migrering.
Værktøjet dbdeployer (en erstatning for MySQL Sandbox) er et meget nyttigt værktøj, som du kan drage fordel af. Dette er ret nemt for dig at prøve at teste forskellige tilgange og sparer dig tid i stedet for at sætte hele stakken op, hvis dit formål er at prøve at teste RDBMS-platformen først.
For at teste dine SQL-lagrede rutiner (funktioner eller procedurer), triggere, hændelser, foreslår jeg, at du bruger disse værktøjer mytap eller Googles Unit Testing Framework.
Percona-værktøjer kan stadig være nyttige og kan integreres i dine DBA- eller ingeniøropgaver selv med MariaDB. Tjek Percona Toolkit her. Du kan vælge værktøjerne efter dine behov, især til test- og produktionsbrugsopgaver.
Samlet set er de ting, du skal huske på som dine retningslinjer, når du laver en test for din MariaDB-server:
- Efter din installation skal du overveje at foretage nogle justeringer. Tjek vores webinar om tuning af din MariaDB-server.
- Udfør nogle benchmarks og stressbelastningstest for din konfigurationsopsætning på din nuværende node. Tjek mysqlslap og sysbench, som kan hjælpe dig med dette. Tjek også vores blog "Sådan benchmarker du MySQL &MariaDB's ydeevne ved hjælp af SysBench".
- Tjek dine DDL'er, om de er korrekt defineret, såsom datatyper, begrænsninger, klyngede og sekundære indekser eller partitioner, hvis du har nogen.
- Tjek din DML, især hvis syntaksen er korrekt og gemmer dataene korrekt som forventet.
- Tjek dine gemte rutiner, hændelser, trigger for at sikre, at de kører/returnerer de forventede resultater.
- Bekræft, at dine forespørgsler er effektive. Jeg foreslår, at du drager fordel af open source-værktøjer eller prøver vores ClusterControl-produkt. Det tilbyder overvågning / observerbarhed især af din MariaDB-klynge. Tjek denne tidligere blog, hvor vi viser, hvordan ClusterControl kan hjælpe dig med at administrere MariaDB TX 3.0. Du kan bruge ClusterControl her til at overvåge dine forespørgsler og dens forespørgselsplan for at sikre, at de er effektive.