MariaDB
 sql >> Database >  >> RDS >> MariaDB

Migrazione da Oracle Database a MariaDB - A Deep Dive

Nei blog precedenti, abbiamo discusso l'argomento Come migrare da Oracle a MySQL/Percona Server e, più recentemente, Migrazione da Oracle Database a MariaDB - Cosa dovresti sapere.

Nel corso degli anni e con il rilascio delle nuove versioni di MySQL e MariaDB, entrambi i progetti si sono trasformati completamente in due piattaforme RDBMS molto diverse.

MariaDB e MySQL ora divergono in modo significativo l'una dall'altra, soprattutto con l'arrivo delle loro versioni più recenti:MySQL 8.0 e MariaDB 10.3 GA e la sua 10.4 (attualmente candidata RC).

Con il rilascio MariaDB TX 3.0, MariaDB ha sorpreso molti poiché non è più un sostituto drop-in di MySQL. Introduce un nuovo livello di compatibilità con il database Oracle e ora sta diventando una vera alternativa a Oracle così come ad altri database aziendali e proprietari come IBM DB2 o EnterpriseDB.

A partire da MariaDB versione 10.3, sono state introdotte funzionalità significative come tabelle con versione di sistema e, cosa più interessante per i DBA Oracle, supporto per PL/SQL!

Secondo il sito Web MariaDB, è possibile migrare circa l'80% dell'eredità Oracle PL/SQL senza riscrivere il codice. MariaDB ha anche ColumnStore, che è il loro nuovo motore di analisi e un motore di archiviazione a colonne progettato per l'elaborazione distribuita in parallelo di massa (MPP), come per l'analisi dei big data.

Il team di MariaDB ha lavorato duramente per il supporto aggiunto per PL/SQL. Aggiunge ulteriore facilità durante la migrazione a MariaDB da Oracle. Come punto di riferimento per la tua migrazione pianificata, puoi controllare il seguente riferimento da MariaDB. Come per il nostro blog precedente, questo non coprirà il processo generale di migrazione, poiché è un processo lungo. Ma si spera che fornisca informazioni di base sufficienti per fungere da guida per il processo di migrazione.

Strategia di pianificazione e sviluppo

Per il DBA, la migrazione dal database Oracle a MariaDB, tale migrazione significa molti fattori simili che non dovrebbero essere troppo difficili da spostare e adattarsi. MariaDB può funzionare su server Windows e dispone di file binari disponibili per il download della piattaforma Windows. Se utilizzi Oracle per OLAP (Online Analytical Processing) o business intelligence, MariaDB ha anche ColumnStore, che è l'equivalente dell'archivio colonne in memoria di database Oracle.

Se sei abituato ad avere un'architettura Oracle con MAA (Maximum Available Architecture) con Data Guard ++ Oracle RAC (Real Application Cluster), come MySQL/Percona Server, in MariaDB puoi scegliere tra una replica sincrona, semi- sincronizzazione o una replica asincrona.

Per una soluzione ad alta disponibilità, MariaDB ha Maxscale come opzione principale che puoi utilizzare. Puoi combinare MaxScale con Keepalived e HAProxy. ClusterControl, ad esempio, può gestirlo in modo efficiente e anche con il nuovo arrivo del prodotto di MariaDB, MariaDB TX. Consulta il nostro blog precedente per saperne di più su come ClusterControl può gestirlo in modo efficiente.

Poiché MariaDB è una tecnologia open source, è necessario considerare questa domanda:"Come otteniamo supporto?"

Quando si sceglie un'opzione di supporto, è necessario assicurarsi che non sia limitata al database, ma che riguardi competenze in termini di scalabilità, ridondanza, resilienza, backup, alta disponibilità, sicurezza, monitoraggio/osservabilità, ripristino e coinvolgimento in sistemi mission-critical . Nel complesso, l'offerta di supporto che scegli deve comprendere la tua configurazione architettonica senza esporre la riservatezza dei tuoi dati.

Inoltre, MariaDB ha una comunità molto ampia e collaborativa in tutto il mondo. Se riscontri problemi e vuoi chiedere alle persone coinvolte in questa comunità, puoi provare su Freenode tramite client IRC (Internet Relay Chat), andare alla pagina della loro comunità o unirti alla loro mailing list.

