---
title: "Migrar Oracle a SQL Server en tu navegador"
description: "Migra una base de datos Oracle a SQL Server: convierte una exportación de SQL Developer o SQLcl en un script con las mismas tablas, claves y datos."
canonical: https://intosql.com/es/oracle-a-sql-server
last_updated: 2026-10-15
---

# Migrar Oracle a SQL Server en tu navegador

Suelta el archivo .sql que escribe Database Export de SQL Developer o SQLcl, con sus tablas y sentencias Insert, y descarga un script de SQL Server con las mismas tablas, claves, índices y datos. Cada valor que SQL Server no puede guardar tal cual, y cada objeto que no admite, aparece en el informe.

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

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

## Qué cambia de Oracle a SQL Server

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 Oracle | En SQL Server | Línea del informe |
| --- | --- | --- |
| BOOLEAN (23ai) | bit |  |
| VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONG | nvarchar(n), nchar(n) y nvarchar(max) |  |
| VARCHAR2 and NVARCHAR2 past what the target's own types hold | nvarchar(2n), o nvarchar(max) a partir de 4000 | `text_length_widened` |
| NUMBER, NUMBER(p,s), FLOAT(b) | decimal(p,s), o bigint |  |
| INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND | nvarchar(100) con el texto de Oracle, como +01-06 | `type_replaced` |
| DATE, TIMESTAMP(p) | datetime2(p) |  |
| TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE | datetimeoffset, con el desfase de cada valor |  |
| JSON (21c), and CLOB holding JSON | nvarchar(max) |  |
| BLOB, RAW(n), LONG RAW | binary(n), varbinary(n) y varbinary(max) |  |
| ROWID, UROWID, XMLTYPE, SDO_GEOMETRY | nvarchar(max), y xml para XMLTYPE |  |
| collations that ignore case (BINARY_CI) | la misma intercalación en cada columna |  |
| identity columns, and a sequence a BEFORE INSERT trigger assigns | IDENTITY, siguiendo después del id más alto |  |
| identity columns the target can't count | un entero simple | `counter_dropped` |
| CREATE SEQUENCE | CREATE SEQUENCE con las mismas opciones |  |
| virtual columns (GENERATED ALWAYS AS ... VIRTUAL) | columnas calculadas |  |
| virtual columns with functions IntoSQL doesn't write, and the || operator | una columna simple | `generated_not_translated` |
| defaults with functions IntoSQL doesn't write (SYS_GUID(), ||) | sin valor predeterminado | `default_not_translated` |
| CHECK constraints | traducidos |  |
| CHECK constraints with functions IntoSQL doesn't write | no se crea | `check_skipped` |
| CHECK constraints that are DISABLE or ENABLE NOVALIDATE | no se crea | `check_not_enforced` |
| function-based, bitmap and domain indexes | no se crea | `index_skipped` |
| foreign keys | después de los datos, WITH NOCHECK, luego comprobada con una advertencia si hay huérfanas |  |
| 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 | no se crea | `foreign_key_skipped` |
| partitioned tables | una tabla con las filas de todas las particiones | `partitions_dropped` |
| NOT NULL columns with values that become NULL | sin NOT NULL | `not_null_relaxed` |
| views, synonyms, types, packages, procedures, functions and other triggers | listados en el informe | `not_converted_objects` |
| exports without CREATE TABLE (data only) | tipos leídos de los 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 | 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 SQL Server

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

Las claves foráneas se agregan WITH NOCHECK y luego se comprueban. Si una fila apunta a una fila que no existe, el script dice qué restricción es y la deja sin comprobar, en lugar de fallar a medias.

Para un volcado grande, ejecuta sqlcmd en la misma máquina que el servidor. Cada lote de hasta 1000 filas se confirma por separado, así que el registro de transacciones se mantiene pequeño.

## Haz el volcado de Oracle para el mejor resultado

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

- En SQL Developer, elige Tools, Database Export, con DDL y el formato de datos Insert. SQLcl escribe lo mismo con SET SQLFORMAT INSERT.
- Ejecuta ALTER SESSION SET NLS_DATE_FORMAT = 'SYYYY-MM-DD HH24:MI:SS' antes de exportar: el formato predeterminado escribe las fechas sin su hora ni su siglo.
- Un archivo .dmp de exp o expdp es binario: impórtalo en una base de datos Oracle, por ejemplo Oracle Database Free en Docker, y expórtalo con SQL Developer.

## Qué no se convierte

Las vistas, paquetes, procedimientos, funciones, disparadores, tipos y sinónimos se escriben en PL/SQL. Aparecen en el informe por nombre, nunca se descartan en silencio, para que puedas reescribirlos para SQL Server.

## Preguntas sobre Oracle a SQL Server

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

### ¿Puedo convertir un archivo .dmp de exp o expdp?

No directamente: Data Pump y el Export original escriben un formato binario que solo Oracle lee. Impórtalo en cualquier base de datos Oracle, Oracle Database Free funciona en Docker, y expórtalo con Database Export de SQL Developer o con SQLcl. El convertidor te lo indica cuando recibe un archivo .dmp.

### ¿De qué versiones de Oracle puede venir la exportación?

Exportaciones de SQL Developer y SQLcl, con las definiciones de tabla de DBMS_METADATA, desde Oracle 11g en adelante. Cada exportación de prueba viene de Oracle 21c y 23ai, en sesiones estadounidenses, alemanas e ISO, y se compara con su origen celda por celda.

### ¿Qué pasa con NUMBER, DATE y los demás tipos de Oracle?

NUMBER se vuelve decimal, o bigint para números enteros; DATE se vuelve datetime2(0), conservando su hora; el texto nvarchar, comparado exactamente como en Oracle; CLOB nvarchar(max), BLOB varbinary(max). NaN e Infinity se vuelven NULL y el informe los cuenta.

### ¿Se conservan las columnas de identidad y las secuencias?

Sí. Las columnas de identidad se vuelven columnas IDENTITY y siguen después del id más alto; las secuencias se vuelven secuencias de SQL Server, y los valores predeterminados que usan una la siguen usando.

### ¿Qué pasa con los paquetes, procedimientos y disparadores de PL/SQL?

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 SQL Server carga el script?

SQL Server 2017 a 2025. El mismo script carga en cada una, y se detiene en el primer error si algo sale mal.

## Desde Oracle

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

## Hacia SQL Server

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

## Guía y todos los pares

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