MariaDB
 sql >> Base de données >  >> RDS >> MariaDB

Migration d'Oracle Database vers MariaDB - Une plongée en profondeur

Dans les blogs précédents, nous avons abordé le sujet Comment migrer d'Oracle vers MySQL / Percona Server et, plus récemment, Migrer d'Oracle Database vers MariaDB - Ce que vous devez savoir.

Au fil des ans et au fur et à mesure que de nouvelles versions de MySQL et MariaDB ont été publiées, les deux projets ont complètement dévié vers deux plates-formes RDBMS très différentes.

MariaDB et MySQL divergent désormais sensiblement l'une de l'autre, notamment avec l'arrivée de leurs versions les plus récentes :MySQL 8.0 et MariaDB 10.3 GA et sa 10.4 (actuellement candidate RC).

Avec la version MariaDB TX 3.0, MariaDB en a surpris plus d'un car il ne remplace plus MySQL. Il introduit un nouveau niveau de compatibilité avec la base de données Oracle et devient désormais une véritable alternative à Oracle ainsi qu'à d'autres bases de données d'entreprise et propriétaires telles qu'IBM DB2 ou EnterpriseDB.

À partir de la version 10.3 de MariaDB, des fonctionnalités importantes ont été introduites telles que les tables versionnées par le système et, ce qui est le plus attrayant pour les administrateurs de base de données Oracle, la prise en charge de PL/SQL !

Selon le site Web MariaDB, environ 80 % de l'ancien Oracle PL/SQL peuvent être migrés sans réécrire le code. MariaDB dispose également de ColumnStore, qui est leur nouveau moteur d'analyse et un moteur de stockage en colonnes conçu pour le traitement distribué massivement parallèle (MPP), comme pour l'analyse de données volumineuses.

L'équipe MariaDB a travaillé dur pour la prise en charge supplémentaire de PL/SQL. Cela ajoute une facilité supplémentaire lors de la migration vers MariaDB à partir d'Oracle. Comme point de référence pour votre migration planifiée, vous pouvez vérifier la référence suivante de MariaDB. Comme indiqué dans notre blog précédent, cela ne couvrira pas le processus global de migration, car il s'agit d'un long processus. Mais nous espérons qu'il fournira suffisamment d'informations générales pour vous guider dans votre processus de migration.

Stratégie de planification et de développement

Pour le DBA, migrer de la base de données Oracle vers MariaDB, une telle migration implique de nombreux facteurs similaires qui ne devraient pas être trop difficiles à déplacer et à adapter. MariaDB peut être exploité sur un serveur Windows et dispose de fichiers binaires disponibles pour la plate-forme Windows à télécharger. Si vous utilisez Oracle pour OLAP (Online Analytical Processing) ou l'informatique décisionnelle, MariaDB dispose également du ColumnStore, qui est l'équivalent du magasin de colonnes Database In-Memory d'Oracle.

Si vous avez l'habitude d'avoir une architecture Oracle ayant MAA (Maximum Available Architecture) avec Data Guard ++ Oracle RAC (Real Application Cluster), identique à MySQL/Percona Server, dans MariaDB, vous pouvez choisir entre une réplication synchrone, semi- sync, ou une réplication asynchrone.

Pour une solution hautement disponible, MariaDB a Maxscale comme option principale que vous pouvez utiliser. Vous pouvez mélanger MaxScale avec Keepalived et HAProxy. ClusterControl, par exemple, peut gérer cela efficacement et même avec la nouvelle arrivée du produit de MariaDB, MariaDB TX. Consultez notre blog précédent pour en savoir plus sur la façon dont ClusterControl peut gérer cela efficacement.

MariaDB étant une technologie open source, cette question doit être posée :"Comment pouvons-nous obtenir de l'aide ?"

Lorsque vous choisissez une option de support, vous devez vous assurer qu'elle ne se limite pas à la base de données, mais qu'elle doit couvrir l'expertise en matière d'évolutivité, de redondance, de résilience, de sauvegardes, de haute disponibilité, de sécurité, de surveillance/observabilité, de récupération et d'engagement sur des systèmes critiques. . Dans l'ensemble, l'offre d'assistance que vous choisissez doit s'accompagner d'une compréhension de votre configuration architecturale sans exposer la confidentialité de vos données.