Valutazione o verifica preliminare

È necessario considerare il backup dei dati, inclusi i file di configurazione o di installazione, le regolazioni del kernel, gli script di automazione:è un'attività ovvia, ma prima di migrare, prima di tutto proteggi tutto, soprattutto quando ti sposti su una piattaforma diversa.

È inoltre necessario valutare che le applicazioni seguano convenzioni di ingegneria del software aggiornate e assicurarsi che siano indipendenti dalla piattaforma. Queste pratiche possono essere a tuo vantaggio soprattutto quando passi a una piattaforma di database diversa.

Poiché MariaDB è una tecnologia open source, assicurati di sapere quali sono i connettori disponibili disponibili in MariaDB. Questo è piuttosto semplice in questo momento poiché ci sono varie librerie client disponibili. Controlla qui per un elenco di queste librerie client. A parte questo, puoi controllare anche questo elenco di client e utilità disponibili nella pagina.

Infine, assicurati dei tuoi requisiti hardware.

MariaDB non ha requisiti specifici:un tipico server delle materie prime può funzionare ma dipende da quante prestazioni richiedi. Tuttavia, se sei impegnato con ColumnStore per le tue applicazioni analitiche o applicazioni di data warehouse, controlla la loro documentazione. Preso dalla loro pagina, per AWS, lo hanno testato generalmente utilizzando i tipi di istanza m4.4xlarge come una via di mezzo conveniente. Anche l'R4.8xlarge è stato testato e ha prestazioni due volte più veloci a circa il doppio del prezzo.

Cosa dovresti sapere

Come MySQL, in MariaDB puoi creare più database mentre Oracle non ha la stessa funzionalità.

In MariaDB, uno schema è sinonimo di un database. È possibile sostituire la parola chiave SCHEMA invece di DATABASE nella sintassi SQL di MariaDB. Ad esempio, utilizzando CREA SCHEMA invece di CREA DATABASE; mentre Oracle ha una distinzione per questo. Uno schema rappresenta solo una parte di un database:le tabelle e altri oggetti di proprietà di un singolo utente. Normalmente, esiste una relazione uno-a-uno tra l'istanza e il database.

Ad esempio, in una configurazione di replica equivalente in Oracle (ad es. Real Application Clusters o RAC), hai più istanze che accedono a un singolo database. Ciò ti consente di avviare Oracle su più server, tutti accedendo agli stessi dati. Tuttavia, in MariaDB, puoi consentire l'accesso a più database dalle tue istanze multiple e puoi persino filtrare quali database/schema puoi replicare su un nodo MariaDB.

Facendo riferimento a uno dei nostri blog precedenti (questo e questo), lo stesso principio si applica quando si parla di convertire il database con gli strumenti disponibili trovati su Internet.

Non esiste uno strumento del genere in grado di convertire al 100% il database Oracle in MariaDB, sebbene MariaDB abbia Red Rover Migration Practice; questo è un servizio offerto da MariaDB e non è gratuito.

MariaDB parla della migrazione alla Development Bank of Singapore (DBS), a seguito della sua collaborazione con MariaDB sulla compatibilità Oracle. È stato in grado di migrare oltre il 50% delle sue applicazioni mission-critical in soli 12 mesi da Oracle Database a MariaDB.

Ma se stai cercando alcuni strumenti, gli strumenti sqlines, che sono SQLines SQL Converter e SQLines Data Tool, offrono un set di strumenti semplice ma operativo.

Le sezioni seguenti delineano ulteriormente le cose di cui devi essere a conoscenza quando si tratta di migrazione e verifica del risultato SQL logico.

Mappatura del tipo di dati

MySQL e MariaDB condividono gli stessi tipi di dati disponibili. Sebbene ci siano variazioni su come viene implementato, puoi controllare l'elenco dei tipi di dati in MariaDB qui.

Sebbene MySQL utilizzi il tipo di dati JSON, MariaDB differisce in quanto è solo un alias del tipo di dati LONGTEXT. MariaDB ha anche una funzione, JSON_VALID, che può essere utilizzata all'interno dell'espressione di vincolo CHECK.

