Saltar al contenido
Inicio de IntoSQL

Convierte Oracle a SQLite

Suelta el archivo .sql que escribe Database Export de SQL Developer o SQLcl, con sus tablas y sentencias Insert, y descarga un script de SQLite con las mismas tablas, claves, índices y datos. Cada valor que SQLite no puede guardar tal cual, y cada objeto que no admite, aparece en el informe.

Tu archivo
sqlshop_2024_oracle.sqlArchivo de ejemplo, 9,3 kB
Tu base de datos

18 filas convertidas, sin correcciones, ninguna rechazada

Mostrar

Tablas en shop_2024_oracle.sqlVolcado de Oracle · escrito por SQL Developer · utf-8

  • customers8 filas
    7 columnas
    idINTEGER not null
    nameVARCHAR(100) not null
    emailVARCHAR(150) not null
    countryVARCHAR(2) not null
    is_activeINTEGER not null
    signed_upDATETIME
    created_atDATETIME not null
  • orders10 filas
    9 columnas
    idINTEGER not null
    customer_idINTEGER not null
    invoiceINTEGER
    statusVARCHAR(10) not null
    totalDECIMAL(10,2) not null
    itemsINTEGER not null
    ordered_atDATETIME not null
    shipped_atDATETIME
    noteVARCHAR(255)
-- Written by IntoSQL from a Oracle dump. Load it with: sqlite3 -bail <database> < <file>
PRAGMA foreign_keys = OFF;
PRAGMA synchronous = OFF;
BEGIN;

CREATE TABLE customers ( -- People who bought at least once
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(150) NOT NULL,
    country VARCHAR(2) DEFAULT 'US' NOT NULL,
    is_active INTEGER DEFAULT 1 NOT NULL,
    signed_up DATETIME,
    created_at DATETIME DEFAULT (datetime('now', 'localtime')) NOT NULL,
    CONSTRAINT customers_check1 CHECK (is_active IN (0, 1))
);

CREATE TABLE orders (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    customer_id INTEGER NOT NULL,
    invoice INTEGER,
    status VARCHAR(10) DEFAULT 'pending' NOT NULL,
    total DECIMAL(10,2) NOT NULL,
    items INTEGER DEFAULT 1 NOT NULL,
    ordered_at DATETIME NOT NULL,
    shipped_at DATETIME,
    note VARCHAR(255),
    CONSTRAINT orders_check1 CHECK (status IN ('pending', 'paid', 'shipped', 'cancelled')),
    CONSTRAINT orders_customer_fk FOREIGN KEY (customer_id) REFERENCES customers (id)
);

