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

# Migrer une base SQLite vers Oracle

Déposez un fichier de base de données SQLite (.db, .sqlite, .sqlite3) ou le SQL qu'écrit le .dump de sqlite3, et téléchargez un script Oracle avec les mêmes tables, clés, index et données. Chaque colonne reçoit le type auquel ses valeurs correspondent, et chaque valeur que Oracle ne peut pas contenir telle quelle est listée dans le rapport.

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

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

## Ce qui change de SQLite à 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 SQLite | Dans Oracle | Ligne du rapport |
| --- | --- | --- |
| declared types (any text: VARCHAR(255), DATETIME, BOOLEAN, JSON or none) | le type auquel chaque valeur de la colonne correspond |  |
| BOOLEAN, BOOL | NUMBER(1) avec un CHECK de 0 et 1 |  |
| TEXT, VARCHAR(n), CHAR(n), CLOB | VARCHAR2(n CHAR) si chaque valeur y tient, sinon CLOB |  |
| TEXT and VARCHAR(n) longer than 4000 bytes | VARCHAR2(4000 CHAR) si chaque valeur tient en 4000 octets (750 caractères dans une clé), sinon CLOB | `text_as_lob` |
| DECIMAL(p,s), NUMERIC | le type exact si chaque valeur y tient, sinon un double |  |
| BLOB, and columns holding bytes | BLOB |  |
| DATE, DATETIME, TIMESTAMP holding ISO 8601 text | DATE ou TIMESTAMP(p), selon ce que contiennent les valeurs |  |
| JSON holding JSON text | CLOB |  |
| Infinity in REAL columns | gardé en BINARY_DOUBLE_INFINITY |  |
| INTEGER PRIMARY KEY, AUTOINCREMENT | GENERATED BY DEFAULT ON NULL AS IDENTITY, qui reprend après l'identifiant le plus élevé ou celui de sqlite_sequence |  |
| COLLATE NOCASE | comparaison exacte | `case_insensitive_collation` |
| generated columns | colonnes virtuelles | `stored_as_virtual` |
| generated columns with functions IntoSQL doesn't write, and the || operator | une colonne simple | `generated_not_translated` |
| defaults with functions IntoSQL doesn't write (strftime, randomblob) | aucune valeur par défaut | `default_not_translated` |
| CHECK constraints | traduites |  |
| CHECK constraints with functions IntoSQL doesn't write | non créée | `check_skipped` |
| partial and expression indexes | non créée | `index_skipped` |
| foreign keys (unenforced unless PRAGMA foreign_keys=ON) | après les données ENABLE NOVALIDATE, puis validées |  |
| ON UPDATE CASCADE, SET NULL or SET DEFAULT; ON DELETE SET DEFAULT | supprimé | `foreign_key_action_unsupported` |
| empty strings and empty blobs | NULL | `empty_string_null` |
| foreign keys to tables the dump doesn't create | non créée | `foreign_key_skipped` |
| primary keys holding NULL, and NOT NULL columns with values that become NULL | NOT NULL retiré | `not_null_relaxed` |
| views, triggers and virtual tables (FTS, R*Tree) | listés dans le rapport | `not_converted_objects` |
| dumps without CREATE TABLE (--data-only) | types déduits des valeurs | `no_schema` |
| expressions in INSERT values other than the text functions dumps write | NULL | `expression_value` |
| NUL characters in text | conservé |  |
| text that isn't valid UTF-8 | les octets invalides deviennent le caractère de remplacement | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | copié tel quel | `mojibake_suspected` |

## 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 @sqlite.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 SQLite pour un meilleur résultat

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

- Le fichier de base de données lui-même se convertit tel quel, lu page par page dans votre navigateur. Fermez d'abord l'application qui y écrit, pour qu'aucun changement ne reste dans son fichier -wal.
- sqlite3 app.db .dump > app.sql écrit la même base de données en SQL, qui se convertit aussi, en .sql ou .sql.gz.
- DB Browser for SQLite écrit ce SQL avec File, Export, Database to SQL file, tout comme iterdump() de Python.

## Ce qui n'est pas converti

Les vues et les déclencheurs sont écrits dans le langage propre à SQLite. Ils sont listés par nom dans le rapport, jamais supprimés en silence, pour que vous puissiez les réécrire pour Oracle. Les tables virtuelles, comme FTS5 et R*Tree, sont listées aussi, et leurs tables internes sont omises.

## Questions sur SQLite 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.

### Puis-je convertir le fichier .db lui-même ?

Oui. Déposez le fichier .db, .sqlite ou .sqlite3 : il est lu dans votre navigateur et jamais envoyé. Le texte avec des caractères NUL et chaque chiffre d'un double arrivent tels qu'ils sont stockés, ce qu'un .dump peut tronquer.

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

Les fichiers de base de données de SQLite 3.0 et après, en UTF-8 ou UTF-16, et les dumps du .dump du shell sqlite3 ou de iterdump() de Python. Chaque fichier et dump de test vient de sqlite3 3.31 à 3.54, tables STRICT et WITHOUT ROWID comprises, et est comparé à sa source cellule par cellule.

### Comment les types de colonnes sont-ils décidés quand SQLite ne les impose pas ?

Le type déclaré est une indication et les valeurs décident : une colonne devient NUMBER, BINARY_DOUBLE, DATE, TIMESTAMP, BLOB, VARCHAR2 ou CLOB quand chaque valeur y correspond. Les chaînes vides deviennent NULL, comme Oracle les stocke, et le rapport les compte.

### INTEGER PRIMARY KEY et AUTOINCREMENT sont-ils conservés ?

Oui. Un INTEGER PRIMARY KEY devient une colonne d'identité, chaque ligne garde son identifiant, et le prochain identifiant reprend après le plus élevé, ou après la valeur de sqlite_sequence avec AUTOINCREMENT.

### Et les vues 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 SQLite

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

## Vers Oracle

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

## Guide et toutes les paires

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