Quindi, utilizzerò questa presentazione tabellare di seguito in base alle informazioni qui, poiché i tipi di dati da MySQL rispetto a MariaDB non si discostano così tanto, ma ho aggiunto modifiche poiché il tipo di dati ROW è stato introdotto in MariaDB 10.3. 0 come parte della funzionalità di compatibilità PL/SQL.

Controlla la tabella qui sotto:

Oracle MySQL
1 BFILE Puntatore a file binario, ⇐ 4G VARCHAR(255)
2 BINARY_FLOAT Numero a virgola mobile a 32 bit GALLEGGIANTE
3 BINARY_DOUBLE Numero a virgola mobile a 64 bit DOPPIA
4 BLOB Oggetto binario di grandi dimensioni, ⇐ 4G LONGBLOB
5 CHAR(n), CHARACTER(n) Stringa a lunghezza fissa, 1 ⇐ n ⇐ 255 CHAR(n), CHARACTER(n)
6 CHAR(n), CHARACTER(n) Stringa a lunghezza fissa, 256 ⇐ n ⇐ 2000 VARCHAR(n)
7 CLOB Oggetto grande personaggio, ⇐ 4G LOGTESTO
8 DATA Data e ora DATETIME
9 DECIMAL(p,s), DEC(p,s) Numero a virgola fissa DECIMAL(p,s), DEC(p,s)
10 DOPPIA PRECISIONE Numero in virgola mobile DOPPIA PRECISIONE
11 FLOAT(p) Numero in virgola mobile DOPPIA
12 INTERO, INT Intero di 38 cifre INT DECIMAL(38)
13 INTERVALLO ANNO(p) AL MESE Intervallo di date VARCHAR(30)
14 INTERVALLO GIORNO(p) A SECONDO(i) Giorno e intervallo di tempo VARCHAR(30)
15 LUNGO Dati sui caratteri, ⇐ 2G LOGTESTO
16 LUNGO CRUDO Dati binari, ⇐ 2G LONGBLOB
17 NCHAR(n) Stringa UTF-8 a lunghezza fissa, 1 ⇐ n ⇐ 255 NCHAR(n)
18 NCHAR(n) Stringa UTF-8 a lunghezza fissa, 256 ⇐ n ⇐ 2000 NVARCHAR(n)
19 NCHAR VARIANTE(n) Stringa UTF-8 di lunghezza variabile, 1 ⇐ n ⇐ 4000 NCHAR VARIANTE(n)
20 NCLOB Stringa Unicode a lunghezza variabile, ⇐ 4G NVARCHAR(max)
21 NUMERO(p,0), NUMERO(p) Intero a 8 bit, 1 <=p <3 TINYINT (da 0 a 255)
Intero a 16 bit, 3 <=p <5 PICCOLA
Intero a 32 bit, 5 <=p <9 INT
Intero a 64 bit, 9 <=p <19 GRANDE
Numero a virgola fissa, 19 <=p <=38 DECIMAL(p)
22 NUMERO(p,s) Numero a virgola fissa, s> 0 DECIMAL(p,s)
23 NUMERO, NUMERO(*) Numero in virgola mobile DOPPIA
24 NUMERICO(p,s) Numero a virgola fissa NUMERIC(p,s)
25 NVARCHAR2(n) Stringa UTF-8 a lunghezza variabile, 1 ⇐ n ⇐ 4000 NVARCHAR(n)
26 RAW(n) Stringa binaria a lunghezza variabile, 1 ⇐ n ⇐ 255 BINARIO(n)
27 RAW(n) Stringa binaria a lunghezza variabile, 256 ⇐ n ⇐ 2000 VARBINARY(n)
28 REALE Numero in virgola mobile DOPPIA
29 ROWID Indirizzo di riga fisico CHAR(10)
Pertanto, per la compatibilità PL/SQL, puoi utilizzare ROW ( [{, }. .. ])
30 SMALLINT Intero di 38 cifre DECIMA(38)
31 TIMESTAMP(p) Data e ora con frazione DATETIME(p)
32 TIMESTAMP(p) CON FUSO ORARIO Data e ora con frazione e fuso orario DATETIME(p)
33 UROWID(n) Indirizzi di riga logici, 1 ⇐ n ⇐ 4000 VARCHAR(n)
34 VARCHAR(n) Stringa a lunghezza variabile, 1 ⇐ n ⇐ 4000 VARCHAR(n)
35 VARCHAR2(n) Stringa a lunghezza variabile, 1 ⇐ n ⇐ 4000 VARCHAR(n)
36 TIPOXML Dati XML LOGTESTO