De plus, MariaDB a une très grande communauté collaborative dans le monde entier. Si vous rencontrez des problèmes et souhaitez demander aux personnes impliquées dans cette communauté, vous pouvez essayer Freenode via le client IRC (Internet Relay Chat), aller sur leur page de communauté ou rejoindre leur liste de diffusion.

Évaluation ou vérification préliminaire

La sauvegarde de vos données, y compris les configurations ou les fichiers d'installation, les réglages du noyau, les scripts d'automatisation doivent être pris en compte :c'est une tâche évidente, mais avant de migrer, sécurisez toujours tout d'abord, en particulier lorsque vous passez à une plate-forme différente.

Vous devez également évaluer que vos applications suivent les conventions d'ingénierie logicielle à jour et vous assurer qu'elles sont indépendantes de la plate-forme. Ces pratiques peuvent être à votre avantage, en particulier lorsque vous passez à une plate-forme de base de données différente.

Étant donné que MariaDB est une technologie open source, assurez-vous de connaître les connecteurs disponibles disponibles dans MariaDB. C'est assez simple en ce moment car il existe différentes bibliothèques clientes disponibles. Consultez ici la liste de ces bibliothèques clientes. En plus de cela, vous pouvez également consulter cette page de liste des clients et utilitaires disponibles.

Enfin, assurez-vous de la configuration matérielle requise.

MariaDB n'a pas d'exigences spécifiques :un serveur standard peut fonctionner, mais cela dépend des performances dont vous avez besoin. Cependant, si vous êtes engagé avec ColumnStore pour vos applications analytiques ou vos applications d'entrepôt de données, consultez leur documentation. Tiré de leur page, pour AWS, ils ont testé cela généralement en utilisant les types d'instances m4.4xlarge comme un terrain d'entente rentable. Le R4.8xlarge a également été testé et fonctionne environ deux fois plus vite pour environ le double du prix.

Ce que vous devez savoir

Comme MySQL, dans MariaDB, vous pouvez créer plusieurs bases de données alors qu'Oracle n'offre pas la même fonctionnalité.

Dans MariaDB, un schéma est synonyme de base de données. Vous pouvez substituer le mot-clé SCHEMA au lieu de DATABASE dans la syntaxe MariaDB SQL. Par exemple, en utilisant CREATE SCHEMA au lieu de CRÉER BASE DE DONNÉES; tandis qu'Oracle a une distinction pour cela. Un schéma ne représente qu'une partie d'une base de données :les tables et autres objets appartenant à un seul utilisateur. Normalement, il existe une relation un à un entre l'instance et la base de données.

Par exemple, dans une configuration de réplication équivalente dans Oracle (par exemple, Real Application Clusters ou RAC), vos multiples instances accèdent à une seule base de données. Cela vous permet de démarrer Oracle sur plusieurs serveurs, tous accédant aux mêmes données. Cependant, dans MariaDB, vous pouvez autoriser l'accès à plusieurs bases de données à partir de vos multiples instances et même filtrer les bases de données/schémas que vous pouvez répliquer sur un nœud MariaDB.

En référence à l'un de nos précédents blogs (ceci et celui-ci), le même principe s'applique lorsque l'on parle de convertir votre base de données avec des outils disponibles trouvés sur Internet.

Aucun outil de ce type ne peut convertir à 100 % la base de données Oracle en MariaDB, bien que MariaDB dispose de la pratique de migration Red Rover ; il s'agit d'un service proposé par MariaDB et il n'est pas gratuit.

MariaDB parle de migration à Development Bank of Singapore (DBS), suite à sa collaboration avec MariaDB sur la compatibilité Oracle. Elle a pu migrer plus de 50 % de ses applications critiques en seulement 12 mois d'Oracle Database vers MariaDB.

Mais si vous recherchez des outils, les outils sqlines, qui sont SQLines SQL Converter et SQLines Data Tool, offrent un ensemble d'outils simples mais opérationnels.

Les sections suivantes décrivent plus en détail les éléments dont vous devez être conscient lorsqu'il s'agit de migration et de vérification du résultat SQL logique.

Mappage des types de données

MySQL et MariaDB partagent les mêmes types de données disponibles. Bien qu'il existe des variations quant à la façon dont il est implémenté, vous pouvez consulter la liste des types de données dans MariaDB ici.

