Pular para o conteúdo
Início do IntoSQL

Converta Oracle para SQLite

Solte o arquivo .sql que o Database Export do SQL Developer ou o SQLcl escreve, com suas tabelas e instruções Insert, e baixe um script do SQLite com as mesmas tabelas, chaves, índices e dados. Cada valor que o SQLite não aceita como está, e cada objeto que ele não traz, aparece no relatório.

Seu arquivo
sqlshop_2024_oracle.sqlArquivo de exemplo, 9,3 kB
Seu banco de dados

18 linhas convertidas, nenhuma correção, nenhuma rejeitada

Mostrar

Tabelas em shop_2024_oracle.sqlDump do Oracle · gerado por SQL Developer · utf-8

  • customers8 linhas
    7 colunas
    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 linhas
    9 colunas
    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;

Correções

Nada precisou de correção.

Para revisar

  • 1 sequência não foi criada; o SQLite não tem sequências. Guarde o próximo valor em uma tabela se a sua aplicação precisar.
  • O valor padrão de "invoice" em orders não pode ser escrito para o SQLite (a sequence), então a coluna fica sem valor padrão. Adicione o valor padrão manualmente se novas linhas precisarem dele.

Seu arquivo é convertido neste computador e nunca é enviado.

Outros exemplos:

O que muda do Oracle para o SQLite