Attributi e opzioni del tipo di dati:

Oracle MySQL
Semantica delle dimensioni delle colonne BYTE e CHAR La dimensione è sempre in caratteri

Transazioni

MariaDB utilizza XtraDB dalle versioni precedenti fino alla 10.1 ed è passato a InnoDB dalla versione 10.2 in poi; sebbene vari motori di archiviazione possano essere una scelta alternativa per la gestione di transazioni come il motore di archiviazione MyRocks.

Per impostazione predefinita, MariaDB ha la variabile autocommit impostata su ON, il che significa che devi gestire esplicitamente le istruzioni transazionali per sfruttare ROLLBACK per ignorare le modifiche o sfruttare SAVEPOINT.

È fondamentalmente lo stesso concetto utilizzato da Oracle in termini di commit, rollback e punti di salvataggio.

Per le transazioni esplicite, questo significa che devi usare START TRANSACTION/BEGIN; ; IMPEGNA; sintassi.

Altrimenti, se devi disabilitare l'autocommit, devi impegnarti in modo esplicito in ogni momento per le tue dichiarazioni che richiedono modifiche ai tuoi dati.

Tabella doppia

MariaDB ha la doppia compatibilità con Oracle che è pensata per la compatibilità dei database utilizzando una tabella fittizia, ovvero DUAL. Funziona esattamente come MySQL dove la clausola FROM non è obbligatoria, quindi la tabella DUAL non è necessaria. Tuttavia, la tabella DUAL non funziona esattamente allo stesso modo di Oracle, ma per semplici SELECT in MariaDB, va bene.

Ciò si adatta all'utilizzo di DUAL da parte di Oracle, quindi qualsiasi istruzione esistente nell'applicazione che utilizza DUAL potrebbe non richiedere modifiche durante la migrazione a MariaDB.

La clausola Oracle FROM è obbligatoria per ogni istruzione SELECT, quindi il database Oracle utilizza la tabella DUAL per l'istruzione SELECT dove non è richiesto un nome di tabella.

Vedere il seguente esempio di seguito:

In 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

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

Nota:il DESC DUAL la sintassi non funziona in MariaDB e anche i risultati differiscono poiché CURRENT_TIMESTAMP (usa il tipo di dati TIMESTAMP) in MySQL non include il fuso orario.

SYSDATE

La funzione SYSDATE di Oracle è quasi la stessa in MariaDB.

MariaDB restituisce data e ora ed è una funzione che richiede () (chiudi e apri parentesi senza argomenti richiesti. Per dimostrarlo di seguito, ecco Oracle e MariaDB sull'utilizzo di SYSDATE.

In Oracle, l'utilizzo di SYSDATE semplice restituisce semplicemente la data del giorno senza l'ora. Ma per ottenere l'ora e la data, usa TO_CHAR per convertire la data e l'ora nel formato desiderato; mentre in MariaDB, potresti non averne bisogno per ottenere la data e l'ora poiché restituisce entrambe.

Vedi esempio sotto.

In 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

Ma in MariaDB:

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

Se vuoi formattare la data, MariaDB ha una funzione DATE_FORMAT().

Puoi controllare la documentazione Data e ora di MariaDB per ulteriori informazioni.

TO_DATE

L'equivalente TO_DATE di Oracle in MariaDB è la funzione STR_TO_DATE().

È quasi identico a quello in Oracle:restituisce il tipo di dati DATE, mentre in MariaDB restituisce il tipo di dati DATETIME.

Oracolo:

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)

SINONIMI

MariaDB non ha ancora una funzionalità equivalente a questa. Attualmente, in base al loro ticket Jira MDEV-16482 , questa richiesta di funzionalità per aggiungere SYNONYM è ancora aperta e al momento non ci sono ancora segni di avanzamento. Speriamo che questo sarà incorporato nella versione futura. Tuttavia, una possibile alternativa potrebbe essere l'utilizzo di VIEW.