Alors que MySQL utilise le type de données JSON, MariaDB diffère car il s'agit simplement d'un alias du type de données LONGTEXT. MariaDB a également une fonction, JSON_VALID, qui peut être utilisée dans l'expression de contrainte CHECK.

Par conséquent, je vais utiliser cette présentation tabulaire ci-dessous sur la base des informations ici, car les types de données de MySQL par rapport à MariaDB ne s'écartent pas tellement, mais j'ai ajouté des modifications car le type de données ROW a été introduit dans MariaDB 10.3. 0 dans le cadre de la fonctionnalité de compatibilité PL/SQL.

Consultez le tableau ci-dessous :

Oracle MySQL
1 BFILE Pointeur vers un fichier binaire, ⇐ 4G VARCHAR(255)
2 BINARY_FLOAT Nombre à virgule flottante 32 bits FLOAT
3 BINARY_DOUBLE Nombre à virgule flottante 64 bits DOUBLE
4 BLOB Grand objet binaire, ⇐ 4G LONGBLOB
5 CARACTÈRE(n), CARACTÈRE(n) Chaîne de longueur fixe, 1 ⇐ n ⇐ 255 CARACTÈRE(n), CARACTÈRE(n)
6 CARACTÈRE(n), CARACTÈRE(n) Chaîne de longueur fixe, 256 ⇐ n ⇐ 2000 VARCHAR(n)
7 CLOB Grand objet de caractère, ⇐ 4G TEXTE LONG
8 DATE Date et heure DATETIME
9 DECIMAL(p,s), DEC(p,s) Numéro à virgule fixe DECIMAL(p,s), DEC(p,s)
10 DOUBLE PRÉCISION Nombre à virgule flottante DOUBLE PRÉCISION
11 FLOAT(p) Nombre à virgule flottante DOUBLE
12 ENTIER, INT Entier à 38 chiffres INT DECIMAL(38)
13 INTERVALLE ANNÉE(p) À MOIS Intervalle de dates VARCHAR(30)
14 INTERVALLE JOUR(p) À SECONDE(s) Jour et intervalle de temps VARCHAR(30)
15 LONG Données de caractère, ⇐ 2G TEXTE LONG
16 LONG RAW Données binaires, ⇐ 2G LONGBLOB
17 NCHAR(n) Chaîne UTF-8 de longueur fixe, 1 ⇐ n ⇐ 255 NCHAR(n)
18 NCHAR(n) Chaîne UTF-8 de longueur fixe, 256 ⇐ n ⇐ 2000 NVARCHAR(n)
19 NCHAR VARIANT(n) Chaîne UTF-8 de longueur variable, 1 ⇐ n ⇐ 4000 NCHAR VARIABLE(n)
20 NCLOB Chaîne Unicode de longueur variable, ⇐ 4G NVARCHAR(max)
21 NOMBRE(p,0), NOMBRE(p) Entier 8 bits, 1 <=p <3 TINYINT (0 à 255)
Entier 16 bits, 3 <=p <5 PETIT INTÉRIEUR
Entier 32 bits, 5 <=p <9 INT
Entier 64 bits, 9 <=p <19 GRANDINT
Nombre à virgule fixe, 19 <=p <=38 DECIMAL(p)
22 NOMBRE(p,s) Nombre à virgule fixe, s> 0 DECIMAL(p,s)
23 NOMBRE, NOMBRE(*) Nombre à virgule flottante DOUBLE
24 NUMÉRIQUE(p,s) Numéro à virgule fixe NUMÉRIQUE(p,s)
25 NVARCHAR2(n) Chaîne UTF-8 de longueur variable, 1 ⇐ n ⇐ 4000 NVARCHAR(n)
26 RAW(n) Chaîne binaire de longueur variable, 1 ⇐ n ⇐ 255 BINAIRE(n)
27 RAW(n) Chaîne binaire de longueur variable, 256 ⇐ n ⇐ 2000 VARBINAIRE(n)
28 RÉEL Nombre à virgule flottante DOUBLE
29 ROWID Adresse de ligne physique CHAR(10)
Par conséquent, pour la compatibilité PL/SQL, vous pouvez utiliser ROW ( [{, }. .. ])
30 SMALLINT Entier à 38 chiffres DECIMAL(38)
31 TIMESTAMP(p) Date et heure avec fraction DATETIME(p)
32 TIMESTAMP(p) AVEC FUSEAU HORAIRE Date et heure avec fraction et fuseau horaire DATETIME(p)
33 UROWID(n) Adresses de lignes logiques, 1 ⇐ n ⇐ 4000 VARCHAR(n)
34 VARCHAR(n) Chaîne de longueur variable, 1 ⇐ n ⇐ 4000 VARCHAR(n)
35 VARCHAR2(n) Chaîne de longueur variable, 1 ⇐ n ⇐ 4000 VARCHAR(n)
36 XMLTYPE Données XML TEXTE LONG