INSERT INTO customers (id, name, email, country, is_active, signed_up, created_at) VALUES
(1,'Ana Martínez','ana@example.com','MX',1,'2023-01-15 00:00:00','2023-01-15 10:24:00.000000000');
INSERT INTO customers (id, name, email, country, is_active, signed_up, created_at) VALUES
(2,'Zoë Müller','zoe@example.de','DE',1,'2023-02-03 00:00:00','2023-02-03 08:11:42.000000000');
INSERT INTO customers (id, name, email, country, is_active, signed_up, created_at) VALUES
(3,'José Peña','jose@example.es','ES',0,'2023-03-21 00:00:00','2023-03-21 19:05:17.000000000');
INSERT INTO customers (id, name, email, country, is_active, signed_up, created_at) VALUES
(4,'李雷','lilei@example.cn','CN',1,'2023-05-09 00:00:00','2023-05-09 02:40:00.000000000');
INSERT INTO customers (id, name, email, country, is_active, signed_up, created_at) VALUES
(5,'Noah O''Brien','noah@example.ie','IE',1,NULL,'2023-06-30 14:00:00.000000000');
INSERT INTO customers (id, name, email, country, is_active, signed_up, created_at) VALUES
(6,'Amélie Laurent','amelie@example.fr','FR',1,'2024-01-02 00:00:00','2024-01-02 09:30:00.000000000');
INSERT INTO customers (id, name, email, country, is_active, signed_up, created_at) VALUES
(7,'Ravi Patel','ravi@example.in','IN',0,'2024-02-29 00:00:00','2024-02-29 23:59:59.000000000');
INSERT INTO customers (id, name, email, country, is_active, signed_up, created_at) VALUES
(8,'Sofia Rossi 🌻','sofia@example.it','IT',1,'2024-04-12 00:00:00','2024-04-12 12:12:12.000000000');
INSERT INTO orders (id, customer_id, invoice, status, total, items, ordered_at, shipped_at, note) VALUES
(1,1,1000,'shipped',129.9,3,'2024-03-01 10:00:00','2024-03-02 16:30:00',NULL);
INSERT INTO orders (id, customer_id, invoice, status, total, items, ordered_at, shipped_at, note) VALUES
(2,2,1001,'paid',54,1,'2024-03-02 11:15:00',NULL,'Gift wrap 🎁');
INSERT INTO orders (id, customer_id, invoice, status, total, items, ordered_at, shipped_at, note) VALUES
(3,1,1002,'cancelled',12.5,1,'2024-03-03 09:45:00',NULL,'Customer changed their mind');
INSERT INTO orders (id, customer_id, invoice, status, total, items, ordered_at, shipped_at, note) VALUES
(4,4,1003,'shipped',980,12,'2024-03-05 02:10:00','2024-03-07 08:00:00','请小心轻放');
INSERT INTO orders (id, customer_id, invoice, status, total, items, ordered_at, shipped_at, note) VALUES
(5,5,1004,'pending',45.75,2,'2024-03-08 17:20:00',NULL,'Leave at the door; ring twice');
INSERT INTO orders (id, customer_id, invoice, status, total, items, ordered_at, shipped_at, note) VALUES
(6,6,1005,'shipped',310.4,5,'2024-03-10 13:00:00','2024-03-11 09:00:00','Fragile: "glass"');
INSERT INTO orders (id, customer_id, invoice, status, total, items, ordered_at, shipped_at, note) VALUES
(7,8,1006,'paid',76.2,2,'2024-03-11 18:45:00',NULL,NULL);
INSERT INTO orders (id, customer_id, invoice, status, total, items, ordered_at, shipped_at, note) VALUES
(8,2,1007,'paid',19.99,1,'2024-03-12 08:00:00',NULL,'Paid at the counter');
INSERT INTO orders (id, customer_id, invoice, status, total, items, ordered_at, shipped_at, note) VALUES
(9,3,1008,'shipped',64,2,'2024-03-14 15:30:00',NULL,'Shipping date never recorded');
INSERT INTO orders (id, customer_id, invoice, status, total, items, ordered_at, shipped_at, note) VALUES
(10,7,1009,'paid',1499,1,'2024-03-15 21:05:00',NULL,'C:\Users\ravi\invoice.pdf');

-- Indexes, triggers and counters, after the rows so each index builds once.
CREATE UNIQUE INDEX customers_customers_email_uk ON customers (email);
CREATE INDEX orders_orders_status_date_ix ON orders (status, ordered_at);
UPDATE sqlite_sequence SET seq = max(seq, 0) WHERE name = 'customers';
INSERT INTO sqlite_sequence (name, seq) SELECT 'customers', 0 WHERE NOT EXISTS (SELECT 1 FROM sqlite_sequence WHERE name = 'customers');
UPDATE sqlite_sequence SET seq = max(seq, 0) WHERE name = 'orders';
INSERT INTO sqlite_sequence (name, seq) SELECT 'orders', 0 WHERE NOT EXISTS (SELECT 1 FROM sqlite_sequence WHERE name = 'orders');
COMMIT;

-- Rows whose foreign key finds no parent, if any: the load doesn't stop for them.
PRAGMA foreign_key_check;

Correcciones

No hubo nada que corregir.

Para revisar

  • 1 secuencia no se crea; SQLite no tiene secuencias. Guarda el siguiente valor en una tabla si tu aplicación lo necesita.
  • El valor predeterminado de "invoice" en orders no se puede escribir para SQLite (a sequence), así que la columna no tiene valor predeterminado. Agrega el valor predeterminado a mano si las filas nuevas lo necesitan.

Tu archivo se convierte en esta computadora y nunca se sube.

Otros ejemplos:

