---
title: "Migrar Oracle para SQLite no navegador"
description: "Migre um banco Oracle para SQLite: converta uma exportação do SQL Developer ou SQLcl em um script com as mesmas tabelas, chaves e dados."
canonical: https://intosql.com/pt-br/oracle-para-sqlite
last_updated: 2026-10-15
---

# Migrar Oracle para SQLite no navegador

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.

[Guia de migração de Oracle para SQLite](https://intosql.com/docs/migrations/oracle-to-sqlite)

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

## 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.

| No Oracle | No SQLite | Linha do relatório |
| --- | --- | --- |
| BOOLEAN (23ai) | INTEGER 0 ou 1 com um CHECK |  |
| VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONG | TEXT |  |
| NUMBER, NUMBER(p,s), FLOAT(b) | INTEGER, ou NUMERIC mantido exato como texto acima de 15 dígitos | `decimal_as_text` |
| INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND | TEXT com o texto do Oracle, como +01-06 | `type_replaced` |
| DATE, TIMESTAMP(p) | DATETIME como texto ISO 8601, com todos os dígitos |  |
| TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE | TIMESTAMP como texto ISO 8601 em UTC | `moments_as_utc` |
| JSON (21c), and CLOB holding JSON | TEXT |  |
| BLOB, RAW(n), LONG RAW | BLOB |  |
| ROWID, UROWID, XMLTYPE, SDO_GEOMETRY | TEXT | `type_replaced` |
| collations that ignore case (BINARY_CI) | comparação exata | `case_insensitive_collation` |
| identity columns, and a sequence a BEFORE INSERT trigger assigns | INTEGER PRIMARY KEY AUTOINCREMENT, continuando depois do maior id |  |
| identity columns the target can't count | INTEGER sem contador | `counter_dropped` |
| CREATE SEQUENCE | não criada | `sequence_not_converted` |
| virtual columns (GENERATED ALWAYS AS ... VIRTUAL) | GENERATED ALWAYS AS, STORED quando PERSISTED, VIRTUAL nos outros casos |  |
| virtual columns with functions IntoSQL doesn't write, and the || operator | uma coluna simples | `generated_not_translated` |
| defaults with functions IntoSQL doesn't write (SYS_GUID(), ||) | sem valor padrão | `default_not_translated` |
| CHECK constraints | traduzidos |  |
| CHECK constraints with functions IntoSQL doesn't write | não criado | `check_skipped` |
| CHECK constraints that are DISABLE or ENABLE NOVALIDATE | não criado | `check_not_enforced` |
| function-based, bitmap and domain indexes | não criado | `index_skipped` |
| foreign keys | no CREATE TABLE, carregadas sem verificação, depois listadas por PRAGMA foreign_key_check |  |
| foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE ones | não criada | `foreign_key_skipped` |
| partitioned tables | uma tabela com as linhas de todas as partições | `partitions_dropped` |
| several schemas in one export | um arquivo, tabelas com o nome do schema na frente | `schemas_merged` |
| NOT NULL columns with values that become NULL | NOT NULL removido | `not_null_relaxed` |
| views, synonyms, types, packages, procedures, functions and other triggers | listados no relatório | `not_converted_objects` |
| exports without CREATE TABLE (data only) | tipos lidos dos valores | `no_schema` |
| expressions in INSERT values other than the ones exports write | NULL | `expression_value` |
| types IntoSQL doesn't know, and object types | TEXT | `unknown_type` |
| dates before year 1 and time zones given as region names | NULL | `date_out_of_range` |
| NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLE | Infinity como 9e999; NaN como NULL |  |
| NUL characters in text | mantido |  |
| text that isn't valid in its encoding | os bytes inválidos como o caractere de substituição | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | copiado como está | `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.

```shell
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

### 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.

## De Oracle

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

## Para SQLite

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

## Guia e todos os pares

- [SQLite para Oracle](https://intosql.com/pt-br/sqlite-para-oracle)
- [Guia de migração de Oracle para SQLite](https://intosql.com/docs/migrations/oracle-to-sqlite)
- [Tipos de dados de Oracle para SQLite](https://intosql.com/docs/types/oracle-to-sqlite)
- [Todos os pares de bancos de dados](https://intosql.com/pt-br/migracao-de-banco-de-dados)