Sebbene SYNONYM in Oracle possa essere utilizzato per creare un alias di una tabella remota,

es.

CREATE PUBLIC SYNONYM emp_table FOR [email protected]

In MariaDB, puoi trarre vantaggio dall'utilizzo del motore di archiviazione CONNECT che è più potente del motore di archiviazione FederatedX, poiché consente di connettere varie origini di database. Puoi dare un'occhiata a questo breve video di presentazione.

C'è un buon esempio nella pagina di manuale di MariaDB, che non ribadirò qui poiché ci sono alcune considerazioni che devi soddisfare specialmente quando usi ODBC. Fare riferimento al manuale.

Comportamento di stringa vuota e NULL

Prendi nota che in MariaDB, la stringa vuota non è NULL mentre Oracle tratta la stringa vuota come valori nulli.

In Oracle:

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)

Sequenze

A partire da MariaDB 10.3, sono state introdotte sequenze compatibili con Oracle e un linguaggio di stored procedure conforme a Oracle PL/SQL. In MariaDB, la creazione di una sequenza è abbastanza simile a SEQUENCE di Oracle.

Esempio di MariaDB:

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

e specificando i valori minimi e massimi realizzabili mostra come segue

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

Funzioni di stringhe di caratteri

MariaDB, come MySQL, ha anche una manciata di funzioni di stringa che è troppo lungo per discuterne qui una per una. Quindi, puoi controllare la documentazione da qui e confrontarla con le funzioni di stringa di Oracle.

Dichiarazioni DML

Le istruzioni Inserisci/Aggiorna/Elimina da Oracle sono congrue in MariaDB.

INSERT ALL/INSERT FIRST di Oracle non è supportato in MariaDB e nessuno ha ancora aperto questa richiesta di funzionalità nel proprio Jira (che io sappia).

Altrimenti, dovresti dichiarare le tue query MySQL una per una.

es.

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

Ma in MariaDB, devi eseguire l'inserimento uno alla volta:

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 non è paragonabile a come viene utilizzato in Oracle, dove puoi sfruttare le condizioni aggiungendo una parola chiave WHEN nella tua sintassi; non ci sono opzioni equivalenti a partire da questo momento in MariaDB.

Quindi, la tua soluzione alternativa a questo è usare le procedure.

Simbolo "+" di unione esterna

Attualmente, per compatibilità, non è ancora presente in MariaDB. Quindi, ci sono molti ticket Jira che ho trovato in MariaDB, ma questo è molto più preciso in termini di richiesta di funzionalità. Quindi, la tua scelta alternativa per questa volta è usare la sintassi JOIN. Si prega di controllare la documentazione per ulteriori informazioni al riguardo.

INIZIA CON..COLLEGATI BY

Oracle utilizza START WITH..CONNECT BY per query gerarchiche.

A partire da MariaDB 10.2, hanno introdotto CTE (Common Table Expression), progettato per supportare generazioni di risultati di dati gerarchici, che utilizzano modelli come elenchi di adiacenza o modelli di insiemi nidificati.

Simile a PostgreSQL e MySQL, MariaDB utilizza CTE non ricorsivi e ricorsivi.

Ad esempio, un semplice non ricorsivo che viene utilizzato per confrontare gli individui con il loro gruppo:

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)

mentre un CTE ricorsivo (esempio:restituire le destinazioni degli autobus con New York come origine)

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?

In precedenza, nel nostro blog su "Migrazione da Oracle Database a MariaDB - Cosa dovresti sapere", abbiamo mostrato quanto sia potente ora in MariaDB aggiungendo la sua conformità per adottare PL/SQL come parte del kernel del database. Ogni volta che utilizzi la compatibilità PL/SQL in MariaDB, assicurati di aver impostato SQL_MODE ='Oracle' proprio come segue:

SET SQL_MODE='ORACLE';

