Vai al contenuto
Home di IntoSQL

Converti Oracle in SQLite

Trascina il file .sql che scrive Database Export di SQL Developer o SQLcl, con le sue tabelle e istruzioni Insert, e scarica uno script per SQLite con le stesse tabelle, chiavi, indici e dati. Ogni valore che SQLite non può contenere così com'è, e ogni oggetto che non supporta, è elencato nel report.

Il tuo file
sqlshop_2024_oracle.sqlFile di esempio, 9,3 kB
Il tuo database

18 righe convertite, nessuna correzione, nessuna rifiutata

Mostra

Tabelle in shop_2024_oracle.sqlDump Oracle · scritto da SQL Developer · utf-8

  • customers8 righe
    7 colonne
    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 righe
    9 colonne
    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;

Correzioni

Non c'era niente da correggere.

Da controllare

  • 1 sequenza non viene creata; SQLite non ha sequenze. Tieni il valore successivo in una tabella se la tua applicazione ne ha bisogno.
  • Il valore predefinito di "invoice" in orders non si può scrivere per SQLite (a sequence), quindi la colonna non ha un valore predefinito. Aggiungi a mano il valore predefinito se le nuove righe ne hanno bisogno.

Il tuo file viene convertito su questo computer e non viene mai caricato.

Altri esempi:

Cosa cambia da Oracle a SQLite