Qué cambia de Oracle a SQLite

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.

  • BOOLEAN (23ai)

    INTEGER 0 o 1 con un CHECK

    SQLite no tiene columna booleana, así que TRUE y FALSE son 1 y 0.

  • VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONG

    TEXT

    Las longitudes cuentan caracteres, tanto si Oracle contaba bytes como caracteres, así que cada valor cabe.

  • NUMBER, NUMBER(p,s), FLOAT(b)

    INTEGER, o NUMERIC exacto como texto a partir de 15 dígitos

    NUMBER conserva cada dígito; un NUMBER sin precisión cuyos valores son todos números enteros de hasta 18 dígitos es un entero de 64 bits, y una escala negativa admite otros tantos dígitos antes del punto.

    Línea del informe: decimal_as_text

  • INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND

    TEXT con el texto de Oracle, como +01-06

    SQLite no tiene tipo interval; el texto conserva cada parte.

    Línea del informe: type_replaced

  • DATE, TIMESTAMP(p)

    DATETIME como texto ISO 8601, con cada dígito

    El DATE de Oracle guarda una hora al segundo, así que es una fecha y hora. Una exportación en una sesión estadounidense o alemana escribe las fechas sin su hora ni su siglo (DD-MON-RR); exporta en una sesión ISO (SYYYY-MM-DD HH24:MI:SS) para conservarlas.

  • TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE

    TIMESTAMP como texto ISO 8601 en UTC

    SQLite no tiene un tipo que conserve el desfase, así que cada instante se escribe en UTC: el mismo instante sea cual sea el desfase que tenía.

    Línea del informe: moments_as_utc

  • JSON (21c), and CLOB holding JSON

    TEXT

    Los mismos valores JSON; un NULL de SQL que la exportación escribió como 'null' sigue siendo NULL.

  • BLOB, RAW(n), LONG RAW

    BLOB

    Los bytes siguen siendo bytes.

  • ROWID, UROWID, XMLTYPE, SDO_GEOMETRY

    TEXT

    Los tipos propios de Oracle no tienen equivalente; sus valores conservan su texto, incluidos los valores ROWID, aunque fuera de Oracle no signifiquen nada.

    Línea del informe: type_replaced

  • collations that ignore case (BINARY_CI)

    comparación exacta

    SQLite compara el texto exactamente salvo que se indique otra cosa, y su NOCASE solo pliega letras ASCII.

    Línea del informe: case_insensitive_collation

  • identity columns, and a sequence a BEFORE INSERT trigger assigns

    INTEGER PRIMARY KEY AUTOINCREMENT, siguiendo después del id más alto

    Los ids copiados se cargan tal cual, y el contador sigue después del más alto. Una columna que un disparador llena desde una secuencia (la forma anterior a 12c) también es de identidad.

  • identity columns the target can't count

    INTEGER sin contador

    SQLite solo cuenta una columna que es toda la clave primaria, así que la columna conserva sus valores y las filas nuevas necesitan los suyos.

    Línea del informe: counter_dropped

  • CREATE SEQUENCE

    no se crea

    La exportación escribe hasta dónde llegó una secuencia como su START WITH, así que sigue desde ahí.

    Línea del informe: sequence_not_converted

  • virtual columns (GENERATED ALWAYS AS ... VIRTUAL)

    GENERATED ALWAYS AS, STORED cuando son PERSISTED, VIRTUAL en otro caso

    SQLite las calcula con la misma fórmula; los valores que la exportación escribió para ellas se omiten.

  • virtual columns with functions IntoSQL doesn't write, and the || operator

    una columna simple

    Una fórmula que no se puede escribir para SQLite deja una columna simple y una línea en el informe; los valores que la exportación escribió para las columnas virtuales se omiten, y SQLite no tiene ninguno que calcular.

    Línea del informe: generated_not_translated

  • defaults with functions IntoSQL doesn't write (SYS_GUID(), ||)

    sin valor predeterminado

    Un valor predeterminado que no se puede escribir se deja fuera y aparece en el informe.

    Línea del informe: default_not_translated

  • CHECK constraints

    traducidos

    Los mismos CHECK, comprobados al cargar cada fila.

  • CHECK constraints with functions IntoSQL doesn't write

    no se crea

    Un CHECK que no se puede escribir se deja fuera y aparece en el informe.

    Línea del informe: check_skipped

  • CHECK constraints that are DISABLE or ENABLE NOVALIDATE

    no se crea

    Oracle no aplica estos CHECK a las filas que ya estaban, así que las filas pueden no cumplirlos.

    Línea del informe: check_not_enforced

  • function-based, bitmap and domain indexes

    no se crea

    IntoSQL escribe índices b-tree sobre columnas completas; vuelve a crear los demás después de cargar.

    Línea del informe: index_skipped

  • foreign keys

    en CREATE TABLE, cargadas sin comprobar, luego listadas por PRAGMA foreign_key_check

    SQLite solo acepta claves foráneas en CREATE TABLE y solo las comprueba con PRAGMA foreign_keys activado. Las filas cargan sin comprobar y el script termina listando cada fila sin padre.

  • foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE ones

    no se crea

    Una clave no puede nombrar una tabla que no existe, y una que Oracle no comprueba puede tener filas sin padre.

    Línea del informe: foreign_key_skipped

  • partitioned tables

    una tabla con las filas de todas las particiones

    Las filas son las mismas; vuelve a particionar la tabla en SQLite si lo necesita.

    Línea del informe: partitions_dropped

  • several schemas in one export

    un archivo, con el nombre del esquema delante de cada tabla

    Un archivo SQLite es una sola base de datos, así que el nombre del esquema distingue las tablas con el mismo nombre; una exportación de un solo esquema conserva los nombres de sus tablas.

    Línea del informe: schemas_merged

  • NOT NULL columns with values that become NULL

    sin NOT NULL

    Una columna cuyos valores tuvieron que volverse NULL no puede conservar NOT NULL, o la carga se detendría.

    Línea del informe: not_null_relaxed

  • views, synonyms, types, packages, procedures, functions and other triggers

    listados en el informe

    Su código está escrito en PL/SQL, así que se listan para que los vuelvas a crear.

    Línea del informe: not_converted_objects

  • exports without CREATE TABLE (data only)

    tipos leídos de los valores

    Una exportación solo de datos solo tiene filas, así que los tipos salen de los valores.

    Línea del informe: no_schema

  • expressions in INSERT values other than the ones exports write

    NULL

    Un convertidor que no ejecuta una base de datos no puede evaluarlas; sí se leen to_date, to_timestamp, TO_CLOB, HEXTORAW y las demás que escriben las exportaciones.

    Línea del informe: expression_value

  • types IntoSQL doesn't know, and object types

    TEXT

    El texto admite cualquier valor; cambia el tipo después de cargar.

    Línea del informe: unknown_type

  • dates before year 1 and time zones given as region names

    NULL

    Un valor que no es una fecha se vuelve NULL y el informe lo cuenta.

    Línea del informe: date_out_of_range

  • NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLE

    Infinity como 9e999; NaN como NULL

    SQLite vuelve a leer 9e999 como infinito y no tiene NaN.

  • NUL characters in text

    se conserva

    El texto de SQLite puede contener un carácter NUL, así que el valor se copia tal cual.

  • text that isn't valid in its encoding

    los bytes incorrectos como carácter de reemplazo

    El script es UTF-8 y cada valor tiene que ser texto válido.

    Línea del informe: invalid_utf8_replaced

  • text decoded twice (ñ)

    se copia tal cual

    El script contiene exactamente estos caracteres, así que se copian; el informe los señala.

    Línea del informe: mojibake_suspected

