---
title: "Portare un export Oracle a un'altra versione"
description: "Converti un export di SQL Developer o SQLcl da Oracle 11g o successivo in uno script che si carica su Oracle 19c e successivi, con le stesse tabelle e dati."
canonical: https://intosql.com/it/oracle-in-oracle
last_updated: 2026-10-15
---

# Portare un export Oracle a un'altra versione

Trascina il file .sql che scrive Database Export di SQL Developer o SQLcl, con le tabelle e le istruzioni Insert, e scarica uno script che si carica su Oracle 19c e successivi. NUMBER, DATE, TIMESTAMP, LOB, identity e sequenze restano come sono, XMLTYPE e JSON conservano il testo in un CLOB, e ogni modifica è elencata nel report.

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

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

## Cosa cambia tra il file e lo script

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

| Nel file | Nello script | Riga del report |
| --- | --- | --- |
| BOOLEAN (23ai) | BOOLEAN su 23ai, altrimenti NUMBER(1) con un CHECK di 0 e 1 |  |
| VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONG | gli stessi tipi, con le loro lunghezze BYTE o CHAR |  |
| VARCHAR2 and NVARCHAR2 past what the target's own types hold | VARCHAR2(4000 CHAR) quando ogni valore sta in 4000 byte, altrimenti CLOB | `text_as_lob` |
| NUMBER, NUMBER(p,s), FLOAT(b) | gli stessi tipi NUMBER |  |
| INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND | gli stessi tipi INTERVAL |  |
| DATE, TIMESTAMP(p) | DATE e TIMESTAMP(p), come dichiarati |  |
| TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE | gli stessi tipi |  |
| JSON (21c), and CLOB holding JSON | JSON su 21c e successive, altrimenti CLOB |  |
| BLOB, RAW(n), LONG RAW | gli stessi tipi; LONG RAW come BLOB |  |
| ROWID, UROWID, XMLTYPE, SDO_GEOMETRY | CLOB con il loro testo | `type_replaced` |
| collations that ignore case (BINARY_CI) | confronto esatto | `case_insensitive_collation` |
| identity columns, and a sequence a BEFORE INSERT trigger assigns | GENERATED BY DEFAULT ON NULL AS 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 virtuali | `stored_as_virtual` |
| 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 ENABLE NOVALIDATE, poi validata con un avviso sulle righe orfane |  |
| ON DELETE CASCADE that cascades in a cycle or along a second path | rimosso | `foreign_key_action_unsupported` |
| foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE ones | non creato | `foreign_key_skipped` |
| names longer than Oracle 12.1 allows | accorciato | `name_shortened` |
| partitioned tables | una tabella con le righe di ogni partizione | `partitions_dropped` |
| several schemas in one export | uno schema, tabelle con il nome del loro schema davanti | `schemas_merged` |
| 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 | CLOB | `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 | NaN e Infinity mantenuti |  |
| 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 Oracle

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
NLS_LANG=.AL32UTF8 sqlplus -S -L user@//localhost/mydb @oracle.oracle.sql
```

Le chiavi esterne vengono aggiunte ENABLE NOVALIDATE, così le nuove righe sono controllate subito, e poi validate. Se una riga vecchia punta a una riga che non esiste, lo script dice quale vincolo e lo lascia non validato, invece di fallire a metà.

Per un dump grande, esegui SQL*Plus sulla stessa macchina del database. Lo script fa il commit ogni 100 righe. L'utente che lo esegue ha bisogno di CREATE TABLE, CREATE SEQUENCE, CREATE TRIGGER e CREATE PROCEDURE, e di una quota sul suo tablespace.

## 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, trigger, procedure, funzioni e altri oggetti scritti nel linguaggio di Oracle sono elencati per nome nel report, mai eliminati in silenzio, così puoi verificare ognuno con la versione di Oracle in cui carichi prima di ricrearlo.

## Domande sul passaggio di Oracle tra versioni

### 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?

Restano come sono: NUMBER con la sua precisione, DATE, TIMESTAMP, gli intervalli, CHAR e VARCHAR2 con le loro lunghezze, RAW e i LOB. XMLTYPE e JSON mantengono il loro testo in un CLOB, quindi lo script si carica su 19c.

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

Sì. Le colonne identity e le sequenze restano come sono e ripartono da dove l'export dice che sono arrivate.

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

Sono elencati per nome nel report e non vengono convertiti, così puoi ricrearli una volta caricate le tabelle.

### Su quali versioni di Oracle si carica lo script?

Oracle 19c e successive. Ogni export di test si carica su 21c e 23ai, 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 SQL Server](https://intosql.com/it/oracle-in-sql-server)

## Verso Oracle

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

## Guida e tutte le coppie

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