Ogni riga è una regola che il convertitore applica, con la riga del report che scrive quando la regola cambia qualcosa nei tuoi dati.

  • BOOLEAN (23ai)

    INTEGER 0 o 1 con un CHECK

    SQLite non ha una colonna booleana, quindi TRUE e FALSE sono 1 e 0.

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

    TEXT

    Le lunghezze contano i caratteri, sia che Oracle contasse byte sia caratteri, quindi ogni valore ci sta.

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

    INTEGER, o NUMERIC mantenuto esatto come testo oltre le 15 cifre

    NUMBER mantiene ogni cifra; un NUMBER senza precisione i cui valori sono tutti numeri interi fino a 18 cifre è un intero a 64 bit, e una scala negativa contiene altrettante cifre prima della virgola.

    Riga del report: decimal_as_text

  • INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND

    TEXT con il testo di Oracle, come +01-06

    SQLite non ha un tipo interval; il testo mantiene ogni parte.

    Riga del report: type_replaced

  • DATE, TIMESTAMP(p)

    DATETIME come testo ISO 8601, con ogni cifra

    Il DATE di Oracle contiene un'ora al secondo, quindi è una data e ora. Un export in una sessione americana o tedesca scrive le date senza ora né secolo (DD-MON-RR); esporta in una sessione ISO (SYYYY-MM-DD HH24:MI:SS) per mantenerle.

  • TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE

    TIMESTAMP come testo ISO 8601 in UTC

    SQLite non ha un tipo che conservi un offset, quindi ogni istante è scritto in UTC: lo stesso istante qualunque offset avesse.

    Riga del report: moments_as_utc

  • JSON (21c), and CLOB holding JSON

    TEXT

    Gli stessi valori JSON; un NULL SQL che l'export ha scritto come 'null' resta NULL.

  • BLOB, RAW(n), LONG RAW

    BLOB

    I byte restano byte.

  • ROWID, UROWID, XMLTYPE, SDO_GEOMETRY

    TEXT

    I tipi propri di Oracle non hanno un equivalente; i loro valori mantengono il testo, valori ROWID inclusi, anche se fuori da Oracle non significano nulla.

    Riga del report: type_replaced

  • collations that ignore case (BINARY_CI)

    confronto esatto

    SQLite confronta il testo in modo esatto salvo indicazione diversa, e il suo NOCASE ignora le maiuscole solo per le lettere ASCII.

    Riga del report: case_insensitive_collation

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

    INTEGER PRIMARY KEY AUTOINCREMENT, che riparte dopo l'id più alto

    Gli id copiati si caricano così come sono, e il contatore riparte dopo il più alto. Anche una colonna che un trigger riempie da una sequenza (il metodo prima della 12c) è una identity.

  • identity columns the target can't count

    INTEGER senza contatore

    SQLite conta solo una colonna che è l'intera chiave primaria, quindi la colonna mantiene i suoi valori e le nuove righe devono avere i loro.

    Riga del report: counter_dropped

  • CREATE SEQUENCE

    non creato

    L'export scrive fin dove è arrivata una sequenza come suo START WITH, quindi riparte da lì.

    Riga del report: sequence_not_converted

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

    GENERATED ALWAYS AS, STORED se PERSISTED, altrimenti VIRTUAL

    SQLite le calcola con la stessa formula; i valori che l'export ha scritto per loro vengono omessi.

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

    una colonna semplice

    Una formula che non si può scrivere per SQLite lascia una colonna semplice e una riga nel report; i valori che l'export ha scritto per le colonne virtuali vengono omessi, e SQLite non ne ha nessuno da calcolare.

    Riga del report: generated_not_translated

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

    nessun valore predefinito

    Un valore predefinito che non si può scrivere viene omesso e segnalato.

    Riga del report: default_not_translated

  • CHECK constraints

    tradotti

    Gli stessi CHECK, verificati mentre ogni riga si carica.

  • CHECK constraints with functions IntoSQL doesn't write

    non creato

    Un vincolo CHECK che non si può scrivere viene omesso e segnalato.

    Riga del report: check_skipped

  • CHECK constraints that are DISABLE or ENABLE NOVALIDATE

    non creato

    Oracle non applica questi vincoli CHECK alle righe già presenti, quindi le righe potrebbero violarli.

    Riga del report: check_not_enforced

  • function-based, bitmap and domain indexes

    non creato

    IntoSQL scrive indici b-tree su colonne intere; ricrea gli altri dopo il caricamento.

    Riga del report: index_skipped

  • foreign keys

    in CREATE TABLE, caricate senza controllo, poi elencate da PRAGMA foreign_key_check

    SQLite accetta le chiavi esterne solo in CREATE TABLE e le verifica solo con PRAGMA foreign_keys attivo. Le righe si caricano senza controllo e lo script finisce elencando ogni riga senza padre.

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

    non creato

    Una chiave non può riferirsi a una tabella che non c'è, e una che Oracle non verifica può avere righe senza padre.

    Riga del report: foreign_key_skipped

  • partitioned tables

    una tabella con le righe di ogni partizione

    Le righe sono le stesse; partiziona di nuovo la tabella in SQLite se serve.

    Riga del report: partitions_dropped

  • several schemas in one export

    un file, tabelle con il nome del loro schema davanti

    Un file SQLite è un solo database, quindi il nome dello schema separa le tabelle con lo stesso nome; un export di un solo schema mantiene i nomi delle sue tabelle.

    Riga del report: schemas_merged

  • NOT NULL columns with values that become NULL

    NOT NULL rimosso

    Una colonna i cui valori sono dovuti diventare NULL non può mantenere NOT NULL, altrimenti il caricamento si fermerebbe.

    Riga del report: not_null_relaxed

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

    elencati nel report

    Il loro codice è scritto in PL/SQL, quindi vengono elencati perché tu li ricrei.

    Riga del report: not_converted_objects

  • exports without CREATE TABLE (data only)

    tipi ricavati dai valori

    Un export di soli dati contiene solo righe, quindi i tipi vengono ricavati dai valori.

    Riga del report: no_schema

  • expressions in INSERT values other than the ones exports write

    NULL

    Un convertitore che non esegue un database non può valutarle; to_date, to_timestamp, TO_CLOB, HEXTORAW e le altre che scrivono gli export vengono lette.

    Riga del report: expression_value

  • types IntoSQL doesn't know, and object types

    TEXT

    Il testo contiene qualsiasi valore; cambia il tipo dopo il caricamento.

    Riga del report: unknown_type

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

    NULL

    Un valore che non è una data diventa NULL e il report lo conta.

    Riga del report: date_out_of_range

  • NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLE

    Infinity come 9e999; NaN come NULL

    SQLite rilegge 9e999 come infinito e non ha NaN.

  • NUL characters in text

    mantenuto

    Il testo di SQLite può contenere un carattere NUL, quindi il valore viene copiato così com'è.

  • text that isn't valid in its encoding

    i byte errati come carattere di sostituzione

    Lo script è UTF-8 e ogni valore deve essere testo valido.

    Riga del report: invalid_utf8_replaced

  • text decoded twice (ñ)

    copiato così com'è

    Lo script contiene esattamente questi caratteri, quindi vengono copiati; il report li segnala.

    Riga del report: mojibake_suspected