En OracleEn SQLiteLínea del informe
BOOLEAN (23ai)INTEGER 0 o 1 con un CHECKSQLite no tiene columna booleana, así que TRUE y FALSE son 1 y 0.
VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONGTEXTLas longitudes cuentan caracteres, tanto si Oracle contaba bytes como caracteres, así que cada valor cabe.
NUMBER, NUMBER(p,s), FLOAT(b)INTEGER, o NUMERIC exacto como texto a partir de 15 dígitosNUMBER conserva cada dígito; un NUMBER sin precisión cuyos valores son todos números enteros de hasta 18 dígitos es un entero de 64 bits, y una escala negativa admite otros tantos dígitos antes del punto.decimal_as_text
INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECONDTEXT con el texto de Oracle, como +01-06SQLite no tiene tipo interval; el texto conserva cada parte.type_replaced
DATE, TIMESTAMP(p)DATETIME como texto ISO 8601, con cada dígitoEl DATE de Oracle guarda una hora al segundo, así que es una fecha y hora. Una exportación en una sesión estadounidense o alemana escribe las fechas sin su hora ni su siglo (DD-MON-RR); exporta en una sesión ISO (SYYYY-MM-DD HH24:MI:SS) para conservarlas.
TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONETIMESTAMP como texto ISO 8601 en UTCSQLite no tiene un tipo que conserve el desfase, así que cada instante se escribe en UTC: el mismo instante sea cual sea el desfase que tenía.moments_as_utc
JSON (21c), and CLOB holding JSONTEXTLos mismos valores JSON; un NULL de SQL que la exportación escribió como 'null' sigue siendo NULL.
BLOB, RAW(n), LONG RAWBLOBLos bytes siguen siendo bytes.
ROWID, UROWID, XMLTYPE, SDO_GEOMETRYTEXTLos tipos propios de Oracle no tienen equivalente; sus valores conservan su texto, incluidos los valores ROWID, aunque fuera de Oracle no signifiquen nada.type_replaced
collations that ignore case (BINARY_CI)comparación exactaSQLite compara el texto exactamente salvo que se indique otra cosa, y su NOCASE solo pliega letras ASCII.case_insensitive_collation
identity columns, and a sequence a BEFORE INSERT trigger assignsINTEGER PRIMARY KEY AUTOINCREMENT, siguiendo después del id más altoLos ids copiados se cargan tal cual, y el contador sigue después del más alto. Una columna que un disparador llena desde una secuencia (la forma anterior a 12c) también es de identidad.
identity columns the target can't countINTEGER sin contadorSQLite solo cuenta una columna que es toda la clave primaria, así que la columna conserva sus valores y las filas nuevas necesitan los suyos.counter_dropped
CREATE SEQUENCEno se creaLa exportación escribe hasta dónde llegó una secuencia como su START WITH, así que sigue desde ahí.sequence_not_converted
virtual columns (GENERATED ALWAYS AS ... VIRTUAL)GENERATED ALWAYS AS, STORED cuando son PERSISTED, VIRTUAL en otro casoSQLite las calcula con la misma fórmula; los valores que la exportación escribió para ellas se omiten.
virtual columns with functions IntoSQL doesn't write, and the || operatoruna columna simpleUna fórmula que no se puede escribir para SQLite deja una columna simple y una línea en el informe; los valores que la exportación escribió para las columnas virtuales se omiten, y SQLite no tiene ninguno que calcular.generated_not_translated
defaults with functions IntoSQL doesn't write (SYS_GUID(), ||)sin valor predeterminadoUn valor predeterminado que no se puede escribir se deja fuera y aparece en el informe.default_not_translated
CHECK constraintstraducidosLos mismos CHECK, comprobados al cargar cada fila.
CHECK constraints with functions IntoSQL doesn't writeno se creaUn CHECK que no se puede escribir se deja fuera y aparece en el informe.check_skipped
CHECK constraints that are DISABLE or ENABLE NOVALIDATEno se creaOracle no aplica estos CHECK a las filas que ya estaban, así que las filas pueden no cumplirlos.check_not_enforced
function-based, bitmap and domain indexesno se creaIntoSQL escribe índices b-tree sobre columnas completas; vuelve a crear los demás después de cargar.index_skipped
foreign keysen CREATE TABLE, cargadas sin comprobar, luego listadas por PRAGMA foreign_key_checkSQLite solo acepta claves foráneas en CREATE TABLE y solo las comprueba con PRAGMA foreign_keys activado. Las filas cargan sin comprobar y el script termina listando cada fila sin padre.
foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE onesno se creaUna clave no puede nombrar una tabla que no existe, y una que Oracle no comprueba puede tener filas sin padre.foreign_key_skipped
partitioned tablesuna tabla con las filas de todas las particionesLas filas son las mismas; vuelve a particionar la tabla en SQLite si lo necesita.partitions_dropped
several schemas in one exportun archivo, con el nombre del esquema delante de cada tablaUn archivo SQLite es una sola base de datos, así que el nombre del esquema distingue las tablas con el mismo nombre; una exportación de un solo esquema conserva los nombres de sus tablas.schemas_merged
NOT NULL columns with values that become NULLsin NOT NULLUna columna cuyos valores tuvieron que volverse NULL no puede conservar NOT NULL, o la carga se detendría.not_null_relaxed
views, synonyms, types, packages, procedures, functions and other triggerslistados en el informeSu código está escrito en PL/SQL, así que se listan para que los vuelvas a crear.not_converted_objects
exports without CREATE TABLE (data only)tipos leídos de los valoresUna exportación solo de datos solo tiene filas, así que los tipos salen de los valores.no_schema
expressions in INSERT values other than the ones exports writeNULLUn convertidor que no ejecuta una base de datos no puede evaluarlas; sí se leen to_date, to_timestamp, TO_CLOB, HEXTORAW y las demás que escriben las exportaciones.expression_value
types IntoSQL doesn't know, and object typesTEXTEl texto admite cualquier valor; cambia el tipo después de cargar.unknown_type
dates before year 1 and time zones given as region namesNULLUn valor que no es una fecha se vuelve NULL y el informe lo cuenta.date_out_of_range
NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLEInfinity como 9e999; NaN como NULLSQLite vuelve a leer 9e999 como infinito y no tiene NaN.
NUL characters in textse conservaEl texto de SQLite puede contener un carácter NUL, así que el valor se copia tal cual.
text that isn't valid in its encodinglos bytes incorrectos como carácter de reemplazoEl script es UTF-8 y cada valor tiene que ser texto válido.invalid_utf8_replaced
text decoded twice (ñ)se copia tal cualEl script contiene exactamente estos caracteres, así que se copian; el informe los señala.mojibake_suspected