La nuova modalità di compatibilità aiuta con la seguente sintassi:

  • Sintassi del ciclo
  • Dichiarazione variabile
  • Costrutto di stored procedure non ANSI
  • Sintassi del cursore
  • Parametri della procedura memorizzata
  • Ereditarietà del tipo di dati (%TYPE, %ROWTYPE)
  • Eccezioni stile PL/SQL
  • Sinonimi per i tipi SQL di base (VARCHAR2, NUMBER, ...)

Ad esempio, in Oracle è possibile creare un pacchetto, che è un oggetto schema che raggruppa tipi PL/SQL, variabili e sottoprogrammi logicamente correlati. Quindi, in MariaDB, puoi farlo proprio come di seguito:

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 ;

Tuttavia, PL/SQL di Oracle viene compilato prima dell'esecuzione quando viene caricato nel server. Sebbene MariaDB non lo dica nel loro manuale, suppongo che l'approccio sia lo stesso di MySQL dove viene compilato e archiviato nella cache quando viene invocato.

Strumenti di migrazione

Come il mio collega Bart ha indicato nel nostro precedente blog qui, gli strumenti sqlines che sono SQLines SQL Converter e SQLines Data Tool possono anche fornire aiuto come parte della tua migrazione.

MariaDB dispone del servizio Red Rover Migration Practice di cui puoi usufruire.

Nel complesso, la migrazione di Oracle a MariaDB non è così facile come la migrazione a MySQL/Percona, che potrebbe aggiungere più sfide rispetto a MariaDB; soprattutto non esiste compatibilità PL/SQL in MySQL.

Ad ogni modo, se trovi o conosci strumenti che ritieni utili e utili per la migrazione da Oracle a MariaDB, lascia un commento su questo blog!

Test

Come ho affermato in questo blog, permettetemi di ribadirlo in parte qui.

Come parte del tuo piano di migrazione, il test è un'attività vitale che svolge un ruolo molto importante e influisce sulla tua decisione in merito alla migrazione.

Lo strumento dbdeployer (un sostituto di MySQL Sandbox) è uno strumento molto utile che puoi sfruttare. È abbastanza facile per te provare a testare approcci diversi e ti fa risparmiare tempo, piuttosto che impostare l'intero stack se il tuo scopo è provare prima a testare la piattaforma RDBMS.

Per testare le routine memorizzate SQL (funzioni o procedure), trigger, eventi, ti suggerisco di utilizzare questi strumenti mytap o lo Unit Testing Framework di Google.

Gli strumenti Percona possono comunque essere utili e possono essere incorporati nel tuo DBA o attività di ingegneria anche con MariaDB. Checkout Percona Toolkit qui. Puoi scegliere gli strumenti in base alle tue esigenze, in particolare per le attività di test e utilizzo della produzione.

Nel complesso, le cose che devi tenere a mente come linee guida quando fai un test per il tuo server MariaDB sono:

  • Dopo l'installazione, è necessario prendere in considerazione la possibilità di eseguire alcune modifiche. Dai un'occhiata al nostro webinar sull'ottimizzazione del tuo server MariaDB.
  • Esegui alcuni benchmark e test di carico di stress per l'impostazione della configurazione sul nodo corrente. Dai un'occhiata a mysqlslap e sysbench che possono aiutarti in questo. Dai un'occhiata anche al nostro blog "Come confrontare le prestazioni di MySQL e MariaDB usando SysBench".
  • Controlla i tuoi DDL se sono definiti correttamente come tipi di dati, vincoli, indici cluster e secondari o partizioni, se ne hai.
  • Controlla il tuo DML soprattutto se la sintassi è corretta e stai salvando i dati correttamente come previsto.
  • Controlla le routine, gli eventi e i trigger memorizzati per assicurarti che eseguano/restituiscano i risultati attesi.
  • Verifica che le tue query in esecuzione siano performanti. Ti suggerisco di sfruttare gli strumenti open-source o di provare il nostro prodotto ClusterControl. Offre monitoraggio/osservabilità in particolare del tuo cluster MariaDB. Dai un'occhiata a questo blog precedente in cui mostriamo come ClusterControl può aiutarti a gestire MariaDB TX 3.0. Puoi utilizzare ClusterControl qui per monitorare le tue query e il relativo piano di query per assicurarti che siano performanti.