In OracleIn SQLiteRiga del report
BOOLEAN (23ai)INTEGER 0 o 1 con un CHECKSQLite non ha una colonna booleana, quindi TRUE e FALSE sono 1 e 0.
VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONGTEXTLe lunghezze contano i caratteri, sia che Oracle contasse byte sia caratteri, quindi ogni valore ci sta.
NUMBER, NUMBER(p,s), FLOAT(b)INTEGER, o NUMERIC mantenuto esatto come testo oltre le 15 cifreNUMBER mantiene ogni cifra; un NUMBER senza precisione i cui valori sono tutti numeri interi fino a 18 cifre è un intero a 64 bit, e una scala negativa contiene altrettante cifre prima della virgola.decimal_as_text
INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECONDTEXT con il testo di Oracle, come +01-06SQLite non ha un tipo interval; il testo mantiene ogni parte.type_replaced
DATE, TIMESTAMP(p)DATETIME come testo ISO 8601, con ogni cifraIl DATE di Oracle contiene un'ora al secondo, quindi è una data e ora. Un export in una sessione americana o tedesca scrive le date senza ora né secolo (DD-MON-RR); esporta in una sessione ISO (SYYYY-MM-DD HH24:MI:SS) per mantenerle.
TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONETIMESTAMP come testo ISO 8601 in UTCSQLite non ha un tipo che conservi un offset, quindi ogni istante è scritto in UTC: lo stesso istante qualunque offset avesse.moments_as_utc
JSON (21c), and CLOB holding JSONTEXTGli stessi valori JSON; un NULL SQL che l'export ha scritto come 'null' resta NULL.
BLOB, RAW(n), LONG RAWBLOBI byte restano byte.
ROWID, UROWID, XMLTYPE, SDO_GEOMETRYTEXTI tipi propri di Oracle non hanno un equivalente; i loro valori mantengono il testo, valori ROWID inclusi, anche se fuori da Oracle non significano nulla.type_replaced
collations that ignore case (BINARY_CI)confronto esattoSQLite confronta il testo in modo esatto salvo indicazione diversa, e il suo NOCASE ignora le maiuscole solo per le lettere ASCII.case_insensitive_collation
identity columns, and a sequence a BEFORE INSERT trigger assignsINTEGER PRIMARY KEY AUTOINCREMENT, che riparte dopo l'id più altoGli id copiati si caricano così come sono, e il contatore riparte dopo il più alto. Anche una colonna che un trigger riempie da una sequenza (il metodo prima della 12c) è una identity.
identity columns the target can't countINTEGER senza contatoreSQLite conta solo una colonna che è l'intera chiave primaria, quindi la colonna mantiene i suoi valori e le nuove righe devono avere i loro.counter_dropped
CREATE SEQUENCEnon creatoL'export scrive fin dove è arrivata una sequenza come suo START WITH, quindi riparte da lì.sequence_not_converted
virtual columns (GENERATED ALWAYS AS ... VIRTUAL)GENERATED ALWAYS AS, STORED se PERSISTED, altrimenti VIRTUALSQLite le calcola con la stessa formula; i valori che l'export ha scritto per loro vengono omessi.
virtual columns with functions IntoSQL doesn't write, and the || operatoruna colonna sempliceUna formula che non si può scrivere per SQLite lascia una colonna semplice e una riga nel report; i valori che l'export ha scritto per le colonne virtuali vengono omessi, e SQLite non ne ha nessuno da calcolare.generated_not_translated
defaults with functions IntoSQL doesn't write (SYS_GUID(), ||)nessun valore predefinitoUn valore predefinito che non si può scrivere viene omesso e segnalato.default_not_translated
CHECK constraintstradottiGli stessi CHECK, verificati mentre ogni riga si carica.
CHECK constraints with functions IntoSQL doesn't writenon creatoUn vincolo CHECK che non si può scrivere viene omesso e segnalato.check_skipped
CHECK constraints that are DISABLE or ENABLE NOVALIDATEnon creatoOracle non applica questi vincoli CHECK alle righe già presenti, quindi le righe potrebbero violarli.check_not_enforced
function-based, bitmap and domain indexesnon creatoIntoSQL scrive indici b-tree su colonne intere; ricrea gli altri dopo il caricamento.index_skipped
foreign keysin CREATE TABLE, caricate senza controllo, poi elencate da PRAGMA foreign_key_checkSQLite accetta le chiavi esterne solo in CREATE TABLE e le verifica solo con PRAGMA foreign_keys attivo. Le righe si caricano senza controllo e lo script finisce elencando ogni riga senza padre.
foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE onesnon creatoUna chiave non può riferirsi a una tabella che non c'è, e una che Oracle non verifica può avere righe senza padre.foreign_key_skipped
partitioned tablesuna tabella con le righe di ogni partizioneLe righe sono le stesse; partiziona di nuovo la tabella in SQLite se serve.partitions_dropped
several schemas in one exportun file, tabelle con il nome del loro schema davantiUn file SQLite è un solo database, quindi il nome dello schema separa le tabelle con lo stesso nome; un export di un solo schema mantiene i nomi delle sue tabelle.schemas_merged
NOT NULL columns with values that become NULLNOT NULL rimossoUna colonna i cui valori sono dovuti diventare NULL non può mantenere NOT NULL, altrimenti il caricamento si fermerebbe.not_null_relaxed
views, synonyms, types, packages, procedures, functions and other triggerselencati nel reportIl loro codice è scritto in PL/SQL, quindi vengono elencati perché tu li ricrei.not_converted_objects
exports without CREATE TABLE (data only)tipi ricavati dai valoriUn export di soli dati contiene solo righe, quindi i tipi vengono ricavati dai valori.no_schema
expressions in INSERT values other than the ones exports writeNULLUn convertitore che non esegue un database non può valutarle; to_date, to_timestamp, TO_CLOB, HEXTORAW e le altre che scrivono gli export vengono lette.expression_value
types IntoSQL doesn't know, and object typesTEXTIl testo contiene qualsiasi valore; cambia il tipo dopo il caricamento.unknown_type
dates before year 1 and time zones given as region namesNULLUn valore che non è una data diventa NULL e il report lo conta.date_out_of_range
NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLEInfinity come 9e999; NaN come NULLSQLite rilegge 9e999 come infinito e non ha NaN.
NUL characters in textmantenutoIl testo di SQLite può contenere un carattere NUL, quindi il valore viene copiato così com'è.
text that isn't valid in its encodingi byte errati come carattere di sostituzioneLo script è UTF-8 e ogni valore deve essere testo valido.invalid_utf8_replaced
text decoded twice (ñ)copiato così com'èLo script contiene esattamente questi caratteri, quindi vengono copiati; il report li segnala.mojibake_suspected

