---
title: "Migrar SQL Server para Oracle no navegador"
description: "Migre um banco SQL Server para Oracle: converta o script que o SSMS gera em um com as mesmas tabelas, chaves e dados, e um relatório de cada mudança."
canonical: https://intosql.com/pt-br/sql-server-para-oracle
last_updated: 2026-10-15
---

# Migrar SQL Server para Oracle no navegador

Solte o script que o Generate Scripts do SSMS escreve com schema e dados, em .sql ou .sql.gz, UTF-16 ou UTF-8, e baixe um script do Oracle com as mesmas tabelas, chaves, índices e dados. Cada valor que o Oracle não aceita como está, e cada objeto que ele não traz, aparece no relatório.

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

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

## O que muda do SQL Server 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 SQL Server | No Oracle | Linha do relatório |
| --- | --- | --- |
| bit | NUMBER(1) com um CHECK de 0 e 1 |  |
| char(n), varchar(n), nchar(n), nvarchar(n) | VARCHAR2(n CHAR), contando caracteres |  |
| varchar(max), nvarchar(max), text, ntext | VARCHAR2(4000 CHAR) quando todo valor cabe em 4000 bytes, senão CLOB | `text_as_lob` |
| empty strings and empty binary values | NULL | `empty_string_null` |
| decimal(p,s), money, smallmoney | NUMBER(p,s); money como NUMBER(19,4) |  |
| datetime, datetime2, smalldatetime | TIMESTAMP(p) |  |
| datetimeoffset | TIMESTAMP WITH TIME ZONE, com o fuso de cada valor |  |
| time | INTERVAL DAY TO SECOND desde a meia-noite |  |
| dates that aren't valid | NULL | `date_out_of_range` |
| json (SQL Server 2025) | CLOB |  |
| uniqueidentifier | VARCHAR2(36) |  |
| binary, varbinary, image | RAW(n) e BLOB |  |
| geometry, geography | BLOB com os bytes próprios do SQL Server | `spatial_as_native` |
| rowversion, timestamp | BLOB, sem valores | `rowversion_empty` |
| xml, sql_variant, hierarchyid, vector | VARCHAR2 ou CLOB com o texto de cada valor | `type_replaced` |
| collations that ignore case (_CI_) | comparação exata | `case_insensitive_collation` |
| IDENTITY | GENERATED BY DEFAULT ON NULL AS IDENTITY, continuando depois do maior id |  |
| CREATE SEQUENCE | CREATE SEQUENCE com as mesmas opções |  |
| computed columns | colunas virtuais | `stored_as_virtual` |
| computed columns with functions Oracle lacks | uma coluna simples | `generated_not_translated` |
| defaults with functions Oracle lacks, and NEXT VALUE FOR | sem valor padrão | `default_not_translated` |
| CHECK constraints | traduzidos |  |
| CHECK constraints with functions Oracle lacks | não criado | `check_skipped` |
| CHECK constraints added WITH NOCHECK or disabled | não criado | `check_not_enforced` |
| filtered and columnstore indexes, and indexes on CLOB columns | não criado | `index_skipped` |
| foreign keys | depois dos dados ENABLE NOVALIDATE, e então validada com um aviso sobre órfãos |  |
| ON UPDATE CASCADE, SET NULL or SET DEFAULT; ON DELETE SET DEFAULT | descartado | `foreign_key_action_unsupported` |
| names over 128 bytes | encurtado | `name_shortened` |
| foreign keys to tables the dump doesn't create | não criado | `foreign_key_skipped` |
| tables on a partition scheme | uma tabela com as linhas de todas as partições | `partitions_dropped` |
| temporal tables (SYSTEM_VERSIONING) | duas tabelas: as linhas atuais e o histórico | `system_versioning_dropped` |
| schemas | 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, functions, procedures, triggers, synonyms, types and partition functions | listados no relatório | `not_converted_objects` |
| scripts without CREATE TABLE (data only) | tipos deduzidos dos valores | `no_schema` |
| expressions in INSERT values | NULL | `expression_value` |
| types IntoSQL doesn't know | CLOB | `unknown_type` |
| 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 @sql_server.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 SQL Server para o melhor resultado

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

- No SSMS, clique com o botão direito no banco de dados, Tasks, Generate Scripts, e escolha as tabelas. dbatools, mssql-scripter e outras ferramentas feitas sobre a mesma biblioteca escrevem o mesmo script.
- Em Advanced, defina Types of data to script como Schema and data. Um script só do schema tem tabelas sem linhas.
- Salve como Unicode, o padrão do SSMS, ou como UTF-8: os dois são lidos do mesmo jeito, e gzip também funciona.

## O que não é convertido

Visões, funções, procedimentos, gatilhos, sinônimos, regras e políticas de segurança são escritos em T-SQL. Eles aparecem no relatório pelo nome, nunca são descartados em silêncio, para que você possa reescrevê-los para o Oracle.

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

### Ele lê o arquivo UTF-16 que o SSMS salva?

Sim. O SSMS salva scripts em UTF-16 por padrão, e o conversor lê UTF-16 e UTF-8 do mesmo jeito, com ou sem gzip, com GO entre os lotes.

### De quais versões do SQL Server o script pode vir?

Scripts que o SSMS, o dbatools ou o mssql-scripter escrevem a partir do SQL Server 2017. Cada script de teste vem do SQL Server 2017, 2022 e 2025 e é comparado com a origem célula por célula.

### Os valores IDENTITY são mantidos?

Sim. As colunas IDENTITY viram colunas de identidade, cada linha mantém seu id, e o próximo id continua depois do maior. As sequências são criadas com as mesmas opções.

### O que acontece com money, datetimeoffset e outros tipos do SQL Server?

bit vira NUMBER(1), datetime2 TIMESTAMP com todos os dígitos, datetimeoffset TIMESTAMP WITH TIME ZONE com seu fuso, e nvarchar(max) CLOB quando seus valores não cabem em um VARCHAR2. Strings vazias viram NULL, pois é assim que o Oracle as guarda, e o relatório as conta.

### E os procedimentos, gatilhos e visões?

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 script de teste carrega no 21c e no 23ai e para no primeiro erro se algo der errado.

## De SQL Server

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

## Guia e todos os pares

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