---
title: "SQLite zu Oracle migrieren, im Browser"
description: "Migriere eine SQLite-Datenbank zu Oracle: Die .db-Datei oder ihr Dump wird ein Skript mit denselben Tabellen, Schlüsseln und Daten, plus Bericht."
canonical: https://intosql.com/de/sqlite-in-oracle
last_updated: 2026-10-15
---

# SQLite zu Oracle migrieren, im Browser

Leg eine SQLite-Datenbankdatei (.db, .sqlite, .sqlite3) oder das SQL ab, das .dump von sqlite3 schreibt, und lade ein Oracle-Skript mit denselben Tabellen, Schlüsseln, Indizes und Daten herunter. Jede Spalte bekommt den Typ, in den ihre Werte passen, und jeder Wert, den Oracle nicht unverändert aufnehmen kann, steht im Bericht.

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

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

## Was sich von SQLite zu Oracle ä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 SQLite | In Oracle | Berichtszeile |
| --- | --- | --- |
| declared types (any text: VARCHAR(255), DATETIME, BOOLEAN, JSON or none) | der Typ, in den jeder Wert der Spalte passt |  |
| BOOLEAN, BOOL | NUMBER(1) mit einem CHECK auf 0 und 1 |  |
| TEXT, VARCHAR(n), CHAR(n), CLOB | VARCHAR2(n CHAR), wenn jeder Wert passt, sonst CLOB |  |
| TEXT and VARCHAR(n) longer than 4000 bytes | VARCHAR2(4000 CHAR), wenn jeder Wert in 4000 Bytes passt (750 Zeichen in einem Schlüssel), sonst CLOB | `text_as_lob` |
| DECIMAL(p,s), NUMERIC | der exakte Typ, wenn jeder Wert hineinpasst, sonst ein double |  |
| BLOB, and columns holding bytes | BLOB |  |
| DATE, DATETIME, TIMESTAMP holding ISO 8601 text | DATE oder TIMESTAMP(p), je nachdem, was die Werte enthalten |  |
| JSON holding JSON text | CLOB |  |
| Infinity in REAL columns | als BINARY_DOUBLE_INFINITY beibehalten |  |
| INTEGER PRIMARY KEY, AUTOINCREMENT | GENERATED BY DEFAULT ON NULL AS IDENTITY, weiter nach der höchsten ID oder dem Wert aus sqlite_sequence |  |
| COLLATE NOCASE | exakter Vergleich | `case_insensitive_collation` |
| generated columns | virtuelle Spalten | `stored_as_virtual` |
| generated columns with functions IntoSQL doesn't write, and the || operator | eine normale Spalte | `generated_not_translated` |
| defaults with functions IntoSQL doesn't write (strftime, randomblob) | kein Standardwert | `default_not_translated` |
| CHECK constraints | übersetzt |  |
| CHECK constraints with functions IntoSQL doesn't write | nicht angelegt | `check_skipped` |
| partial and expression indexes | nicht angelegt | `index_skipped` |
| foreign keys (unenforced unless PRAGMA foreign_keys=ON) | nach den Daten, ENABLE NOVALIDATE, dann validiert |  |
| ON UPDATE CASCADE, SET NULL or SET DEFAULT; ON DELETE SET DEFAULT | entfernt | `foreign_key_action_unsupported` |
| empty strings and empty blobs | NULL | `empty_string_null` |
| foreign keys to tables the dump doesn't create | nicht angelegt | `foreign_key_skipped` |
| primary keys holding NULL, and NOT NULL columns with values that become NULL | NOT NULL entfernt | `not_null_relaxed` |
| views, triggers and virtual tables (FTS, R*Tree) | im Bericht aufgeführt | `not_converted_objects` |
| dumps without CREATE TABLE (--data-only) | Typen aus den Werten gelesen | `no_schema` |
| expressions in INSERT values other than the text functions dumps write | NULL | `expression_value` |
| NUL characters in text | beibehalten |  |
| text that isn't valid UTF-8 | 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 @sqlite.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 SQLite-Dump für das beste Ergebnis erstellen

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

- Die Datenbankdatei selbst wird unverändert konvertiert und Seite für Seite in deinem Browser gelesen. Schließe zuerst die App, die in sie schreibt, damit keine Änderung in ihrer -wal-Datei zurückbleibt.
- sqlite3 app.db .dump > app.sql schreibt dieselbe Datenbank als SQL, das sich ebenfalls konvertieren lässt, als .sql oder .sql.gz.
- DB Browser for SQLite schreibt dieses SQL mit File, Export, Database to SQL file, und iterdump() in Python ebenso.

## Was nicht konvertiert wird

Sichten und Trigger sind in der eigenen Sprache von SQLite geschrieben. Sie stehen mit Namen im Bericht und werden nie stillschweigend weggelassen, damit du sie für Oracle neu schreiben kannst. Virtuelle Tabellen wie FTS5 und R*Tree werden ebenfalls aufgeführt, und ihre Schattentabellen werden weggelassen.

## Fragen zu SQLite zu Oracle

### 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 die .db-Datei selbst konvertieren?

Ja. Leg die .db-, .sqlite- oder .sqlite3-Datei ab: Sie wird in deinem Browser gelesen und nie hochgeladen. Text mit NUL-Zeichen und jede Ziffer eines double kommen so an, wie sie gespeichert sind, was ein .dump abschneiden kann.

### Aus welchen SQLite-Versionen kann der Dump stammen?

Datenbankdateien ab SQLite 3.0, in UTF-8 oder UTF-16, und Dumps aus .dump der sqlite3-Shell oder aus iterdump() in Python. Jede Testdatei und jeder Test-Dump stammt aus sqlite3 3.31 bis 3.54, einschließlich STRICT- und WITHOUT ROWID-Tabellen, und wird Zelle für Zelle mit seiner Quelle verglichen.

### Wie werden Spaltentypen bestimmt, wenn SQLite sie nicht erzwingt?

Der deklarierte Typ ist ein Hinweis, und die Werte entscheiden: Eine Spalte wird NUMBER, BINARY_DOUBLE, DATE, TIMESTAMP, BLOB, VARCHAR2 oder CLOB, wenn jeder Wert hineinpasst. Leere Strings werden NULL, wie Oracle sie speichert, und der Bericht zählt sie.

### Bleiben INTEGER PRIMARY KEY und AUTOINCREMENT erhalten?

Ja. Ein INTEGER PRIMARY KEY wird eine Identity-Spalte, jede Zeile behält ihre ID, und die nächste ID macht nach der höchsten weiter oder, mit AUTOINCREMENT, nach dem Wert aus sqlite_sequence.

### Was ist mit Sichten und Triggern?

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

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

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

## Aus SQLite

- [SQLite zu PostgreSQL](https://intosql.com/de/sqlite-in-postgresql)
- [SQLite zu MySQL](https://intosql.com/de/sqlite-in-mysql)
- [SQLite zu MariaDB](https://intosql.com/de/sqlite-in-mariadb)
- [SQLite zu SQLite](https://intosql.com/de/sqlite-in-sqlite)
- [SQLite zu SQL Server](https://intosql.com/de/sqlite-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)
- [Oracle zu Oracle](https://intosql.com/de/oracle-in-oracle)

## Leitfaden und alle Paare

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