---
title: "Levar uma exportação do Oracle para outra versão"
description: "Converta uma exportação do SQL Developer ou SQLcl do Oracle 11g ou posterior em um script que carrega no Oracle 19c ou posterior, com as mesmas tabelas e dados."
canonical: https://intosql.com/pt-br/oracle-para-oracle
last_updated: 2026-10-15
---

# Levar uma exportação do Oracle para outra versão

Solte o arquivo .sql que o Database Export do SQL Developer ou o SQLcl escreve, com suas tabelas e Insert, e baixe um script que carrega no Oracle 19c ou posterior. NUMBER, DATE, TIMESTAMP, LOBs, identities e sequências ficam como estão, XMLTYPE e JSON guardam seu texto em um CLOB, e cada mudança é listada no relatório.

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

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

## O que muda entre o arquivo e o script

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 arquivo | No script | Linha do relatório |
| --- | --- | --- |
| BOOLEAN (23ai) | BOOLEAN no 23ai, senão NUMBER(1) com um CHECK de 0 e 1 |  |
| VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONG | os mesmos tipos, com seus tamanhos BYTE ou CHAR |  |
| VARCHAR2 and NVARCHAR2 past what the target's own types hold | VARCHAR2(4000 CHAR) quando todo valor cabe em 4000 bytes, senão CLOB | `text_as_lob` |
| NUMBER, NUMBER(p,s), FLOAT(b) | os mesmos tipos NUMBER |  |
| INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND | os mesmos tipos INTERVAL |  |
| DATE, TIMESTAMP(p) | DATE e TIMESTAMP(p), como declarados |  |
| TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE | os mesmos tipos |  |
| JSON (21c), and CLOB holding JSON | JSON no 21c e posteriores, senão CLOB |  |
| BLOB, RAW(n), LONG RAW | os mesmos tipos; LONG RAW como BLOB |  |
| ROWID, UROWID, XMLTYPE, SDO_GEOMETRY | CLOB com o texto deles | `type_replaced` |
| collations that ignore case (BINARY_CI) | comparação exata | `case_insensitive_collation` |
| identity columns, and a sequence a BEFORE INSERT trigger assigns | GENERATED BY DEFAULT ON NULL AS IDENTITY, continuando depois do maior id |  |
| identity columns the target can't count | um inteiro simples | `counter_dropped` |
| CREATE SEQUENCE | CREATE SEQUENCE com as mesmas opções |  |
| virtual columns (GENERATED ALWAYS AS ... VIRTUAL) | colunas virtuais | `stored_as_virtual` |
| 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 | depois dos dados ENABLE NOVALIDATE, e então validada com um aviso sobre órfãos |  |
| ON DELETE CASCADE that cascades in a cycle or along a second path | descartado | `foreign_key_action_unsupported` |
| foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE ones | não criada | `foreign_key_skipped` |
| names longer than Oracle 12.1 allows | encurtados | `name_shortened` |
| partitioned tables | uma tabela com as linhas de todas as partições | `partitions_dropped` |
| several schemas in one export | um schema, 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 | CLOB | `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 | NaN e Infinity mantidos |  |
| 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 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 @oracle.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 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

Views, triggers, procedures, funções e outros objetos escritos na própria linguagem do Oracle aparecem no relatório pelo nome, nunca são descartados em silêncio, para você conferir cada um com a versão do Oracle em que vai carregar antes de recriá-lo.

## Perguntas sobre levar o Oracle entre versões

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

Eles ficam como estão: NUMBER com sua precisão, DATE, TIMESTAMP, os intervalos, CHAR e VARCHAR2 com seus tamanhos, RAW e os LOBs. XMLTYPE e JSON mantêm o texto em um CLOB, então o script carrega no 19c.

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

Sim. As colunas de identidade e as sequências ficam como estão e continuam de onde a exportação diz que chegaram.

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

Eles aparecem no relatório pelo nome e não são convertidos, para que você possa recriá-los quando as tabelas estiverem prontas.

### Em quais versões do Oracle o script carrega?

Oracle 19c e posteriores. Cada exportação de teste carrega no 21c e no 23ai 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 SQLite](https://intosql.com/pt-br/oracle-para-sqlite)
- [Oracle para SQL Server](https://intosql.com/pt-br/oracle-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)
- [SQLite para Oracle](https://intosql.com/pt-br/sqlite-para-oracle)

## Guia e todos os pares

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