---
title: "Migrare Oracle a SQL Server nel browser"
description: "Migra un database Oracle a SQL Server: converti un export di SQL Developer o SQLcl in uno script con le stesse tabelle, chiavi e dati, e un report."
canonical: https://intosql.com/it/oracle-in-sql-server
last_updated: 2026-10-15
---

# Migrare Oracle a SQL Server nel browser

Trascina il file .sql che scrive Database Export di SQL Developer o SQLcl, con le sue tabelle e istruzioni Insert, e scarica uno script per SQL Server con le stesse tabelle, chiavi, indici e dati. Ogni valore che SQL Server non può contenere così com'è, e ogni oggetto che non supporta, è elencato nel report.

[Guida alla migrazione da Oracle a SQL Server](https://intosql.com/docs/migrations/oracle-to-sql-server)

[Tipi di dati da Oracle a SQL Server](https://intosql.com/docs/types/oracle-to-sql-server)

## Cosa cambia da Oracle a SQL Server

Ogni riga è una regola che il convertitore applica, con la riga del report che scrive quando la regola cambia qualcosa nei tuoi dati.

| In Oracle | In SQL Server | Riga del report |
| --- | --- | --- |
| 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), o nvarchar(max) oltre 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 il testo di Oracle, come +01-06 | `type_replaced` |
| DATE, TIMESTAMP(p) | datetime2(p) |  |
| TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE | datetimeoffset, con l'offset di ogni valore |  |
| 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 per XMLTYPE |  |
| collations that ignore case (BINARY_CI) | la stessa collation su ogni colonna |  |
| identity columns, and a sequence a BEFORE INSERT trigger assigns | IDENTITY, che riparte dopo l'id più alto |  |
| identity columns the target can't count | un intero semplice | `counter_dropped` |
| CREATE SEQUENCE | CREATE SEQUENCE con le stesse opzioni |  |
| virtual columns (GENERATED ALWAYS AS ... VIRTUAL) | colonne calcolate |  |
| virtual columns with functions IntoSQL doesn't write, and the || operator | una colonna semplice | `generated_not_translated` |
| defaults with functions IntoSQL doesn't write (SYS_GUID(), ||) | nessun valore predefinito | `default_not_translated` |
| CHECK constraints | tradotti |  |
| CHECK constraints with functions IntoSQL doesn't write | non creato | `check_skipped` |
| CHECK constraints that are DISABLE or ENABLE NOVALIDATE | non creato | `check_not_enforced` |
| function-based, bitmap and domain indexes | non creato | `index_skipped` |
| foreign keys | dopo i dati WITH NOCHECK, poi controllata con un avviso sulle righe orfane |  |
| 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 | non creato | `foreign_key_skipped` |
| partitioned tables | una tabella con le righe di ogni partizione | `partitions_dropped` |
| NOT NULL columns with values that become NULL | NOT NULL rimosso | `not_null_relaxed` |
| views, synonyms, types, packages, procedures, functions and other triggers | elencati nel report | `not_converted_objects` |
| exports without CREATE TABLE (data only) | tipi ricavati dai valori | `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 | mantenuto |  |
| text that isn't valid in its encoding | i byte errati come carattere di sostituzione | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | copiato così com'è | `mojibake_suspected` |

## Carica lo script in SQL Server

Lo script crea le tabelle, copia le righe, poi aggiunge chiavi, indici e chiavi esterne, così si carica in fretta e si ferma al primo errore.

```shell
sqlcmd -b -f 65001 -S localhost -d mydb -i oracle.sql_server.sql
```

Le chiavi esterne vengono aggiunte WITH NOCHECK e poi controllate. Se una riga punta a una riga che non esiste, lo script dice quale vincolo e lo lascia non controllato, invece di fallire a metà.

Per un dump grande, esegui sqlcmd sulla stessa macchina del server. Ogni lotto di massimo 1000 righe fa il commit da solo, così il log delle transazioni resta piccolo.

## Fai il dump di Oracle per il miglior risultato

Il convertitore legge ciò che il dump contiene. Con queste opzioni il dump conserva più dei tuoi dati:

- In SQL Developer, scegli Tools, Database Export, con DDL e il formato dati Insert. SQLcl scrive lo stesso con SET SQLFORMAT INSERT.
- Esegui ALTER SESSION SET NLS_DATE_FORMAT = 'SYYYY-MM-DD HH24:MI:SS' prima di esportare: il formato di default scrive le date senza ora né secolo.
- Un file .dmp di exp o expdp è binario: importalo in un database Oracle, per esempio Oracle Database Free in Docker, ed esportalo con SQL Developer.

## Cosa non viene convertito

Viste, package, procedure, funzioni, trigger, tipi e sinonimi sono scritti in PL/SQL. Sono elencati per nome nel report, mai rimossi in silenzio, così puoi riscriverli per SQL Server.

## Domande sulla conversione da Oracle a SQL Server

### Il mio dump viene caricato?

No. Il convertitore funziona nel tuo browser e legge il dump dal tuo disco a pezzi, quindi non lascia mai il tuo computer. Anche l'app desktop e la riga di comando convertono sul tuo computer.

### Quanto può essere grande il dump?

Il convertitore non tiene mai l'intero dump in memoria: legge il file due volte, per intervalli, e scrive lo script man mano. I dump di più gigabyte si convertono nel browser, nell'app desktop e con la riga di comando.

### Posso convertire un file .dmp di exp o expdp?

Non direttamente: Data Pump e l'Export originale scrivono un formato binario che legge solo Oracle. Importalo in un qualsiasi database Oracle, Oracle Database Free gira in Docker, ed esportalo con Database Export di SQL Developer o con SQLcl. Il convertitore lo segnala quando riceve un file .dmp.

### Da quali versioni di Oracle può provenire l'export?

Export di SQL Developer e SQLcl, con le definizioni di tabella di DBMS_METADATA, da Oracle 11g in poi. Ogni export di test viene da Oracle 21c e 23ai, in sessioni americane, tedesche e ISO, ed è confrontato con la sorgente cella per cella.

### Cosa succede a NUMBER, DATE e agli altri tipi di Oracle?

NUMBER diventa decimal, o bigint per i numeri interi; DATE diventa datetime2(0), mantenendo l'ora; il testo nvarchar, confrontato in modo esatto come in Oracle; CLOB nvarchar(max), BLOB varbinary(max). NaN e Infinity diventano NULL e il report li conta.

### Le colonne identity e le sequenze vengono mantenute?

Sì. Le colonne identity diventano colonne IDENTITY e ripartono dopo l'id più alto; le sequenze diventano sequenze di SQL Server, e i valori di default che ne usano una continuano a usarla.

### E package, procedure e trigger PL/SQL?

Sono elencati per nome nel report e non vengono convertiti, perché ogni database li scrive nel proprio linguaggio.

### Su quali versioni di SQL Server si carica lo script?

SQL Server dalla 2017 alla 2025. Lo stesso script si carica su ognuna, fermandosi al primo errore se qualcosa va storto.

## Da Oracle

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

## Verso SQL Server

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

## Guida e tutte le coppie

- [Da SQL Server a Oracle](https://intosql.com/it/sql-server-in-oracle)
- [Guida alla migrazione da Oracle a SQL Server](https://intosql.com/docs/migrations/oracle-to-sql-server)
- [Tipi di dati da Oracle a SQL Server](https://intosql.com/docs/types/oracle-to-sql-server)
- [Tutte le coppie di database](https://intosql.com/it/migrazione-database)
