---
title: "Oracle-Export auf eine andere Version bringen"
description: "Konvertiere einen Export aus SQL Developer oder SQLcl von Oracle ab 11g in ein Skript, das auf Oracle ab 19c lädt, mit denselben Tabellen, Schlüsseln und Daten."
canonical: https://intosql.com/de/oracle-in-oracle
last_updated: 2026-10-15
---

# Oracle-Export auf eine andere Version bringen

Zieh die .sql-Datei, die Database Export in SQL Developer oder SQLcl schreibt, mit ihren Tabellen und Insert-Anweisungen hierher und lade ein Skript herunter, das auf Oracle ab 19c lädt. NUMBER, DATE, TIMESTAMP, LOBs, Identities und Sequenzen bleiben, wie sie sind, XMLTYPE und JSON behalten ihren Text in einem CLOB, und jede Änderung steht im Bericht.

[Leitfaden: Oracle zu Oracle migrieren](https://intosql.com/docs/migrations/oracle-to-oracle)

[Datentypen von Oracle zu Oracle](https://intosql.com/docs/types/oracle-to-oracle)

## Was sich zwischen Datei und Skript ändert

Jede Zeile ist eine Regel, die der Konverter anwendet, mit der Berichtszeile, die er schreibt, wenn die Regel etwas an deinen Daten ändert.

| In der Datei | Im Skript | Berichtszeile |
| --- | --- | --- |
| BOOLEAN (23ai) | BOOLEAN auf 23ai, sonst NUMBER(1) mit einem CHECK auf 0 und 1 |  |
| VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONG | dieselben Typen, mit ihren Längen in BYTE oder CHAR |  |
| VARCHAR2 and NVARCHAR2 past what the target's own types hold | VARCHAR2(4000 CHAR), wenn jeder Wert in 4000 Bytes passt, sonst CLOB | `text_as_lob` |
| NUMBER, NUMBER(p,s), FLOAT(b) | dieselben NUMBER-Typen |  |
| INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND | dieselben INTERVAL-Typen |  |
| DATE, TIMESTAMP(p) | DATE und TIMESTAMP(p), wie deklariert |  |
| TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE | dieselben Typen |  |
| JSON (21c), and CLOB holding JSON | JSON ab 21c, sonst CLOB |  |
| BLOB, RAW(n), LONG RAW | dieselben Typen; LONG RAW als BLOB |  |
| ROWID, UROWID, XMLTYPE, SDO_GEOMETRY | CLOB mit ihrem Text | `type_replaced` |
| collations that ignore case (BINARY_CI) | exakter Vergleich | `case_insensitive_collation` |
| identity columns, and a sequence a BEFORE INSERT trigger assigns | GENERATED BY DEFAULT ON NULL AS IDENTITY, weiter nach der höchsten ID |  |
| identity columns the target can't count | eine normale Ganzzahl | `counter_dropped` |
| CREATE SEQUENCE | CREATE SEQUENCE mit denselben Optionen |  |
| virtual columns (GENERATED ALWAYS AS ... VIRTUAL) | virtuelle Spalten | `stored_as_virtual` |
| virtual columns with functions IntoSQL doesn't write, and the || operator | eine normale Spalte | `generated_not_translated` |
| defaults with functions IntoSQL doesn't write (SYS_GUID(), ||) | kein Standardwert | `default_not_translated` |
| CHECK constraints | übersetzt |  |
| CHECK constraints with functions IntoSQL doesn't write | nicht angelegt | `check_skipped` |
| CHECK constraints that are DISABLE or ENABLE NOVALIDATE | nicht angelegt | `check_not_enforced` |
| function-based, bitmap and domain indexes | nicht angelegt | `index_skipped` |
| foreign keys | nach den Daten, ENABLE NOVALIDATE, dann validiert, mit einer Warnung bei verwaisten Zeilen |  |
| ON DELETE CASCADE that cascades in a cycle or along a second path | entfernt | `foreign_key_action_unsupported` |
| foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE ones | nicht angelegt | `foreign_key_skipped` |
| names longer than Oracle 12.1 allows | gekürzt | `name_shortened` |
| partitioned tables | eine Tabelle mit den Zeilen aller Partitionen | `partitions_dropped` |
| several schemas in one export | ein Schema, jede Tabelle mit dem Namen ihres Schemas vorangestellt | `schemas_merged` |
| NOT NULL columns with values that become NULL | NOT NULL entfernt | `not_null_relaxed` |
| views, synonyms, types, packages, procedures, functions and other triggers | im Bericht aufgeführt | `not_converted_objects` |
| exports without CREATE TABLE (data only) | Typen aus den Werten gelesen | `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 und Infinity bleiben erhalten |  |
| NUL characters in text | beibehalten |  |
| text that isn't valid in its encoding | die fehlerhaften Bytes als Ersatzzeichen | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | unverändert kopiert | `mojibake_suspected` |

## Das Skript in Oracle laden

Das Skript legt die Tabellen an, kopiert die Zeilen und fügt dann Schlüssel, Indizes und Fremdschlüssel hinzu, so lädt es schnell und hält beim ersten Fehler an.

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

Fremdschlüssel werden mit ENABLE NOVALIDATE hinzugefügt, sodass neue Zeilen sofort geprüft werden, und dann validiert. Verweist eine alte Zeile auf eine nicht vorhandene Zeile, nennt das Skript den Fremdschlüssel und lässt ihn unvalidiert, statt auf halbem Weg abzubrechen.

Führe bei einem großen Dump SQL*Plus auf dem Rechner der Datenbank aus. Das Skript schreibt alle 100 Zeilen fest. Der ausführende Benutzer braucht CREATE TABLE, CREATE SEQUENCE, CREATE TRIGGER und CREATE PROCEDURE sowie Quota auf seinem Tablespace.

## Den Oracle-Dump für das beste Ergebnis erstellen

Der Konverter liest, was der Dump enthält. Mit diesen Optionen bleibt mehr von deinen Daten darin:

- Wähle in SQL Developer Tools, Database Export, mit DDL und dem Datenformat Insert. SQLcl schreibt dasselbe mit SET SQLFORMAT INSERT.
- Führe vor dem Export ALTER SESSION SET NLS_DATE_FORMAT = 'SYYYY-MM-DD HH24:MI:SS' aus: Das Standardformat schreibt Datumswerte ohne Uhrzeit und Jahrhundert.
- Eine .dmp-Datei aus exp oder expdp ist binär: Importiere sie in eine Oracle-Datenbank, zum Beispiel Oracle Database Free in Docker, und exportiere sie mit SQL Developer.

## Was nicht konvertiert wird

Views, Trigger, Prozeduren, Funktionen und andere Objekte in der eigenen Sprache von Oracle stehen mit Namen im Bericht und werden nie stillschweigend entfernt, damit du jedes vor dem Neuanlegen mit der Oracle-Version abgleichen kannst, in die du lädst.

## Fragen zum Wechsel von Oracle zwischen Versionen

### Wird mein Dump hochgeladen?

Nein. Der Konverter läuft in deinem Browser und liest den Dump stückweise von deiner Festplatte, daher verlässt er nie deinen Computer. Die Desktop-App und die Kommandozeile konvertieren ebenfalls auf deinem Computer.

### Wie groß darf der Dump sein?

Der Konverter hält nie den ganzen Dump im Speicher: Er liest die Datei zweimal, in Abschnitten, und schreibt das Skript fortlaufend. Dumps von mehreren Gigabyte werden im Browser, in der Desktop-App und mit der Kommandozeile konvertiert.

### Kann ich eine .dmp-Datei aus exp oder expdp konvertieren?

Nicht direkt: Data Pump und das ursprüngliche Export-Werkzeug schreiben ein binäres Format, das nur Oracle liest. Importiere die Datei in eine beliebige Oracle-Datenbank (Oracle Database Free läuft in Docker) und exportiere sie mit Database Export in SQL Developer oder mit SQLcl. Der Konverter weist darauf hin, wenn er eine .dmp-Datei bekommt.

### Aus welchen Oracle-Versionen kann der Export stammen?

Exporte aus SQL Developer und SQLcl, mit den Tabellendefinitionen von DBMS_METADATA, ab Oracle 11g. Jeder Test-Export stammt aus Oracle 21c und 23ai, in amerikanischen, deutschen und ISO-Sitzungen, und wird Zelle für Zelle mit seiner Quelle verglichen.

### Was passiert mit NUMBER, DATE und den anderen Oracle-Typen?

Sie bleiben, wie sie sind: NUMBER mit seiner Genauigkeit, DATE, TIMESTAMP, Intervalle, CHAR und VARCHAR2 mit ihren Längen, RAW und die LOBs. XMLTYPE und JSON behalten ihren Text in einem CLOB, damit das Skript auf 19c lädt.

### Bleiben Identity-Spalten und Sequenzen erhalten?

Ja. Identity-Spalten und Sequenzen bleiben, wie sie sind, und machen dort weiter, wo sie laut Export angekommen waren.

### Was ist mit PL/SQL-Paketen, Prozeduren und Triggern?

Sie stehen mit Namen im Bericht und werden nicht konvertiert, damit du sie neu anlegen kannst, sobald die Tabellen da sind.

### Auf welchen Oracle-Versionen lädt das Skript?

Oracle 19c und neuer. Jeder Test-Export lädt auf 21c und 23ai und hält beim ersten Fehler an, falls etwas schiefgeht.

## Aus Oracle

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

## Nach Oracle

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

## Leitfaden und alle Paare

- [Leitfaden: Oracle zu Oracle migrieren](https://intosql.com/docs/migrations/oracle-to-oracle)
- [Datentypen von Oracle zu Oracle](https://intosql.com/docs/types/oracle-to-oracle)
- [Alle Datenbankpaare](https://intosql.com/de/datenbankmigration)