Attributs et options de type de données :

Oracle MySQL
Sémantique de la taille des colonnes BYTE et CHAR La taille est toujours en caractères

Transactions

MariaDB utilise XtraDB des versions précédentes jusqu'à 10.1 et est passé à InnoDB à partir de la version 10.2 ; bien que divers moteurs de stockage puissent être un choix alternatif pour gérer les transactions, comme le moteur de stockage MyRocks.

Par défaut, MariaDB a la variable autocommit définie sur ON, ce qui signifie que vous devez gérer explicitement les instructions transactionnelles pour tirer parti de ROLLBACK pour ignorer les modifications ou profiter de l'utilisation de SAVEPOINT.

C'est fondamentalement le même concept qu'Oracle utilise en termes de validation, de restauration et de points de sauvegarde.

Pour les transactions explicites, cela signifie que vous devez utiliser le START TRANSACTION/BEGIN ;  ; S'ENGAGER ; syntaxe.

Sinon, si vous devez désactiver la validation automatique, vous devez explicitement COMMIT tout le temps pour vos déclarations qui nécessitent des modifications de vos données.

Table double

MariaDB a la double compatibilité avec Oracle qui est destinée à la compatibilité des bases de données utilisant une table factice, à savoir DUAL. Il fonctionne exactement comme MySQL où la clause FROM n'est pas obligatoire, donc la table DUAL n'est pas nécessaire. Cependant, la table DUAL ne fonctionne pas exactement de la même manière que pour Oracle, mais pour les SELECT simples dans MariaDB, c'est très bien.

Cela convient à l'utilisation de DUAL par Oracle, de sorte que toutes les instructions existantes dans votre application qui utilisent DUAL peuvent ne nécessiter aucune modification lors de la migration vers MariaDB.

La clause Oracle FROM est obligatoire pour chaque instruction SELECT, donc la base de données Oracle utilise la table DUAL pour l'instruction SELECT où un nom de table n'est pas requis.

Voir l'exemple suivant ci-dessous :

Dans 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

Mais dans 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)

Remarque :le DESC DUAL La syntaxe ne fonctionne pas dans MariaDB et les résultats diffèrent également car CURRENT_TIMESTAMP (utilise le type de données TIMESTAMP) dans MySQL n'inclut pas le fuseau horaire.

DATESYS

La fonction SYSDATE d'Oracle est presque la même dans MariaDB.

