---
title: "Migrar SQLite para Oracle no navegador"
description: "Migre um banco SQLite para Oracle: converta o arquivo .db ou o dump em um script com as mesmas tabelas, chaves e dados, e um relatório de cada mudança."
canonical: https://intosql.com/pt-br/sqlite-para-oracle
last_updated: 2026-10-15
---

# Migrar SQLite para Oracle no navegador

Solte um arquivo de banco de dados SQLite (.db, .sqlite, .sqlite3) ou o SQL que o .dump do sqlite3 escreve, e baixe um script do Oracle com as mesmas tabelas, chaves, índices e dados. Cada coluna recebe o tipo em que seus valores cabem, e cada valor que o Oracle não aceita como está aparece no relatório.

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

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

## O que muda do SQLite para o Oracle

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 SQLite | No Oracle | Linha do relatório |
| --- | --- | --- |
| declared types (any text: VARCHAR(255), DATETIME, BOOLEAN, JSON or none) | o tipo em que cabem todos os valores da coluna |  |
| BOOLEAN, BOOL | NUMBER(1) com um CHECK de 0 e 1 |  |
| TEXT, VARCHAR(n), CHAR(n), CLOB | VARCHAR2(n CHAR) quando todo valor cabe, senão CLOB |  |
| TEXT and VARCHAR(n) longer than 4000 bytes | VARCHAR2(4000 CHAR) quando todo valor cabe em 4000 bytes (750 caracteres em uma chave), senão CLOB | `text_as_lob` |
| DECIMAL(p,s), NUMERIC | o tipo exato quando todo valor cabe nele, senão um double |  |
| BLOB, and columns holding bytes | BLOB |  |
| DATE, DATETIME, TIMESTAMP holding ISO 8601 text | DATE ou TIMESTAMP(p), conforme o que os valores contêm |  |
| JSON holding JSON text | CLOB |  |
| Infinity in REAL columns | mantido como BINARY_DOUBLE_INFINITY |  |
| INTEGER PRIMARY KEY, AUTOINCREMENT | GENERATED BY DEFAULT ON NULL AS IDENTITY, continuando depois do maior id ou do valor de sqlite_sequence |  |
| COLLATE NOCASE | comparação exata | `case_insensitive_collation` |
| generated columns | colunas virtuais | `stored_as_virtual` |
| generated columns with functions IntoSQL doesn't write, and the || operator | uma coluna simples | `generated_not_translated` |
| defaults with functions IntoSQL doesn't write (strftime, randomblob) | sem valor padrão | `default_not_translated` |
| CHECK constraints | traduzidos |  |
| CHECK constraints with functions IntoSQL doesn't write | não criado | `check_skipped` |
| partial and expression indexes | não criado | `index_skipped` |
| foreign keys (unenforced unless PRAGMA foreign_keys=ON) | depois dos dados ENABLE NOVALIDATE, e então validada |  |
| ON UPDATE CASCADE, SET NULL or SET DEFAULT; ON DELETE SET DEFAULT | descartado | `foreign_key_action_unsupported` |
| empty strings and empty blobs | NULL | `empty_string_null` |
| foreign keys to tables the dump doesn't create | não criada | `foreign_key_skipped` |
| primary keys holding NULL, and NOT NULL columns with values that become NULL | NOT NULL removido | `not_null_relaxed` |
| views, triggers and virtual tables (FTS, R*Tree) | listados no relatório | `not_converted_objects` |
| dumps without CREATE TABLE (--data-only) | tipos lidos dos valores | `no_schema` |
| expressions in INSERT values other than the text functions dumps write | NULL | `expression_value` |
| NUL characters in text | mantido |  |
| text that isn't valid UTF-8 | 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 Oracle

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
NLS_LANG=.AL32UTF8 sqlplus -S -L user@//localhost/mydb @sqlite.oracle.sql
```

As chaves estrangeiras são adicionadas ENABLE NOVALIDATE, então as linhas novas são verificadas na hora, e depois validadas. Se uma linha antiga aponta para uma linha que não existe, o script informa qual restrição e a deixa sem validação, em vez de falhar no meio do caminho.

Para um dump grande, execute o SQL*Plus na mesma máquina do banco de dados. O script faz commit a cada 100 linhas. O usuário que o executa precisa de CREATE TABLE, CREATE SEQUENCE, CREATE TRIGGER e CREATE PROCEDURE, e de cota no seu tablespace.

## Gere o dump do SQLite para o melhor resultado

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

- O próprio arquivo do banco é convertido como está, lido página por página no navegador. Feche antes o app que escreve nele, para que nenhuma mudança fique para trás no arquivo -wal.
- sqlite3 app.db .dump > app.sql escreve o mesmo banco de dados como SQL, que também é convertido, em .sql ou .sql.gz.
- O DB Browser for SQLite escreve esse SQL com File, Export, Database to SQL file, e o iterdump() do Python também.

## O que não é convertido

Visões e gatilhos são escritos na linguagem própria do SQLite. Eles aparecem no relatório pelo nome, nunca são descartados em silêncio, para que você possa reescrevê-los para o Oracle. Tabelas virtuais, como FTS5 e R*Tree, também aparecem, e suas tabelas internas ficam de fora.

## Perguntas sobre SQLite para Oracle

### 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 o próprio arquivo .db?

Sim. Solte o arquivo .db, .sqlite ou .sqlite3: ele é lido no navegador e nunca é enviado. Textos com caracteres NUL e todos os dígitos de um double chegam como foram armazenados, algo que um .dump pode cortar.

### De quais versões do SQLite o dump pode vir?

Arquivos de banco de dados do SQLite 3.0 em diante, em UTF-8 ou UTF-16, e dumps do .dump do shell sqlite3 ou do iterdump() do Python. Cada arquivo e dump de teste vem do sqlite3 3.31 a 3.54, incluindo tabelas STRICT e WITHOUT ROWID, e é comparado com a origem célula por célula.

### Como os tipos de coluna são decididos quando o SQLite não os impõe?

O tipo declarado é uma dica e os valores decidem: uma coluna vira NUMBER, BINARY_DOUBLE, DATE, TIMESTAMP, BLOB, VARCHAR2 ou CLOB quando todo valor cabe nele. Strings vazias viram NULL, como o Oracle as guarda, e o relatório as conta.

### INTEGER PRIMARY KEY e AUTOINCREMENT são mantidos?

Sim. Uma INTEGER PRIMARY KEY vira uma coluna identity, cada linha mantém seu id, e o próximo id continua depois do maior, ou depois do valor de sqlite_sequence com AUTOINCREMENT.

### E as visões e os gatilhos?

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 Oracle o script carrega?

Oracle 19c e posteriores. Cada dump de teste carrega no 21c e no 23ai e para no primeiro erro se algo der errado.

## De SQLite

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

## Para Oracle

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

## Guia e todos os pares

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