Carga el script en SQLite

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.

sqlite3 -bail mydb.sqlite < oracle.sqlite.sql

Las claves foráneas se declaran en cada tabla y las filas se cargan con la comprobación de claves foráneas desactivada. Luego el script lista cada fila que apunta a una fila que no existe, en lugar de fallar a medias.

Para un volcado grande, carga en un archivo nuevo en un disco local. El script carga todo en una sola transacción con la sincronización desactivada, así que va a la velocidad del disco, y una carga que se detiene a medias no deja tablas incompletas.

La línea de comandos carga el archivo directo en una base de datos SQLite, sin escribir un script. Es gratis.

Haz el volcado de Oracle para el mejor resultado

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

  • En SQL Developer, elige Tools, Database Export, con DDL y el formato de datos Insert. SQLcl escribe lo mismo con SET SQLFORMAT INSERT.
  • Ejecuta ALTER SESSION SET NLS_DATE_FORMAT = 'SYYYY-MM-DD HH24:MI:SS' antes de exportar: el formato predeterminado escribe las fechas sin su hora ni su siglo.
  • Un archivo .dmp de exp o expdp es binario: impórtalo en una base de datos Oracle, por ejemplo Oracle Database Free en Docker, y expórtalo con SQL Developer.

Qué no se convierte