MariaDB renvoie la date et l'heure et c'est une fonction qui nécessite () (parenthèses fermées et ouvertes sans arguments requis. Pour le démontrer ci-dessous, voici Oracle et MariaDB sur l'utilisation de SYSDATE.

Dans Oracle, l'utilisation de SYSDATE simple renvoie simplement la date du jour sans l'heure. Mais pour obtenir l'heure et la date, utilisez TO_CHAR pour convertir l'heure de la date dans le format souhaité ; alors que dans MariaDB, vous n'en aurez peut-être pas besoin pour obtenir la date et l'heure car il renvoie les deux.

Voir l'exemple ci-dessous.

Dans 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

Mais dans MariaDB :

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

Si vous souhaitez formater la date, MariaDB a une fonction DATE_FORMAT().

Vous pouvez consulter la documentation Date et heure de MariaDB pour plus d'informations.

TO_DATE

L'équivalent TO_DATE d'Oracle dans MariaDB est la fonction STR_TO_DATE().

Il est presque identique à celui d'Oracle :il renvoie le type de données DATE, tandis que dans MariaDB, il renvoie le type de données 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)

SYNONYME

MariaDB n'a pas encore de fonctionnalité équivalente à celle-ci. Actuellement, sur la base de leur ticket Jira MDEV-16482 , cette demande de fonctionnalité pour ajouter SYNONYM est toujours ouverte et aucun signe de progression pour le moment. Nous espérons que cela sera intégré dans la future version. Cependant, une alternative possible pourrait être d'utiliser VIEW.

Bien que SYNONYM dans Oracle puisse être utilisé pour créer un alias d'une table distante,

ex.

CREATE PUBLIC SYNONYM emp_table FOR [email protected]

Dans MariaDB, vous pouvez profiter de l'utilisation du moteur de stockage CONNECT qui est plus puissant que le moteur de stockage FederatedX, car il vous permet de connecter différentes sources de base de données. Vous pouvez consulter cette courte présentation vidéo.

Il y a un bon exemple dans la page de manuel de MariaDB, que je ne répéterai pas ici car il y a certaines considérations que vous devez respecter, en particulier lorsque vous utilisez ODBC. Veuillez vous référer au manuel.

Comportement de chaîne vide et NULL

Notez que dans MariaDB, la chaîne vide n'est pas NULL alors qu'Oracle traite la chaîne vide comme des valeurs nulles.

Dans Oracle :

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

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

Séquences

Depuis MariaDB 10.3, des séquences compatibles avec Oracle et un langage de procédure stockée conforme à Oracle PL/SQL ont été introduits. Dans MariaDB, la création d'une séquence est assez similaire à SEQUENCE d'Oracle.

Exemple de MariaDB :

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

et la spécification des valeurs minimales et maximales réalisables se présente comme suit

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

Fonctions de chaînes de caractères

MariaDB, tout comme MySQL, a également une poignée de fonctions de chaîne qui est trop longue pour en discuter ici une par une. Par conséquent, vous pouvez consulter la documentation à partir d'ici et la comparer aux fonctions de chaîne d'Oracle.

Déclarations DML

Les instructions d'insertion/mise à jour/suppression d'Oracle sont compatibles avec MariaDB.

INSÉRER TOUT/INSÉRER EN PREMIER d'Oracle n'est pas pris en charge dans MariaDB et personne n'a encore ouvert cette demande de fonctionnalité dans son Jira (à ma connaissance).

Sinon, vous devrez énoncer vos requêtes MySQL une par une.

ex.

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

Mais dans MariaDB, vous devez exécuter l'insert un par un :

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)

Le INSERT ALL/INSERT FIRST n'est pas comparable à la façon dont il est utilisé dans Oracle, où vous pouvez tirer parti des conditions en ajoutant un mot-clé WHEN dans votre syntaxe; il n'y a pas d'option équivalente pour le moment dans MariaDB.

Par conséquent, votre solution alternative consiste à utiliser des procédures.

Symbole "+" des jointures externes

Actuellement, pour des raisons de compatibilité, il n'est pas encore présent dans MariaDB. Par conséquent, il y a beaucoup de tickets Jira que j'ai trouvés dans MariaDB mais celui-ci est beaucoup plus précis en termes de demande de fonctionnalité. Par conséquent, votre choix alternatif pour cette fois est d'utiliser la syntaxe JOIN. Veuillez consulter la documentation pour plus d'informations à ce sujet.

COMMENCER PAR..CONNECTER PAR

Oracle utilise START WITH..CONNECT BY pour les requêtes hiérarchiques.

À partir de MariaDB 10.2, ils ont introduit CTE (Common Table Expression) qui est conçu pour prendre en charge des générations de résultats de données hiérarchiques, qui utilisent des modèles tels que des listes de contiguïté ou des modèles d'ensembles imbriqués.

Semblable à PostgreSQL et MySQL, MariaDB utilise des CTE non récursifs et récursifs.

Par exemple, un simple non-récursif qui sert à comparer des individus à leur groupe :

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)

tandis qu'un CTE récursif (exemple :renvoie les destinations de bus avec New York comme 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 dans MariaDB ?

Auparavant, dans notre blog sur "Migration d'Oracle Database vers MariaDB - Ce que vous devez savoir", nous avons montré à quel point il est maintenant puissant dans MariaDB en ajoutant sa conformité pour adopter PL/SQL dans le cadre de son noyau de base de données. Chaque fois que vous utilisez la compatibilité PL/SQL dans MariaDB, assurez-vous d'avoir défini SQL_MODE ='Oracle' comme suit :

SET SQL_MODE='ORACLE';