Cada linha é uma regra que o conversor aplica, com a linha do relatório que ele escreve quando a regra muda algo nos seus dados.

  • BOOLEAN (23ai)

    INTEGER 0 ou 1 com um CHECK

    O SQLite não tem coluna booleana, então TRUE e FALSE são 1 e 0.

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

    TEXT

    Os tamanhos contam caracteres, quer o Oracle contasse bytes ou caracteres, então todo valor cabe.

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

    INTEGER, ou NUMERIC mantido exato como texto acima de 15 dígitos

    NUMBER mantém cada dígito; um NUMBER sem precisão cujos valores são todos números inteiros de até 18 dígitos vira um inteiro de 64 bits, e uma escala negativa comporta outros tantos dígitos antes do ponto.

    Linha do relatório: decimal_as_text

  • INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND

    TEXT com o texto do Oracle, como +01-06

    O SQLite não tem tipo interval; o texto mantém cada parte.

    Linha do relatório: type_replaced

  • DATE, TIMESTAMP(p)

    DATETIME como texto ISO 8601, com todos os dígitos

    O DATE do Oracle guarda uma hora até o segundo, então é uma data e hora. Uma exportação em uma sessão americana ou alemã escreve as datas sem a hora nem o século (DD-MON-RR); exporte em uma sessão ISO (SYYYY-MM-DD HH24:MI:SS) para mantê-las.

  • TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE

    TIMESTAMP como texto ISO 8601 em UTC

    O SQLite não tem um tipo que mantenha o fuso, então cada instante é escrito em UTC: o mesmo instante qualquer que seja o fuso que tinha.

    Linha do relatório: moments_as_utc

  • JSON (21c), and CLOB holding JSON

    TEXT

    Os mesmos valores JSON; um NULL do SQL que a exportação escreveu como 'null' continua NULL.

  • BLOB, RAW(n), LONG RAW

    BLOB

    Bytes continuam bytes.

  • ROWID, UROWID, XMLTYPE, SDO_GEOMETRY

    TEXT

    Os tipos próprios do Oracle não têm equivalente; seus valores mantêm o texto, incluindo os valores ROWID, embora fora do Oracle não signifiquem nada.

    Linha do relatório: type_replaced

  • collations that ignore case (BINARY_CI)

    comparação exata

    O SQLite compara texto de forma exata, a menos que se indique outra coisa, e seu NOCASE só trata letras ASCII.

    Linha do relatório: case_insensitive_collation

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

    INTEGER PRIMARY KEY AUTOINCREMENT, continuando depois do maior id

    Os ids copiados carregam como estão, e o contador continua depois do maior deles. Uma coluna que um gatilho preenche a partir de uma sequência (o jeito de antes do 12c) também é de identidade.

  • identity columns the target can't count

    INTEGER sem contador

    O SQLite só conta uma coluna que é toda a chave primária, então a coluna mantém seus valores e as linhas novas precisam dos seus.

    Linha do relatório: counter_dropped

  • CREATE SEQUENCE

    não criada

    A exportação escreve até onde uma sequência chegou como o seu START WITH, então ela continua dali.

    Linha do relatório: sequence_not_converted

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

    GENERATED ALWAYS AS, STORED quando PERSISTED, VIRTUAL nos outros casos

    O SQLite as calcula com a mesma fórmula; os valores que a exportação escreveu para elas ficam de fora.

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

    uma coluna simples

    Uma fórmula que não pode ser escrita para o SQLite deixa uma coluna simples e uma linha no relatório; os valores que a exportação escreveu para colunas virtuais ficam de fora, e o SQLite não tem nenhum para calcular.

    Linha do relatório: generated_not_translated

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

    sem valor padrão

    Um valor padrão que não pode ser escrito fica de fora e é informado.

    Linha do relatório: default_not_translated

  • CHECK constraints

    traduzidos

    Os mesmos CHECKs, testados à medida que cada linha carrega.

  • CHECK constraints with functions IntoSQL doesn't write

    não criado

    Um CHECK que não pode ser escrito fica de fora e é informado.

    Linha do relatório: check_skipped

  • CHECK constraints that are DISABLE or ENABLE NOVALIDATE

    não criado

    O Oracle não aplica esses CHECKs às linhas que já existiam, então as linhas podem violá-los.

    Linha do relatório: check_not_enforced

  • function-based, bitmap and domain indexes

    não criado

    O IntoSQL escreve índices b-tree sobre colunas inteiras; crie os outros de novo depois da carga.

    Linha do relatório: index_skipped

  • foreign keys

    no CREATE TABLE, carregadas sem verificação, depois listadas por PRAGMA foreign_key_check

    O SQLite só aceita chaves estrangeiras no CREATE TABLE e só as verifica com PRAGMA foreign_keys ligado. As linhas carregam sem verificação e o script termina listando cada linha sem pai.

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

    não criada

    Uma chave não pode apontar para uma tabela que não existe, e uma que o Oracle não verifica pode ter linhas sem pai.

    Linha do relatório: foreign_key_skipped

  • partitioned tables

    uma tabela com as linhas de todas as partições

    As linhas são as mesmas; particione a tabela de novo no SQLite se precisar.

    Linha do relatório: partitions_dropped

  • several schemas in one export

    um arquivo, tabelas com o nome do schema na frente

    Um arquivo SQLite é um banco de dados, então o nome do schema separa tabelas com o mesmo nome; uma exportação de um só schema mantém os nomes das suas tabelas.

    Linha do relatório: schemas_merged

  • NOT NULL columns with values that become NULL

    NOT NULL removido

    Uma coluna cujos valores tiveram de virar NULL não pode manter NOT NULL, senão a carga pararia.

    Linha do relatório: not_null_relaxed

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

    listados no relatório

    O código deles é escrito em PL/SQL, então eles são listados para você recriá-los.

    Linha do relatório: not_converted_objects

  • exports without CREATE TABLE (data only)

    tipos lidos dos valores

    Uma exportação só de dados tem apenas linhas, então os tipos vêm dos valores.

    Linha do relatório: no_schema

  • expressions in INSERT values other than the ones exports write

    NULL

    Um conversor que não executa um banco de dados não consegue avaliá-las; to_date, to_timestamp, TO_CLOB, HEXTORAW e as outras que as exportações escrevem são lidas.

    Linha do relatório: expression_value

  • types IntoSQL doesn't know, and object types

    TEXT

    O texto aceita qualquer valor; mude o tipo depois da carga.

    Linha do relatório: unknown_type

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

    NULL

    Um valor que não é uma data vira NULL e o relatório o conta.

    Linha do relatório: date_out_of_range

  • NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLE

    Infinity como 9e999; NaN como NULL

    O SQLite lê 9e999 de volta como infinito e não tem NaN.

  • NUL characters in text

    mantido

    O texto do SQLite aceita o caractere NUL, então o valor é copiado como está.

  • text that isn't valid in its encoding

    os bytes inválidos como o caractere de substituição

    O script é UTF-8 e todo valor precisa ser texto válido.

    Linha do relatório: invalid_utf8_replaced

  • text decoded twice (ñ)

    copiado como está

    O script contém exatamente esses caracteres, então eles são copiados; o relatório os aponta.

    Linha do relatório: mojibake_suspected

