---
title: "Migrer une base Oracle vers SQLite"
description: "Migrez une base Oracle vers SQLite : convertissez un export SQL Developer ou SQLcl en script avec les mêmes tables, clés et données, et un rapport."
canonical: https://intosql.com/fr/oracle-en-sqlite
last_updated: 2026-10-15
---

# Migrer une base Oracle vers SQLite

Déposez le fichier .sql qu'écrit Database Export de SQL Developer ou SQLcl, avec ses tables et ses instructions Insert, et téléchargez un script SQLite avec les mêmes tables, clés, index et données. Chaque valeur que SQLite ne peut pas contenir telle quelle, et chaque objet qu'il ne reprend pas, est listé dans le rapport.

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

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

## Ce qui change de Oracle à SQLite

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 Oracle | Dans SQLite | Ligne du rapport |
| --- | --- | --- |
| BOOLEAN (23ai) | INTEGER 0 ou 1 avec un CHECK |  |
| VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONG | TEXT |  |
| NUMBER, NUMBER(p,s), FLOAT(b) | INTEGER, ou NUMERIC gardé exact en texte au-delà de 15 chiffres | `decimal_as_text` |
| INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND | TEXT avec le texte d'Oracle, comme +01-06 | `type_replaced` |
| DATE, TIMESTAMP(p) | DATETIME en texte ISO 8601, chaque chiffre gardé |  |
| TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE | TIMESTAMP en texte ISO 8601 en UTC | `moments_as_utc` |
| JSON (21c), and CLOB holding JSON | TEXT |  |
| BLOB, RAW(n), LONG RAW | BLOB |  |
| ROWID, UROWID, XMLTYPE, SDO_GEOMETRY | TEXT | `type_replaced` |
| collations that ignore case (BINARY_CI) | comparaison exacte | `case_insensitive_collation` |
| identity columns, and a sequence a BEFORE INSERT trigger assigns | INTEGER PRIMARY KEY AUTOINCREMENT, qui reprend après l'identifiant le plus élevé |  |
| identity columns the target can't count | INTEGER sans compteur | `counter_dropped` |
| CREATE SEQUENCE | non créée | `sequence_not_converted` |
| virtual columns (GENERATED ALWAYS AS ... VIRTUAL) | GENERATED ALWAYS AS, STORED si PERSISTED, VIRTUAL sinon |  |
| virtual columns with functions IntoSQL doesn't write, and the || operator | une colonne simple | `generated_not_translated` |
| defaults with functions IntoSQL doesn't write (SYS_GUID(), ||) | aucune valeur par défaut | `default_not_translated` |
| CHECK constraints | traduites |  |
| CHECK constraints with functions IntoSQL doesn't write | non créée | `check_skipped` |
| CHECK constraints that are DISABLE or ENABLE NOVALIDATE | non créée | `check_not_enforced` |
| function-based, bitmap and domain indexes | non créée | `index_skipped` |
| foreign keys | dans CREATE TABLE, chargées sans vérification, puis listées par PRAGMA foreign_key_check |  |
| foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE ones | non créée | `foreign_key_skipped` |
| partitioned tables | une seule table avec les lignes de chaque partition | `partitions_dropped` |
| several schemas in one export | un seul fichier, tables préfixées par le nom de leur schéma | `schemas_merged` |
| NOT NULL columns with values that become NULL | NOT NULL retiré | `not_null_relaxed` |
| views, synonyms, types, packages, procedures, functions and other triggers | listés dans le rapport | `not_converted_objects` |
| exports without CREATE TABLE (data only) | types déduits des valeurs | `no_schema` |
| expressions in INSERT values other than the ones exports write | NULL | `expression_value` |
| types IntoSQL doesn't know, and object types | TEXT | `unknown_type` |
| dates before year 1 and time zones given as region names | NULL | `date_out_of_range` |
| NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLE | Infinity en 9e999 ; NaN en NULL |  |
| NUL characters in text | conservé |  |
| text that isn't valid in its encoding | les octets invalides deviennent le caractère de remplacement | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | copié tel quel | `mojibake_suspected` |

## Charger le script dans SQLite

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
sqlite3 -bail mydb.sqlite < oracle.sqlite.sql
```

Les clés étrangères sont déclarées dans chaque table et les lignes se chargent sans vérification des clés étrangères. Le script liste ensuite toute ligne qui pointe vers une ligne qui n'existe pas, au lieu d'échouer à mi-chemin.

Pour un gros dump, chargez-le dans un nouveau fichier sur un disque local. Le script charge tout dans une seule transaction sans synchronisation, il va donc à la vitesse du disque, et un chargement interrompu ne laisse aucune table partielle.

La ligne de commande charge le fichier directement dans une base SQLite, sans écrire de script. C'est gratuit.

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

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

- Dans SQL Developer, choisissez Tools, Database Export, avec DDL et le format de données Insert. SQLcl écrit la même chose avec SET SQLFORMAT INSERT.
- Exécutez ALTER SESSION SET NLS_DATE_FORMAT = 'SYYYY-MM-DD HH24:MI:SS' avant l'export : le format par défaut écrit les dates sans leur heure ni leur siècle.
- Un fichier .dmp de exp ou expdp est binaire : importez-le dans une base Oracle, par exemple Oracle Database Free dans Docker, et exportez-le avec SQL Developer.

## Ce qui n'est pas converti

Les vues, packages, procédures, fonctions, déclencheurs, types et synonymes sont écrits en PL/SQL. Ils sont listés par nom dans le rapport, jamais supprimés en silence, pour que vous puissiez les réécrire pour SQLite.

## Questions sur Oracle vers SQLite

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

### Puis-je convertir un fichier .dmp de exp ou expdp ?

Pas directement : Data Pump et l'Export d'origine écrivent un format binaire que seul Oracle lit. Importez-le dans n'importe quelle base Oracle, Oracle Database Free tourne dans Docker, et exportez-le avec Database Export de SQL Developer ou SQLcl. Le convertisseur le signale quand il reçoit un fichier .dmp.

### De quelles versions de Oracle l'export peut-il venir ?

Les exports de SQL Developer et SQLcl, avec les définitions de tables de DBMS_METADATA, depuis Oracle 11g. Chaque export de test vient de Oracle 21c et 23ai, dans des sessions américaine, allemande et ISO, et est comparé à sa source cellule par cellule.

### Que deviennent NUMBER, DATE et les autres types Oracle ?

NUMBER devient INTEGER pour les nombres entiers et garde chaque chiffre sinon ; DATE devient du texte DATETIME avec son heure ; CLOB TEXT, BLOB et RAW BLOB. Infinity est conservé ; NaN devient NULL.

### Les colonnes d'identité et les séquences sont-elles gardées ?

Une colonne d'identité qui forme toute la clé primaire de la table devient INTEGER PRIMARY KEY AUTOINCREMENT et reprend après l'identifiant le plus élevé. SQLite n'a pas de séquences ; elles sont donc signalées.

### Et les packages, procédures et déclencheurs PL/SQL ?

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 SQLite le script se charge-t-il ?

SQLite 3.31 et versions ultérieures. Chaque export de test se charge sur 3.31 et 3.54, et s'arrête à la première erreur en cas de problème.

## Depuis Oracle

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

## Vers SQLite

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

## Guide et toutes les paires

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