---
title: "SQL Server zu Oracle migrieren, im Browser"
description: "Migriere eine SQL Server-Datenbank zu Oracle: Das SSMS-Skript wird eines mit denselben Tabellen, Schlüsseln und Daten, plus Bericht über jede Änderung."
canonical: https://intosql.com/de/sql-server-in-oracle
last_updated: 2026-10-15
---

# SQL Server zu Oracle migrieren, im Browser

Leg das Skript ab, das Generate Scripts in SSMS mit Schema und Daten schreibt, als .sql oder .sql.gz, UTF-16 oder UTF-8, und lade ein Oracle-Skript mit denselben Tabellen, Schlüsseln, Indizes und Daten herunter. Jeder Wert, den Oracle nicht unverändert aufnehmen kann, und jedes Objekt, das es nicht übernimmt, steht im Bericht.

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

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

## Was sich von SQL Server 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 SQL Server | In Oracle | Berichtszeile |
| --- | --- | --- |
| bit | NUMBER(1) mit einem CHECK auf 0 und 1 |  |
| char(n), varchar(n), nchar(n), nvarchar(n) | VARCHAR2(n CHAR), in Zeichen gezählt |  |
| varchar(max), nvarchar(max), text, ntext | VARCHAR2(4000 CHAR), wenn jeder Wert in 4000 Bytes passt, sonst CLOB | `text_as_lob` |
| empty strings and empty binary values | NULL | `empty_string_null` |
| decimal(p,s), money, smallmoney | NUMBER(p,s); money als NUMBER(19,4) |  |
| datetime, datetime2, smalldatetime | TIMESTAMP(p) |  |
| datetimeoffset | TIMESTAMP WITH TIME ZONE, mit dem Versatz jedes Werts |  |
| time | INTERVAL DAY TO SECOND ab Mitternacht |  |
| dates that aren't valid | NULL | `date_out_of_range` |
| json (SQL Server 2025) | CLOB |  |
| uniqueidentifier | VARCHAR2(36) |  |
| binary, varbinary, image | RAW(n) und BLOB |  |
| geometry, geography | BLOB mit den eigenen Bytes von SQL Server | `spatial_as_native` |
| rowversion, timestamp | BLOB, leer | `rowversion_empty` |
| xml, sql_variant, hierarchyid, vector | VARCHAR2 oder CLOB mit dem Text jedes Werts | `type_replaced` |
| collations that ignore case (_CI_) | exakter Vergleich | `case_insensitive_collation` |
| IDENTITY | GENERATED BY DEFAULT ON NULL AS IDENTITY, weiter nach der höchsten ID |  |
| CREATE SEQUENCE | CREATE SEQUENCE mit denselben Optionen |  |
| computed columns | virtuelle Spalten | `stored_as_virtual` |
| computed columns with functions Oracle lacks | eine normale Spalte | `generated_not_translated` |
| defaults with functions Oracle lacks, and NEXT VALUE FOR | kein Standardwert | `default_not_translated` |
| CHECK constraints | übersetzt |  |
| CHECK constraints with functions Oracle lacks | nicht angelegt | `check_skipped` |
| CHECK constraints added WITH NOCHECK or disabled | nicht angelegt | `check_not_enforced` |
| filtered and columnstore indexes, and indexes on CLOB columns | nicht angelegt | `index_skipped` |
| foreign keys | nach den Daten, ENABLE NOVALIDATE, dann validiert, mit einer Warnung bei verwaisten Zeilen |  |
| ON UPDATE CASCADE, SET NULL or SET DEFAULT; ON DELETE SET DEFAULT | entfernt | `foreign_key_action_unsupported` |
| names over 128 bytes | gekürzt | `name_shortened` |
| foreign keys to tables the dump doesn't create | nicht angelegt | `foreign_key_skipped` |
| tables on a partition scheme | eine Tabelle mit den Zeilen aller Partitionen | `partitions_dropped` |
| temporal tables (SYSTEM_VERSIONING) | zwei Tabellen: die aktuellen Zeilen und die Historie | `system_versioning_dropped` |
| schemas | 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, functions, procedures, triggers, synonyms, types and partition functions | im Bericht aufgeführt | `not_converted_objects` |
| scripts without CREATE TABLE (data only) | Typen aus den Werten gelesen | `no_schema` |
| expressions in INSERT values | NULL | `expression_value` |
| types IntoSQL doesn't know | CLOB | `unknown_type` |
| NUL characters in text | erhalten |  |
| 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 @sql_server.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 SQL Server-Dump für das beste Ergebnis erstellen

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

- Klicke in SSMS mit der rechten Maustaste auf die Datenbank, dann auf Tasks, Generate Scripts, und wähle die Tabellen. dbatools, mssql-scripter und andere Werkzeuge auf Basis derselben Bibliothek schreiben dasselbe Skript.
- Setze unter Advanced die Option Types of data to script auf Schema and data. Ein Skript nur mit dem Schema hat Tabellen ohne Zeilen.
- Speichere es als Unicode, den Standard von SSMS, oder als UTF-8: Beides wird gleich gelesen, und gzip funktioniert auch.

## Was nicht konvertiert wird

Sichten, Funktionen, Prozeduren, Trigger, Synonyme, Regeln und Sicherheitsrichtlinien sind in T-SQL geschrieben. Sie stehen mit Namen im Bericht und werden nie stillschweigend weggelassen, damit du sie für Oracle neu schreiben kannst.

## Fragen zu SQL Server 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.

### Liest es die UTF-16-Datei, die SSMS speichert?

Ja. SSMS speichert Skripte standardmäßig als UTF-16, und der Konverter liest UTF-16 und UTF-8 gleichermaßen, gezippt oder nicht, mit GO zwischen den Batches.

### Aus welchen SQL Server-Versionen kann das Skript stammen?

Skripte, die SSMS, dbatools oder mssql-scripter ab SQL Server 2017 schreiben. Jedes Test-Skript stammt aus SQL Server 2017, 2022 und 2025 und wird Zelle für Zelle mit seiner Quelle verglichen.

### Bleiben IDENTITY-Werte erhalten?

Ja. IDENTITY-Spalten werden Identity-Spalten, jede Zeile behält ihre ID, und die nächste ID macht nach der höchsten weiter. Sequenzen werden mit denselben Optionen angelegt.

### Was passiert mit money, datetimeoffset und anderen SQL Server-Typen?

bit wird NUMBER(1), datetime2 TIMESTAMP mit jeder Stelle, datetimeoffset TIMESTAMP WITH TIME ZONE mit seinem Versatz und nvarchar(max) CLOB, wenn seine Werte nicht in ein VARCHAR2 passen. Leere Strings werden NULL, wie Oracle sie speichert, und der Bericht zählt sie.

### Was ist mit Prozeduren, Triggern und Sichten?

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. Jedes Test-Skript lädt auf 21c und 23ai und hält beim ersten Fehler an, falls etwas schiefgeht.

## Aus SQL Server

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

## Leitfaden und alle Paare

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