---
title: "Oracle zu SQLite migrieren, im Browser"
description: "Migriere eine Oracle-Datenbank zu SQLite: Ein Export aus SQL Developer oder SQLcl wird ein Skript mit denselben Tabellen, Schlüsseln und Daten, plus Bericht."
canonical: https://intosql.com/de/oracle-in-sqlite
last_updated: 2026-10-15
---

# Oracle zu SQLite migrieren, im Browser

Leg die .sql-Datei ab, die Database Export in SQL Developer oder SQLcl schreibt, mit ihren Tabellen und Insert-Anweisungen, und lade ein SQLite-Skript mit denselben Tabellen, Schlüsseln, Indizes und Daten herunter. Jeder Wert, den SQLite nicht unverändert aufnehmen kann, und jedes Objekt, das es nicht übernimmt, steht im Bericht.

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

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

## Was sich von Oracle zu SQLite ä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 Oracle | In SQLite | Berichtszeile |
| --- | --- | --- |
| BOOLEAN (23ai) | INTEGER 0 oder 1 mit einem CHECK |  |
| VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONG | TEXT |  |
| NUMBER, NUMBER(p,s), FLOAT(b) | INTEGER oder NUMERIC, über 15 Stellen exakt als Text | `decimal_as_text` |
| INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND | TEXT mit dem Text von Oracle, etwa +01-06 | `type_replaced` |
| DATE, TIMESTAMP(p) | DATETIME als ISO-8601-Text, jede Stelle erhalten |  |
| TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE | TIMESTAMP als ISO-8601-Text in UTC | `moments_as_utc` |
| JSON (21c), and CLOB holding JSON | TEXT |  |
| BLOB, RAW(n), LONG RAW | BLOB |  |
| ROWID, UROWID, XMLTYPE, SDO_GEOMETRY | TEXT | `type_replaced` |
| collations that ignore case (BINARY_CI) | exakter Vergleich | `case_insensitive_collation` |
| identity columns, and a sequence a BEFORE INSERT trigger assigns | INTEGER PRIMARY KEY AUTOINCREMENT, weiter nach der höchsten ID |  |
| identity columns the target can't count | INTEGER ohne Zähler | `counter_dropped` |
| CREATE SEQUENCE | nicht angelegt | `sequence_not_converted` |
| virtual columns (GENERATED ALWAYS AS ... VIRTUAL) | GENERATED ALWAYS AS, STORED bei PERSISTED, sonst 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 | in CREATE TABLE, ungeprüft geladen, dann mit PRAGMA foreign_key_check aufgelistet |  |
| foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE ones | nicht angelegt | `foreign_key_skipped` |
| partitioned tables | eine Tabelle mit den Zeilen aller Partitionen | `partitions_dropped` |
| several schemas in one export | eine Datei, 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 | TEXT | `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 | Infinity als 9e999; NaN als NULL |  |
| 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 SQLite 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
sqlite3 -bail mydb.sqlite < oracle.sqlite.sql
```

Fremdschlüssel werden in jeder Tabelle deklariert, und die Zeilen laden mit ausgeschalteter Fremdschlüsselprüfung. Danach listet das Skript jede Zeile auf, die auf eine nicht vorhandene Zeile verweist, statt auf halbem Weg abzubrechen.

Lade einen großen Dump in eine neue Datei auf einer lokalen Festplatte. Das Skript lädt alles in einer Transaktion ohne Synchronisierung, so läuft es mit Festplattengeschwindigkeit, und ein abgebrochenes Laden hinterlässt keine halben Tabellen.

Die Kommandozeile lädt die Datei direkt in eine SQLite-Datenbank, ohne ein Skript zu schreiben. Das ist kostenlos.

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

Sichten, Pakete, Prozeduren, Funktionen, Trigger, Typen und Synonyme sind in PL/SQL geschrieben. Sie stehen mit Namen im Bericht und werden nie stillschweigend weggelassen, damit du sie für SQLite neu schreiben kannst.

## Fragen zu Oracle zu SQLite

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

NUMBER wird bei ganzen Zahlen INTEGER und behält sonst jede Stelle; DATE wird DATETIME-Text mit Uhrzeit; CLOB wird TEXT, BLOB und RAW BLOB. Infinity bleibt erhalten; NaN wird NULL.

### Bleiben Identity-Spalten und Sequenzen erhalten?

Eine Identity-Spalte, die den ganzen Primärschlüssel der Tabelle bildet, wird INTEGER PRIMARY KEY AUTOINCREMENT und macht nach der höchsten ID weiter. SQLite hat keine Sequenzen, daher stehen sie im Bericht.

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

Sie stehen mit Namen im Bericht und werden nicht konvertiert, weil jede Datenbank sie in ihrer eigenen Sprache schreibt.

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

SQLite 3.31 und neuer. Jeder Test-Export lädt auf 3.31 und 3.54 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 SQL Server](https://intosql.com/de/oracle-in-sql-server)
- [Oracle zu Oracle](https://intosql.com/de/oracle-in-oracle)

## Nach SQLite

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

## Leitfaden und alle Paare

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