No OracleNo SQLiteLinha do relatório
BOOLEAN (23ai)INTEGER 0 ou 1 com um CHECKO SQLite não tem coluna booleana, então TRUE e FALSE são 1 e 0.
VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONGTEXTOs tamanhos contam caracteres, quer o Oracle contasse bytes ou caracteres, então todo valor cabe.
NUMBER, NUMBER(p,s), FLOAT(b)INTEGER, ou NUMERIC mantido exato como texto acima de 15 dígitosNUMBER mantém cada dígito; um NUMBER sem precisão cujos valores são todos números inteiros de até 18 dígitos vira um inteiro de 64 bits, e uma escala negativa comporta outros tantos dígitos antes do ponto.decimal_as_text
INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECONDTEXT com o texto do Oracle, como +01-06O SQLite não tem tipo interval; o texto mantém cada parte.type_replaced
DATE, TIMESTAMP(p)DATETIME como texto ISO 8601, com todos os dígitosO DATE do Oracle guarda uma hora até o segundo, então é uma data e hora. Uma exportação em uma sessão americana ou alemã escreve as datas sem a hora nem o século (DD-MON-RR); exporte em uma sessão ISO (SYYYY-MM-DD HH24:MI:SS) para mantê-las.
TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONETIMESTAMP como texto ISO 8601 em UTCO SQLite não tem um tipo que mantenha o fuso, então cada instante é escrito em UTC: o mesmo instante qualquer que seja o fuso que tinha.moments_as_utc
JSON (21c), and CLOB holding JSONTEXTOs mesmos valores JSON; um NULL do SQL que a exportação escreveu como 'null' continua NULL.
BLOB, RAW(n), LONG RAWBLOBBytes continuam bytes.
ROWID, UROWID, XMLTYPE, SDO_GEOMETRYTEXTOs tipos próprios do Oracle não têm equivalente; seus valores mantêm o texto, incluindo os valores ROWID, embora fora do Oracle não signifiquem nada.type_replaced
collations that ignore case (BINARY_CI)comparação exataO SQLite compara texto de forma exata, a menos que se indique outra coisa, e seu NOCASE só trata letras ASCII.case_insensitive_collation
identity columns, and a sequence a BEFORE INSERT trigger assignsINTEGER PRIMARY KEY AUTOINCREMENT, continuando depois do maior idOs ids copiados carregam como estão, e o contador continua depois do maior deles. Uma coluna que um gatilho preenche a partir de uma sequência (o jeito de antes do 12c) também é de identidade.
identity columns the target can't countINTEGER sem contadorO SQLite só conta uma coluna que é toda a chave primária, então a coluna mantém seus valores e as linhas novas precisam dos seus.counter_dropped
CREATE SEQUENCEnão criadaA exportação escreve até onde uma sequência chegou como o seu START WITH, então ela continua dali.sequence_not_converted
virtual columns (GENERATED ALWAYS AS ... VIRTUAL)GENERATED ALWAYS AS, STORED quando PERSISTED, VIRTUAL nos outros casosO SQLite as calcula com a mesma fórmula; os valores que a exportação escreveu para elas ficam de fora.
virtual columns with functions IntoSQL doesn't write, and the || operatoruma coluna simplesUma fórmula que não pode ser escrita para o SQLite deixa uma coluna simples e uma linha no relatório; os valores que a exportação escreveu para colunas virtuais ficam de fora, e o SQLite não tem nenhum para calcular.generated_not_translated
defaults with functions IntoSQL doesn't write (SYS_GUID(), ||)sem valor padrãoUm valor padrão que não pode ser escrito fica de fora e é informado.default_not_translated
CHECK constraintstraduzidosOs mesmos CHECKs, testados à medida que cada linha carrega.
CHECK constraints with functions IntoSQL doesn't writenão criadoUm CHECK que não pode ser escrito fica de fora e é informado.check_skipped
CHECK constraints that are DISABLE or ENABLE NOVALIDATEnão criadoO Oracle não aplica esses CHECKs às linhas que já existiam, então as linhas podem violá-los.check_not_enforced
function-based, bitmap and domain indexesnão criadoO IntoSQL escreve índices b-tree sobre colunas inteiras; crie os outros de novo depois da carga.index_skipped
foreign keysno CREATE TABLE, carregadas sem verificação, depois listadas por PRAGMA foreign_key_checkO SQLite só aceita chaves estrangeiras no CREATE TABLE e só as verifica com PRAGMA foreign_keys ligado. As linhas carregam sem verificação e o script termina listando cada linha sem pai.
foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE onesnão criadaUma chave não pode apontar para uma tabela que não existe, e uma que o Oracle não verifica pode ter linhas sem pai.foreign_key_skipped
partitioned tablesuma tabela com as linhas de todas as partiçõesAs linhas são as mesmas; particione a tabela de novo no SQLite se precisar.partitions_dropped
several schemas in one exportum arquivo, tabelas com o nome do schema na frenteUm arquivo SQLite é um banco de dados, então o nome do schema separa tabelas com o mesmo nome; uma exportação de um só schema mantém os nomes das suas tabelas.schemas_merged
NOT NULL columns with values that become NULLNOT NULL removidoUma coluna cujos valores tiveram de virar NULL não pode manter NOT NULL, senão a carga pararia.not_null_relaxed
views, synonyms, types, packages, procedures, functions and other triggerslistados no relatórioO código deles é escrito em PL/SQL, então eles são listados para você recriá-los.not_converted_objects
exports without CREATE TABLE (data only)tipos lidos dos valoresUma exportação só de dados tem apenas linhas, então os tipos vêm dos valores.no_schema
expressions in INSERT values other than the ones exports writeNULLUm conversor que não executa um banco de dados não consegue avaliá-las; to_date, to_timestamp, TO_CLOB, HEXTORAW e as outras que as exportações escrevem são lidas.expression_value
types IntoSQL doesn't know, and object typesTEXTO texto aceita qualquer valor; mude o tipo depois da carga.unknown_type
dates before year 1 and time zones given as region namesNULLUm valor que não é uma data vira NULL e o relatório o conta.date_out_of_range
NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLEInfinity como 9e999; NaN como NULLO SQLite lê 9e999 de volta como infinito e não tem NaN.
NUL characters in textmantidoO texto do SQLite aceita o caractere NUL, então o valor é copiado como está.
text that isn't valid in its encodingos bytes inválidos como o caractere de substituiçãoO script é UTF-8 e todo valor precisa ser texto válido.invalid_utf8_replaced
text decoded twice (ñ)copiado como estáO script contém exatamente esses caracteres, então eles são copiados; o relatório os aponta.mojibake_suspected

