---
title: "Migrer une base MariaDB vers Oracle"
description: "Migrez une base MariaDB vers Oracle : convertissez son dump en script avec les mêmes tables, clés, séquences et données, et un rapport de chaque changement."
canonical: https://intosql.com/fr/mariadb-en-oracle
last_updated: 2026-10-15
---

# Migrer une base MariaDB vers Oracle

Déposez un dump de mariadb-dump, mysqldump, phpMyAdmin ou Adminer, en .sql ou .sql.gz, et téléchargez un script Oracle avec les mêmes tables, clés, index et données. Chaque valeur que Oracle ne peut pas contenir telle quelle, et chaque objet qu'il ne reprend pas, est listé dans le rapport.

[Guide de migration de MariaDB vers Oracle](https://intosql.com/docs/migrations/mariadb-to-oracle)

[Types de données de MariaDB vers Oracle](https://intosql.com/docs/types/mariadb-to-oracle)

## Ce qui change de MariaDB à Oracle

Chaque ligne est une règle appliquée par le convertisseur, avec la ligne de rapport qu'il écrit quand la règle change quelque chose dans vos données.

| Dans MariaDB | Dans Oracle | Ligne du rapport |
| --- | --- | --- |
| TINYINT(1), BOOL | NUMBER(1) avec un CHECK de 0 et 1 si chaque valeur vaut 0 ou 1, sinon NUMBER(3) | `bool_kept_numeric` |
| UNSIGNED integers | NUMBER assez large pour la plage, avec un CHECK qui interdit les négatifs |  |
| ZEROFILL and display widths | supprimé | `zerofill_dropped` |
| FLOAT(M,D) | BINARY_FLOAT ou BINARY_DOUBLE, sans l'échelle | `float_scale_dropped` |
| DECIMAL(p,s) | NUMBER(p,s) jusqu'à 38 chiffres ; VARCHAR2 au-delà | `decimal_as_text` |
| BIT(1), BIT(n) | NUMBER(1), NUMBER(19) jusqu'à 63 bits, NUMBER(20) pour BIT(64) |  |
| zero, partial or impossible dates (0000-00-00, 2024-02-30) | NULL | `invalid_date_null` |
| NOT NULL columns with values that become NULL | NOT NULL retiré | `not_null_relaxed` |
| empty strings and empty binary values | NULL | `empty_string_null` |
| DEFAULT '0000-00-00' | aucune valeur par défaut | `zero_date_default` |
| TIME | INTERVAL DAY TO SECOND, qui contient des durées |  |
| YEAR | NUMBER(4) avec un CHECK de sa plage |  |
| CHAR(n), VARCHAR(n) | VARCHAR2(n CHAR), en caractères |  |
| VARCHAR(n) and TEXT longer than 4000 bytes | CLOB | `text_as_lob` |
| DATETIME | TIMESTAMP |  |
| TIMESTAMP | TIMESTAMP WITH TIME ZONE dans le fuseau indiqué par le dump, UTC s'il n'en indique aucun | `timestamp_zone_assumed` |
| ENUM | VARCHAR2 avec un CHECK de ses valeurs |  |
| ENUM holding '' (MySQL's error value) | NULL |  |
| ENUM holding values outside its list | pas de CHECK | `enum_check_skipped` |
| SET | VARCHAR2 tel que MySQL l'écrit ('a,b') |  |
| JSON | CLOB |  |
| NUL bytes in text | conservé |  |
| text that isn't valid in its character set | les octets invalides deviennent le caractère de remplacement | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | copié tel quel | `mojibake_suspected` |
| AUTO_INCREMENT | GENERATED BY DEFAULT ON NULL AS IDENTITY, redémarré après les identifiants copiés |  |
| MyISAM AUTO_INCREMENT on the second column of a key | un seul compteur pour la table | `myisam_group_autoincrement` |
| ON UPDATE CURRENT_TIMESTAMP | un déclencheur BEFORE UPDATE | `on_update_trigger` |
| generated columns | colonnes virtuelles | `stored_as_virtual` |
| generated columns with functions Oracle lacks | une colonne simple | `generated_not_translated` |
| INVISIBLE columns | colonnes INVISIBLE |  |
| CHECK constraints | traduites, en ligne dans CREATE TABLE |  |
| CHECK constraints with functions Oracle lacks | non créée | `check_skipped` |
| CHECK ... NOT ENFORCED | non créée | `check_not_enforced` |
| defaults with functions Oracle lacks | aucune valeur par défaut | `default_not_translated` |
| keys and indexes on a prefix, c(20) | un index sur SUBSTR de la colonne | `prefix_unique` |
| FULLTEXT indexes | non créée | `fulltext_not_created` |
| SPATIAL indexes | non créée | `spatial_index_not_created` |
| functional indexes, and indexes on whole CLOB or BLOB columns | non créé | `index_skipped` |
| foreign keys | après les données ENABLE NOVALIDATE, puis validée avec un avertissement sur les orphelins |  |
| ON UPDATE CASCADE, SET NULL or SET DEFAULT; ON DELETE SET DEFAULT | supprimé | `foreign_key_action_unsupported` |
| foreign keys to columns without a unique key | non créée | `foreign_key_skipped` |
| table and column names | en majuscules pour les noms simples, sinon tels qu'écrits | `identifier_renamed` |
| names over 128 bytes | raccourci | `name_shortened` |
| GEOMETRY, POINT, POLYGON... | BLOB contenant du WKB | `geometry_as_blob` |
| INET4, INET6, UUID (MariaDB) | VARCHAR2(39), VARCHAR2(36) |  |
| BINARY, VARBINARY, BLOB | RAW jusqu'à 2000 octets, sinon BLOB |  |
| PARTITION BY | une seule table | `partitions_dropped` |
| WITH SYSTEM VERSIONING (MariaDB) | une table avec les lignes actuelles | `system_versioning_dropped` |
| MyISAM, MEMORY and other engines | une table ordinaire | `engine_dropped` |
| views, triggers, procedures, functions and events | listés dans le rapport | `not_converted_objects` |
| dumps without CREATE TABLE | types déduits des valeurs | `no_schema` |
| geometries in a dump without CREATE TABLE | BLOB contenant du WKB | `geometry_inferred` |
| _ci collations | comparaison exacte | `case_insensitive_collation` |
| SET NAMES utf8 from utf8mb4 tables | converti, avec un avertissement | `dump_lost_four_byte_chars` |
| dumps without SET NAMES whose text isn't UTF-8 | lu comme Latin-1 (Windows-1252) | `charset_guessed` |
| sjis, cp932, gbk, big5 dumps | lu comme UTF-8, avec un avertissement | `unsupported_charset` |
| UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rows | évaluées |  |
| other expressions in rows | NULL | `expression_value` |
| DEFAULT in VALUES | la valeur par défaut de la colonne | `default_keyword_filled` |
| DEFAULT in VALUES without a literal default | NULL | `default_keyword_null` |
| REPLACE and INSERT IGNORE | lignes simples | `replace_as_insert` |
| types IntoSQL doesn't know | CLOB | `unknown_type` |
| values that don't fit their column | NULL | `invalid_value_null` |
| unreadable geometries | NULL | `bad_geometry` |
| dumps of several databases | un seul schéma, chaque table préfixée par le nom de sa base | `databases_merged` |
| CREATE SEQUENCE (MariaDB) | CREATE SEQUENCE, à la valeur atteinte |  |
| VECTOR(n) (MariaDB 11.7+) | CLOB avec les flottants en tableau JSON | `type_replaced` |

## Charger le script dans Oracle

Le script crée les tables, copie les lignes, puis ajoute les clés, les index et les clés étrangères ; il se charge donc vite et s'arrête à la première erreur.

```shell
NLS_LANG=.AL32UTF8 sqlplus -S -L user@//localhost/mydb @mariadb.oracle.sql
```

Les clés étrangères sont ajoutées ENABLE NOVALIDATE, donc les nouvelles lignes sont vérifiées tout de suite, puis validées. Si une ancienne ligne pointe vers une ligne qui n'existe pas, le script indique quelle contrainte et la laisse non validée, au lieu d'échouer à mi-chemin.

Pour un gros dump, exécutez SQL*Plus sur la machine de la base de données. Le script valide toutes les 100 lignes. L'utilisateur qui l'exécute a besoin de CREATE TABLE, CREATE SEQUENCE, CREATE TRIGGER et CREATE PROCEDURE, et d'un quota sur son tablespace.

## Faire le dump MariaDB pour un meilleur résultat

Le convertisseur lit ce que contient le dump. Ces options y gardent davantage de vos données :

- --default-character-set=utf8mb4 garde les emoji et autres caractères sur 4 octets, qu'un dump utf8mb3 perd avant que le convertisseur ne le voie.
- --hex-blob écrit les colonnes binaires et les valeurs VECTOR en hexadécimal, ce qui résiste aux copies entre systèmes.
- --routines --triggers --events ajoutent ces objets au dump, pour que le rapport puisse les lister.

## Ce qui n'est pas converti

Les vues, déclencheurs, procédures stockées, fonctions et événements sont écrits dans le langage propre à MariaDB. Ils sont listés par nom dans le rapport, jamais supprimés en silence, pour que vous puissiez les réécrire pour Oracle.

## Questions sur MariaDB vers Oracle

### Mon dump est-il envoyé ?

Non. Le convertisseur s'exécute dans votre navigateur et lit le dump depuis votre disque par morceaux ; il ne quitte donc jamais votre ordinateur. L'application de bureau et la ligne de commande convertissent aussi sur votre ordinateur.

### Quelle taille peut avoir le dump ?

Le convertisseur ne garde jamais tout le dump en mémoire : il lit le fichier deux fois, par plages, et écrit le script au fur et à mesure. Les dumps de plusieurs gigaoctets se convertissent dans le navigateur, dans l'application de bureau et avec la ligne de commande.

### De quelles versions de MariaDB le dump peut-il venir ?

Les dumps de mariadb-dump et mysqldump sur MariaDB 10.3 à 12, avec un INSERT par table ou un par ligne. Chaque dump de test vient de MariaDB 10.11, 11.4 et 11.8 et est comparé à sa source cellule par cellule.

### Les colonnes UUID, INET6, JSON et VECTOR sont-elles conservées ?

Les colonnes UUID et INET deviennent VARCHAR2, JSON CLOB, et VECTOR un tableau JSON de ses flottants. Les dates zéro deviennent NULL, tout comme les chaînes vides, car Oracle les stocke ainsi.

### Les valeurs AUTO_INCREMENT et les séquences sont-elles conservées ?

Oui. Chaque colonne AUTO_INCREMENT devient une colonne d'identité qui reprend après l'identifiant le plus élevé. Les séquences deviennent des séquences Oracle, et les valeurs par défaut qui puisent dans une séquence continuent d'y puiser.

### Et les procédures stockées et les déclencheurs ?

Ils sont listés par nom dans le rapport et ne sont pas convertis, car chaque base de données les écrit dans son propre langage.

### Sur quelles versions de Oracle le script se charge-t-il ?

Oracle 19c et versions ultérieures. Chaque dump de test se charge sur 21c et 23ai, et s'arrête à la première erreur en cas de problème.

## Depuis MariaDB

- [MariaDB vers PostgreSQL](https://intosql.com/fr/mariadb-en-postgresql)
- [MariaDB vers MySQL](https://intosql.com/fr/mariadb-en-mysql)
- [MariaDB vers MariaDB](https://intosql.com/fr/mariadb-en-mariadb)
- [MariaDB vers SQLite](https://intosql.com/fr/mariadb-en-sqlite)
- [MariaDB vers SQL Server](https://intosql.com/fr/mariadb-en-sql-server)

## Vers Oracle

- [MySQL vers Oracle](https://intosql.com/fr/mysql-en-oracle)
- [PostgreSQL vers Oracle](https://intosql.com/fr/postgresql-en-oracle)
- [SQL Server vers Oracle](https://intosql.com/fr/sql-server-en-oracle)
- [SQLite vers Oracle](https://intosql.com/fr/sqlite-en-oracle)
- [Oracle vers Oracle](https://intosql.com/fr/oracle-en-oracle)

## Guide et toutes les paires

- [Oracle vers MariaDB](https://intosql.com/fr/oracle-en-mariadb)
- [Guide de migration de MariaDB vers Oracle](https://intosql.com/docs/migrations/mariadb-to-oracle)
- [Types de données de MariaDB vers Oracle](https://intosql.com/docs/types/mariadb-to-oracle)
- [Toutes les paires de bases de données](https://intosql.com/fr/migration-de-base-de-donnees)