Las vistas, paquetes, procedimientos, funciones, disparadores, tipos y sinónimos se escriben en PL/SQL. Aparecen en el informe por nombre, nunca se descartan en silencio, para que puedas reescribirlos para SQLite.

Preguntas sobre Oracle a SQLite

¿No encuentras la respuesta? Escríbenos desde la página de contacto y te responde una persona. Página de contacto

¿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 un archivo .dmp de exp o expdp?

No directamente: Data Pump y el Export original escriben un formato binario que solo Oracle lee. Impórtalo en cualquier base de datos Oracle, Oracle Database Free funciona en Docker, y expórtalo con Database Export de SQL Developer o con SQLcl. El convertidor te lo indica cuando recibe un archivo .dmp.

¿De qué versiones de Oracle puede venir la exportación?

Exportaciones de SQL Developer y SQLcl, con las definiciones de tabla de DBMS_METADATA, desde Oracle 11g en adelante. Cada exportación de prueba viene de Oracle 21c y 23ai, en sesiones estadounidenses, alemanas e ISO, y se compara con su origen celda por celda.

¿Qué pasa con NUMBER, DATE y los demás tipos de Oracle?

NUMBER se vuelve INTEGER para números enteros y conserva cada dígito en los demás casos; DATE se vuelve texto DATETIME con su hora; CLOB TEXT, BLOB y RAW BLOB. Infinity se conserva; NaN se vuelve NULL.

¿Se conservan las columnas de identidad y las secuencias?

Una columna de identidad que es toda la clave primaria de la tabla se vuelve INTEGER PRIMARY KEY AUTOINCREMENT y sigue después del id más alto. SQLite no tiene secuencias, así que aparecen en el informe.

¿Qué pasa con los paquetes, procedimientos y disparadores de PL/SQL?

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 SQLite carga el script?

SQLite 3.31 y posteriores. Cada exportación de prueba carga en 3.31 y 3.54, y se detiene en el primer error si algo sale mal.