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

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

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

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

## O que muda do Oracle para o SQL Server

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 SQL Server | Linha do relatório |
| --- | --- | --- |
| BOOLEAN (23ai) | bit |  |
| VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONG | nvarchar(n), nchar(n) e nvarchar(max) |  |
| VARCHAR2 and NVARCHAR2 past what the target's own types hold | nvarchar(2n), ou nvarchar(max) acima de 4000 | `text_length_widened` |
| NUMBER, NUMBER(p,s), FLOAT(b) | decimal(p,s), ou bigint |  |
| INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND | nvarchar(100) com o texto do Oracle, como +01-06 | `type_replaced` |
| DATE, TIMESTAMP(p) | datetime2(p) |  |
| TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE | datetimeoffset, com o fuso de cada valor |  |
| JSON (21c), and CLOB holding JSON | nvarchar(max) |  |
| BLOB, RAW(n), LONG RAW | binary(n), varbinary(n) e varbinary(max) |  |
| ROWID, UROWID, XMLTYPE, SDO_GEOMETRY | nvarchar(max), e xml para XMLTYPE |  |
| collations that ignore case (BINARY_CI) | a mesma collation em cada coluna |  |
| identity columns, and a sequence a BEFORE INSERT trigger assigns | 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 computadas |  |
| 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 WITH NOCHECK, e então verificada com um aviso sobre órfãos |  |
| ON DELETE CASCADE that cascades in a cycle or along a second path | NO ACTION | `foreign_key_action_dropped` |
| 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` |
| 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 | nvarchar(max) | `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 SQL Server

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
sqlcmd -b -f 65001 -S localhost -d mydb -i oracle.sql_server.sql
```

As chaves estrangeiras são adicionadas WITH NOCHECK e depois verificadas. Se uma linha aponta para uma linha que não existe, o script informa qual restrição e a deixa sem verificação, em vez de falhar no meio do caminho.

Para um dump grande, execute o sqlcmd na mesma máquina do servidor. Cada lote de até 1000 linhas faz commit sozinho, então o log de transações continua pequeno.

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

## Perguntas sobre Oracle para SQL Server

### 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; DATE vira datetime2(0), mantendo a hora; texto nvarchar, comparado de forma exata como no Oracle; CLOB nvarchar(max), BLOB varbinary(max). NaN e Infinity viram NULL e o relatório os conta.

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

Sim. As colunas de identidade viram colunas IDENTITY e continuam depois do maior id; as sequências viram sequências do SQL Server, e os valores padrão que usam uma continuam usando.

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

SQL Server 2017 a 2025. O mesmo script carrega em cada uma delas 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 Oracle](https://intosql.com/pt-br/oracle-para-oracle)

## Para SQL Server

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

## Guia e todos os pares

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