---
title: "Migrar Oracle para MySQL no navegador"
description: "Migre um banco Oracle para MySQL: 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-mysql
last_updated: 2026-10-15
---

# Migrar Oracle para MySQL 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 MySQL com as mesmas tabelas, chaves, índices e dados. Cada valor que o MySQL não aceita como está, e cada objeto que ele não traz, aparece no relatório.

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

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

## O que muda do Oracle para o MySQL

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 MySQL | Linha do relatório |
| --- | --- | --- |
| BOOLEAN (23ai) | tinyint(1) |  |
| VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONG | varchar(n) até 1024 caracteres, tipos text acima disso |  |
| NUMBER, NUMBER(p,s), FLOAT(b) | decimal(p,s), ou bigint |  |
| INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND | varchar(100) com o texto do Oracle, como +01-06 | `type_replaced` |
| DATE, TIMESTAMP(p) | datetime(p) |  |
| TIMESTAMP(7) to TIMESTAMP(9) | seis dígitos de segundo, o sétimo cortado | `fraction_cut` |
| TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE | datetime(p) em UTC | `moments_as_utc` |
| JSON (21c), and CLOB holding JSON | json |  |
| BLOB, RAW(n), LONG RAW | binary(n), varbinary(n) e tipos blob |  |
| ROWID, UROWID, XMLTYPE, SDO_GEOMETRY | text | `type_replaced` |
| collations that ignore case (BINARY_CI) | comparação exata (utf8mb4_bin) | `case_insensitive_collation` |
| identity columns, and a sequence a BEFORE INSERT trigger assigns | AUTO_INCREMENT, continuando depois do maior id |  |
| identity columns the target can't count | um inteiro simples | `counter_dropped` |
| CREATE SEQUENCE | não criada | `sequence_not_converted` |
| virtual columns (GENERATED ALWAYS AS ... VIRTUAL) | colunas geradas, 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 | chaves estrangeiras, carregadas com FOREIGN_KEY_CHECKS=0 |  |
| 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 banco de dados, 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 | longtext | `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 | NULL | `invalid_value_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 MySQL

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
mysql --default-character-set=utf8mb4 mydb < oracle.mysql.sql
```

As chaves estrangeiras são criadas como o dump as declara, com FOREIGN_KEY_CHECKS=0 enquanto as linhas carregam, então uma linha que aponta para uma linha que não existe não para a carga.

Para um dump grande, execute o cliente na mesma máquina do servidor e aumente max_allowed_packet se uma única linha for muito grande.

O IntoSQL Pro carrega o arquivo direto no MySQL pelo app para desktop ou pela linha de comando, sem escrever um script.

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

## Perguntas sobre Oracle para MySQL

### 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 decimal, ou bigint para números inteiros, e texto acima de 65 dígitos; DATE vira datetime, mantendo a hora; CLOB longtext, BLOB blob, e os intervalos mantêm o texto do Oracle. NaN e Infinity viram NULL e o relatório os conta.

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

As colunas de identidade viram AUTO_INCREMENT e continuam depois do maior id. O MySQL não tem sequências, então elas aparecem no relatório, assim como os valores padrão que as usam.

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

MySQL 5.7 e posteriores. Cada exportação de teste carrega no 5.7 e no 9 e para no primeiro erro se algo der errado.

## De Oracle

- [Oracle para PostgreSQL](https://intosql.com/pt-br/oracle-para-postgresql)
- [Oracle para MariaDB](https://intosql.com/pt-br/oracle-para-mariadb)
- [Oracle para SQLite](https://intosql.com/pt-br/oracle-para-sqlite)
- [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 MySQL

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

## Guia e todos os pares

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