Carregue o script no SQLite

O script cria as tabelas, copia as linhas e depois adiciona chaves, índices e chaves estrangeiras, então carrega rápido e para no primeiro erro.

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

As chaves estrangeiras são declaradas em cada tabela e as linhas carregam com a verificação de chaves estrangeiras desligada. Depois o script lista cada linha que aponta para uma linha que não existe, em vez de falhar no meio do caminho.

Para um dump grande, carregue em um arquivo novo em um disco local. O script carrega tudo em uma transação com a sincronização desligada, então roda na velocidade do disco, e uma carga interrompida no meio não deixa tabelas incompletas.

A linha de comando carrega o arquivo direto em um banco SQLite, sem escrever um script. É grátis.

Gere o dump do Oracle para o melhor resultado

O conversor lê o que o dump contém. Estas opções mantêm mais dos seus dados nele:

  • No SQL Developer, escolha Tools, Database Export, com DDL e o formato de dados Insert. O SQLcl escreve o mesmo com SET SQLFORMAT INSERT.
  • Rode ALTER SESSION SET NLS_DATE_FORMAT = 'SYYYY-MM-DD HH24:MI:SS' antes de exportar: o formato padrão escreve as datas sem a hora nem o século.
  • Um arquivo .dmp do exp ou do expdp é binário: importe-o em um banco de dados Oracle, como o Oracle Database Free no Docker, e exporte-o com o SQL Developer.

O que não é convertido

Visões, pacotes, procedimentos, funções, gatilhos, tipos e sinônimos são escritos em PL/SQL. Eles aparecem no relatório pelo nome, nunca são descartados em silêncio, para que você possa reescrevê-los para o SQLite.

Perguntas sobre Oracle para SQLite

Não encontrou a resposta? Escreva para nós pela página de contato e uma pessoa responde. Página de contato

Meu dump é enviado?

Não. O conversor roda no seu navegador e lê o dump do seu disco em partes, então ele nunca sai do seu computador. O app para desktop e a linha de comando também convertem no seu computador.

Qual o tamanho máximo do dump?

O conversor nunca guarda o dump inteiro na memória: ele lê o arquivo duas vezes, por intervalos, e escreve o script à medida que avança. Dumps de vários gigabytes são convertidos no navegador, no app para desktop e com a linha de comando.

Posso converter um arquivo .dmp do exp ou do expdp?

Não diretamente: o Data Pump e o Export original escrevem um formato binário que só o Oracle lê. Importe-o em qualquer banco de dados Oracle, o Oracle Database Free roda no Docker, e exporte-o com o Database Export do SQL Developer ou com o SQLcl. O conversor avisa quando recebe um arquivo .dmp.

De quais versões do Oracle a exportação pode vir?

Exportações do SQL Developer e do SQLcl, com as definições de tabela do DBMS_METADATA, a partir do Oracle 11g. Cada exportação de teste vem do Oracle 21c e 23ai, em sessões americanas, alemãs e ISO, e é comparada com a origem célula por célula.

O que acontece com NUMBER, DATE e os outros tipos do Oracle?

NUMBER vira INTEGER para números inteiros e mantém todos os dígitos nos outros casos; DATE vira texto DATETIME com a hora; CLOB TEXT, BLOB e RAW BLOB. Infinity é mantido; NaN vira NULL.

As colunas de identidade e as sequências são mantidas?

Uma coluna de identidade que é toda a chave primária da tabela vira INTEGER PRIMARY KEY AUTOINCREMENT e continua depois do maior id. O SQLite não tem sequências, então elas aparecem no relatório.

E os pacotes, procedimentos e gatilhos em PL/SQL?

Eles aparecem no relatório pelo nome e não são convertidos, porque cada banco de dados os escreve na sua própria linguagem.

Em quais versões do SQLite o script carrega?

SQLite 3.31 e posteriores. Cada exportação de teste carrega no 3.31 e no 3.54 e para no primeiro erro se algo der errado.