Carica lo script in SQLite

Lo script crea le tabelle, copia le righe, poi aggiunge chiavi, indici e chiavi esterne, così si carica in fretta e si ferma al primo errore.

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

Le chiavi esterne sono dichiarate in ogni tabella e le righe si caricano con i controlli delle chiavi esterne disattivati. Lo script poi elenca ogni riga che punta a una riga che non esiste, invece di fallire a metà.

Per un dump grande, carica in un file nuovo su un disco locale. Lo script carica tutto in un'unica transazione con la sincronizzazione disattivata, così va alla velocità del disco, e un caricamento che si ferma a metà non lascia tabelle parziali.

La riga di comando carica il file direttamente in un database SQLite, senza scrivere uno script. È gratis.

Fai il dump di Oracle per il miglior risultato

Il convertitore legge ciò che il dump contiene. Con queste opzioni il dump conserva più dei tuoi dati:

  • In SQL Developer, scegli Tools, Database Export, con DDL e il formato dati Insert. SQLcl scrive lo stesso con SET SQLFORMAT INSERT.
  • Esegui ALTER SESSION SET NLS_DATE_FORMAT = 'SYYYY-MM-DD HH24:MI:SS' prima di esportare: il formato di default scrive le date senza ora né secolo.
  • Un file .dmp di exp o expdp è binario: importalo in un database Oracle, per esempio Oracle Database Free in Docker, ed esportalo con SQL Developer.

