---
title: "Migrar SQL Server a Oracle en tu navegador"
description: "Migra una base de datos SQL Server a Oracle: convierte el script que genera SSMS en uno con las mismas tablas, claves y datos, y un informe de cada cambio."
canonical: https://intosql.com/es/sql-server-a-oracle
last_updated: 2026-10-15
---

# Migrar SQL Server a Oracle en tu navegador

Suelta el script que escribe Generate Scripts de SSMS con esquema y datos, en .sql o .sql.gz, UTF-16 o UTF-8, y descarga un script de Oracle con las mismas tablas, claves, índices y datos. Cada valor que Oracle no puede guardar tal cual, y cada objeto que no admite, aparece en el informe.

[Guía de migración de SQL Server a Oracle](https://intosql.com/docs/migrations/sql-server-to-oracle)

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

## Qué cambia de SQL Server a Oracle

Cada fila es una regla que aplica el convertidor, con la línea que escribe en el informe cuando la regla cambia algo en tus datos.

| En SQL Server | En Oracle | Línea del informe |
| --- | --- | --- |
| bit | NUMBER(1) con un CHECK de 0 y 1 |  |
| char(n), varchar(n), nchar(n), nvarchar(n) | VARCHAR2(n CHAR), contando caracteres |  |
| varchar(max), nvarchar(max), text, ntext | VARCHAR2(4000 CHAR) cuando cada valor cabe en 4000 bytes, si no 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, con el desfase de cada valor |  |
| time | INTERVAL DAY TO SECOND desde la medianoche |  |
| dates that aren't valid | NULL | `date_out_of_range` |
| json (SQL Server 2025) | CLOB |  |
| uniqueidentifier | VARCHAR2(36) |  |
| binary, varbinary, image | RAW(n) y BLOB |  |
| geometry, geography | BLOB con los bytes propios de SQL Server | `spatial_as_native` |
| rowversion, timestamp | BLOB, sin valores | `rowversion_empty` |
| xml, sql_variant, hierarchyid, vector | VARCHAR2 o CLOB con el texto de cada valor | `type_replaced` |
| collations that ignore case (_CI_) | comparación exacta | `case_insensitive_collation` |
| IDENTITY | GENERATED BY DEFAULT ON NULL AS IDENTITY, siguiendo después del id más alto |  |
| CREATE SEQUENCE | CREATE SEQUENCE con las mismas opciones |  |
| computed columns | columnas virtuales | `stored_as_virtual` |
| computed columns with functions Oracle lacks | una columna simple | `generated_not_translated` |
| defaults with functions Oracle lacks, and NEXT VALUE FOR | sin valor predeterminado | `default_not_translated` |
| CHECK constraints | traducidos |  |
| CHECK constraints with functions Oracle lacks | no se crea | `check_skipped` |
| CHECK constraints added WITH NOCHECK or disabled | no se crea | `check_not_enforced` |
| filtered and columnstore indexes, and indexes on CLOB columns | no se crea | `index_skipped` |
| foreign keys | después de los datos, ENABLE NOVALIDATE, luego validada con una advertencia si hay huérfanas |  |
| ON UPDATE CASCADE, SET NULL or SET DEFAULT; ON DELETE SET DEFAULT | se descarta | `foreign_key_action_unsupported` |
| names over 128 bytes | acortado | `name_shortened` |
| foreign keys to tables the dump doesn't create | no se crea | `foreign_key_skipped` |
| tables on a partition scheme | una tabla con las filas de todas las particiones | `partitions_dropped` |
| temporal tables (SYSTEM_VERSIONING) | dos tablas: las filas actuales y el historial | `system_versioning_dropped` |
| schemas | un esquema, con el nombre del esquema delante de cada tabla | `schemas_merged` |
| NOT NULL columns with values that become NULL | sin NOT NULL | `not_null_relaxed` |
| views, functions, procedures, triggers, synonyms, types and partition functions | listados en el informe | `not_converted_objects` |
| scripts without CREATE TABLE (data only) | tipos leídos de los valores | `no_schema` |
| expressions in INSERT values | NULL | `expression_value` |
| types IntoSQL doesn't know | CLOB | `unknown_type` |
| NUL characters in text | se conserva |  |
| text that isn't valid in its encoding | los bytes incorrectos como carácter de reemplazo | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | se copia tal cual | `mojibake_suspected` |

## Carga el script en Oracle

El script crea las tablas, copia las filas y luego agrega claves, índices y claves foráneas, así que carga rápido y se detiene en el primer error.

```shell
NLS_LANG=.AL32UTF8 sqlplus -S -L user@//localhost/mydb @sql_server.oracle.sql
```

Las claves foráneas se agregan ENABLE NOVALIDATE, así que las filas nuevas se comprueban de inmediato, y luego se validan. Si una fila antigua apunta a una fila que no existe, el script dice qué restricción es y la deja sin validar, en lugar de fallar a medias.

Para un volcado grande, ejecuta SQL*Plus en la misma máquina que la base de datos. El script confirma cada 100 filas. El usuario que lo ejecuta necesita CREATE TABLE, CREATE SEQUENCE, CREATE TRIGGER y CREATE PROCEDURE, y cuota en su tablespace.

## Haz el volcado de SQL Server para el mejor resultado

El convertidor lee lo que contiene el volcado. Estas opciones conservan más de tus datos en él:

- En SSMS, haz clic derecho en la base de datos, Tasks, Generate Scripts, y elige las tablas. dbatools, mssql-scripter y otras herramientas basadas en la misma biblioteca escriben el mismo script.
- En Advanced, cambia Types of data to script a Schema and data. Un script solo del esquema tiene tablas sin filas.
- Guárdalo como Unicode, el formato predeterminado de SSMS, o como UTF-8: ambos se leen igual, y gzip también funciona.

## Qué no se convierte

Las vistas, funciones, procedimientos, disparadores, sinónimos, reglas y políticas de seguridad se escriben en T-SQL. Aparecen en el informe por nombre, nunca se descartan en silencio, para que puedas reescribirlos para Oracle.

## Preguntas sobre SQL Server a Oracle

### ¿Se sube mi volcado?

No. El convertidor se ejecuta en tu navegador y lee el volcado de tu disco por partes, así que nunca sale de tu computadora. La app de escritorio y la línea de comandos también convierten en tu computadora.

### ¿Qué tan grande puede ser el volcado?

El convertidor nunca tiene todo el volcado en memoria: lee el archivo dos veces, por rangos, y escribe el script sobre la marcha. Los volcados de varios gigabytes se convierten en el navegador, en la app de escritorio y con la línea de comandos.

### ¿Lee el archivo UTF-16 que guarda SSMS?

Sí. SSMS guarda los scripts en UTF-16 por defecto, y el convertidor lee UTF-16 y UTF-8 por igual, con gzip o sin él, con GO entre lotes.

### ¿De qué versiones de SQL Server puede venir el script?

Scripts que SSMS, dbatools o mssql-scripter escriben desde SQL Server 2017 en adelante. Cada script de prueba viene de SQL Server 2017, 2022 y 2025 y se compara con su origen celda por celda.

### ¿Se conservan los valores IDENTITY?

Sí. Las columnas IDENTITY se vuelven columnas de identidad, cada fila conserva su id y el siguiente id sigue después del más alto. Las secuencias se crean con las mismas opciones.

### ¿Qué pasa con money, datetimeoffset y otros tipos de SQL Server?

bit se vuelve NUMBER(1), datetime2 TIMESTAMP con cada dígito, datetimeoffset TIMESTAMP WITH TIME ZONE con su desfase, y nvarchar(max) CLOB cuando sus valores no caben en un VARCHAR2. Las cadenas vacías se vuelven NULL, como las guarda Oracle, y el informe las cuenta.

### ¿Qué pasa con los procedimientos, los disparadores y las vistas?

Aparecen en el informe por nombre y no se convierten, porque cada base de datos los escribe en su propio lenguaje.

### ¿En qué versiones de Oracle carga el script?

Oracle 19c y posteriores. Cada script de prueba carga en 21c y 23ai, y se detiene en el primer error si algo sale mal.

## Desde SQL Server

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

## Hacia Oracle

- [MySQL a Oracle](https://intosql.com/es/mysql-a-oracle)
- [MariaDB a Oracle](https://intosql.com/es/mariadb-a-oracle)
- [PostgreSQL a Oracle](https://intosql.com/es/postgresql-a-oracle)
- [SQLite a Oracle](https://intosql.com/es/sqlite-a-oracle)
- [Oracle a Oracle](https://intosql.com/es/oracle-a-oracle)

## Guía y todos los pares

- [Oracle a SQL Server](https://intosql.com/es/oracle-a-sql-server)
- [Guía de migración de SQL Server a Oracle](https://intosql.com/docs/migrations/sql-server-to-oracle)
- [Tipos de datos de SQL Server a Oracle](https://intosql.com/docs/types/sql-server-to-oracle)
- [Todos los pares de bases de datos](https://intosql.com/es/migracion-de-bases-de-datos)
