---
title: "Migrar SQLite a Oracle en tu navegador"
description: "Migra una base de datos SQLite a Oracle: convierte el archivo .db o su volcado en un script con las mismas tablas, claves y datos, y un informe de cambios."
canonical: https://intosql.com/es/sqlite-a-oracle
last_updated: 2026-10-15
---

# Migrar SQLite a Oracle en tu navegador

Suelta un archivo de base de datos SQLite (.db, .sqlite, .sqlite3) o el SQL que escribe .dump de sqlite3, y descarga un script de Oracle con las mismas tablas, claves, índices y datos. Cada columna recibe el tipo en el que caben sus valores, y cada valor que Oracle no puede guardar tal cual aparece en el informe.

[Guía de migración de SQLite a Oracle](https://intosql.com/docs/migrations/sqlite-to-oracle)

[Tipos de datos de SQLite a Oracle](https://intosql.com/docs/types/sqlite-to-oracle)

## Qué cambia de SQLite a Oracle

Cada fila es una regla que aplica el convertidor, con la línea que escribe en el informe cuando la regla cambia algo en tus datos.

| En SQLite | En Oracle | Línea del informe |
| --- | --- | --- |
| declared types (any text: VARCHAR(255), DATETIME, BOOLEAN, JSON or none) | el tipo en el que caben todos los valores de la columna |  |
| BOOLEAN, BOOL | NUMBER(1) con un CHECK de 0 y 1 |  |
| TEXT, VARCHAR(n), CHAR(n), CLOB | VARCHAR2(n CHAR) cuando cada valor cabe, si no CLOB |  |
| TEXT and VARCHAR(n) longer than 4000 bytes | VARCHAR2(4000 CHAR) cuando cada valor cabe en 4000 bytes (750 caracteres en una clave), si no CLOB | `text_as_lob` |
| DECIMAL(p,s), NUMERIC | el tipo exacto cuando cada valor cabe en él, si no un double |  |
| BLOB, and columns holding bytes | BLOB |  |
| DATE, DATETIME, TIMESTAMP holding ISO 8601 text | DATE o TIMESTAMP(p), según lo que contengan los valores |  |
| JSON holding JSON text | CLOB |  |
| Infinity in REAL columns | se conserva como BINARY_DOUBLE_INFINITY |  |
| INTEGER PRIMARY KEY, AUTOINCREMENT | GENERATED BY DEFAULT ON NULL AS IDENTITY, siguiendo después del id más alto o del valor de sqlite_sequence |  |
| COLLATE NOCASE | comparación exacta | `case_insensitive_collation` |
| generated columns | columnas virtuales | `stored_as_virtual` |
| generated columns with functions IntoSQL doesn't write, and the || operator | una columna simple | `generated_not_translated` |
| defaults with functions IntoSQL doesn't write (strftime, randomblob) | sin valor predeterminado | `default_not_translated` |
| CHECK constraints | traducidos |  |
| CHECK constraints with functions IntoSQL doesn't write | no se crea | `check_skipped` |
| partial and expression indexes | no se crea | `index_skipped` |
| foreign keys (unenforced unless PRAGMA foreign_keys=ON) | después de los datos, ENABLE NOVALIDATE, luego validada |  |
| ON UPDATE CASCADE, SET NULL or SET DEFAULT; ON DELETE SET DEFAULT | se descarta | `foreign_key_action_unsupported` |
| empty strings and empty blobs | NULL | `empty_string_null` |
| foreign keys to tables the dump doesn't create | no se crea | `foreign_key_skipped` |
| primary keys holding NULL, and NOT NULL columns with values that become NULL | sin NOT NULL | `not_null_relaxed` |
| views, triggers and virtual tables (FTS, R*Tree) | listados en el informe | `not_converted_objects` |
| dumps without CREATE TABLE (--data-only) | tipos leídos de los valores | `no_schema` |
| expressions in INSERT values other than the text functions dumps write | NULL | `expression_value` |
| NUL characters in text | se conserva |  |
| text that isn't valid UTF-8 | los bytes incorrectos como carácter de reemplazo | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | se copia tal cual | `mojibake_suspected` |

## Carga el script en Oracle

El script crea las tablas, copia las filas y luego agrega claves, índices y claves foráneas, así que carga rápido y se detiene en el primer error.

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

Las claves foráneas se agregan ENABLE NOVALIDATE, así que las filas nuevas se comprueban de inmediato, y luego se validan. Si una fila antigua apunta a una fila que no existe, el script dice qué restricción es y la deja sin validar, en lugar de fallar a medias.

Para un volcado grande, ejecuta SQL*Plus en la misma máquina que la base de datos. El script confirma cada 100 filas. El usuario que lo ejecuta necesita CREATE TABLE, CREATE SEQUENCE, CREATE TRIGGER y CREATE PROCEDURE, y cuota en su tablespace.

## Haz el volcado de SQLite para el mejor resultado

El convertidor lee lo que contiene el volcado. Estas opciones conservan más de tus datos en él:

- El archivo de la base de datos se convierte tal cual, leído página por página en tu navegador. Cierra primero la app que escribe en él, para que ningún cambio se quede en su archivo -wal.
- sqlite3 app.db .dump > app.sql escribe la misma base de datos como SQL, que también se convierte, en .sql o .sql.gz.
- DB Browser for SQLite escribe ese SQL con File, Export, Database to SQL file, y también lo hace iterdump() de Python.

## Qué no se convierte

Las vistas y los disparadores se escriben en el lenguaje propio de SQLite. Aparecen en el informe por nombre, nunca se descartan en silencio, para que puedas reescribirlos para Oracle. Las tablas virtuales, como FTS5 y R*Tree, también aparecen, y sus tablas internas se dejan fuera.

## Preguntas sobre SQLite a Oracle

### ¿Se sube mi volcado?

No. El convertidor se ejecuta en tu navegador y lee el volcado de tu disco por partes, así que nunca sale de tu computadora. La app de escritorio y la línea de comandos también convierten en tu computadora.

### ¿Qué tan grande puede ser el volcado?

El convertidor nunca tiene todo el volcado en memoria: lee el archivo dos veces, por rangos, y escribe el script sobre la marcha. Los volcados de varios gigabytes se convierten en el navegador, en la app de escritorio y con la línea de comandos.

### ¿Puedo convertir directamente el archivo .db?

Sí. Suelta el archivo .db, .sqlite o .sqlite3: se lee en tu navegador y nunca se sube. El texto con caracteres NUL y cada dígito de un double llegan tal como están guardados, algo que un .dump puede recortar.

### ¿De qué versiones de SQLite puede venir el volcado?

Archivos de base de datos de SQLite 3.0 en adelante, en UTF-8 o UTF-16, y volcados del .dump del shell sqlite3 o de iterdump() de Python. Cada archivo y volcado de prueba viene de sqlite3 3.31 a 3.54, con tablas STRICT y WITHOUT ROWID incluidas, y se compara con su origen celda por celda.

### ¿Cómo se deciden los tipos de columna si SQLite no los aplica?

El tipo declarado es una pista y los valores deciden: una columna se vuelve NUMBER, BINARY_DOUBLE, DATE, TIMESTAMP, BLOB, VARCHAR2 o CLOB cuando cada valor cabe en ese tipo. Las cadenas vacías se vuelven NULL, como las guarda Oracle, y el informe las cuenta.

### ¿Se conservan INTEGER PRIMARY KEY y AUTOINCREMENT?

Sí. Una INTEGER PRIMARY KEY se vuelve una columna de identidad, cada fila conserva su id, y el siguiente id sigue después del más alto, o después del valor de sqlite_sequence con AUTOINCREMENT.

### ¿Qué pasa con las vistas y los disparadores?

Aparecen en el informe por nombre y no se convierten, porque cada base de datos los escribe en su propio lenguaje.

### ¿En qué versiones de Oracle carga el script?

Oracle 19c y posteriores. Cada volcado de prueba carga en 21c y 23ai, y se detiene en el primer error si algo sale mal.

## Desde SQLite

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

## Hacia Oracle

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

## Guía y todos los pares

- [Oracle a SQLite](https://intosql.com/es/oracle-a-sqlite)
- [Guía de migración de SQLite a Oracle](https://intosql.com/docs/migrations/sqlite-to-oracle)
- [Tipos de datos de SQLite a Oracle](https://intosql.com/docs/types/sqlite-to-oracle)
- [Todos los pares de bases de datos](https://intosql.com/es/migracion-de-bases-de-datos)