Le nouveau mode de compatibilité aide avec la syntaxe suivante :

  • Syntaxe de boucle
  • Déclaration de variables
  • Construction de procédure stockée non-ANSI
  • Syntaxe du curseur
  • Paramètres de procédure stockée
  • Héritage des types de données (%TYPE, %ROWTYPE)
  • Exceptions de style PL/SQL
  • Synonymes des types SQL de base (VARCHAR2, NUMBER, …)

Par exemple, dans Oracle, vous pouvez créer un package, qui est un objet de schéma qui regroupe des types, des variables et des sous-programmes PL/SQL liés logiquement. Par conséquent, dans MariaDB, vous pouvez le faire comme ci-dessous :

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 ;

Cependant, le PL/SQL d'Oracle est compilé avant son exécution lorsqu'il est chargé sur le serveur. Bien que MariaDB ne le dise pas dans son manuel, je suppose que l'approche est la même que MySQL où elle est compilée et stockée dans le cache lorsqu'elle est invoquée.

Outils de migration

Comme mon collègue Bart l'a indiqué dans notre précédent blog ici, les outils sqlines que sont SQLines SQL Converter et SQLines Data Tool peuvent également vous aider dans le cadre de votre migration.

MariaDB a son service Red Rover Migration Practice dont vous pouvez profiter.

Dans l'ensemble, la migration d'Oracle vers MariaDB n'est pas aussi simple que la migration vers MySQL/Percona, ce qui pourrait ajouter plus de défis que MariaDB ; en particulier, aucune compatibilité PL/SQL n'existe dans MySQL.

Quoi qu'il en soit, si vous trouvez ou connaissez des outils que vous trouvez utiles et bénéfiques pour migrer d'Oracle vers MariaDB, veuillez laisser un commentaire sur ce blog !

Test

Comme ce que j'ai dit dans ce blog, permettez-moi d'en réitérer une partie ici.

Dans le cadre de votre plan de migration, les tests sont une tâche vitale qui joue un rôle très important et affecte votre décision en matière de migration.

L'outil dbdeployer (qui remplace MySQL Sandbox) est un outil très utile dont vous pouvez tirer parti. C'est assez facile pour vous d'essayer et de tester différentes approches et cela vous fait gagner du temps, plutôt que de configurer toute la pile si votre objectif est d'essayer et de tester d'abord la plate-forme RDBMS.

Pour tester vos routines stockées SQL (fonctions ou procédures), déclencheurs, événements, je vous suggère d'utiliser ces outils mytap ou le cadre de test unitaire de Google.

Les outils Percona peuvent toujours être utiles et peuvent être intégrés à vos tâches DBA ou d'ingénierie, même avec MariaDB. Découvrez la boîte à outils Percona ici. Vous pouvez sélectionner les outils en fonction de vos besoins, en particulier pour les tâches de test et d'utilisation en production.

Dans l'ensemble, les éléments que vous devez garder à l'esprit lorsque vous effectuez un test pour votre serveur MariaDB sont :

  • Après votre installation, vous devez envisager d'effectuer quelques réglages. Découvrez notre webinaire sur le réglage de votre serveur MariaDB.
  • Effectuez des tests de performances et des tests de charge pour votre configuration de configuration sur votre nœud actuel. Consultez mysqlslap et sysbench qui peuvent vous aider. Consultez également notre blog "Comment évaluer les performances de MySQL et MariaDB à l'aide de SysBench".
  • Vérifiez vos DDL s'ils sont correctement définis tels que les types de données, les contraintes, les index clusterisés et secondaires, ou les partitions, si vous en avez.
  • Vérifiez votre DML, en particulier si la syntaxe est correcte et enregistrez les données correctement comme prévu.
  • Vérifiez vos routines, événements et déclencheurs stockés pour vous assurer qu'ils exécutent/renvoyent les résultats attendus.
  • Vérifiez que vos requêtes en cours d'exécution sont performantes. Je vous suggère de profiter des outils open-source ou d'essayer notre produit ClusterControl. Il offre une surveillance/observabilité en particulier de votre cluster MariaDB. Consultez ce blog précédent dans lequel nous montrons comment ClusterControl peut vous aider à gérer MariaDB TX 3.0. Vous pouvez utiliser ClusterControl ici pour surveiller vos requêtes et son plan de requête afin de vous assurer qu'elles sont performantes.