Cosa non viene convertito

Viste, package, procedure, funzioni, trigger, tipi e sinonimi sono scritti in PL/SQL. Sono elencati per nome nel report, mai rimossi in silenzio, così puoi riscriverli per SQLite.

Domande sulla conversione da Oracle a SQLite

Non trovi la risposta? Scrivici dalla pagina dei contatti e ti risponde una persona. Pagina dei contatti

Il mio dump viene caricato?

No. Il convertitore funziona nel tuo browser e legge il dump dal tuo disco a pezzi, quindi non lascia mai il tuo computer. Anche l'app desktop e la riga di comando convertono sul tuo computer.

Quanto può essere grande il dump?

Il convertitore non tiene mai l'intero dump in memoria: legge il file due volte, per intervalli, e scrive lo script man mano. I dump di più gigabyte si convertono nel browser, nell'app desktop e con la riga di comando.

Posso convertire un file .dmp di exp o expdp?

Non direttamente: Data Pump e l'Export originale scrivono un formato binario che legge solo Oracle. Importalo in un qualsiasi database Oracle, Oracle Database Free gira in Docker, ed esportalo con Database Export di SQL Developer o con SQLcl. Il convertitore lo segnala quando riceve un file .dmp.

Da quali versioni di Oracle può provenire l'export?

Export di SQL Developer e SQLcl, con le definizioni di tabella di DBMS_METADATA, da Oracle 11g in poi. Ogni export di test viene da Oracle 21c e 23ai, in sessioni americane, tedesche e ISO, ed è confrontato con la sorgente cella per cella.

Cosa succede a NUMBER, DATE e agli altri tipi di Oracle?

NUMBER diventa INTEGER per i numeri interi e mantiene ogni cifra negli altri casi; DATE diventa testo DATETIME con l'ora; CLOB TEXT, BLOB e RAW BLOB. Infinity viene mantenuto; NaN diventa NULL.

Le colonne identity e le sequenze vengono mantenute?

Una colonna identity che è l'intera chiave primaria della tabella diventa INTEGER PRIMARY KEY AUTOINCREMENT e riparte dopo l'id più alto. SQLite non ha sequenze, quindi sono segnalate nel report.

E package, procedure e trigger PL/SQL?

Sono elencati per nome nel report e non vengono convertiti, perché ogni database li scrive nel proprio linguaggio.

Su quali versioni di SQLite si carica lo script?

SQLite 3.31 e successive. Ogni export di test si carica su 3.31 e 3.54, fermandosi al primo errore se qualcosa va storto.