---
title: "Migrasi SQL Server ke Oracle di browser Anda"
description: "Migrasi database SQL Server ke Oracle: konversi skrip buatan SSMS menjadi skrip dengan tabel, kunci, dan data yang sama, plus laporan setiap perubahan."
canonical: https://intosql.com/id/sql-server-ke-oracle
last_updated: 2026-10-15
---

# Migrasi SQL Server ke Oracle di browser Anda

Letakkan skrip yang ditulis Generate Scripts di SSMS dengan schema dan data, sebagai .sql atau .sql.gz, UTF-16 atau UTF-8, lalu unduh skrip Oracle dengan tabel, kunci, indeks, dan data yang sama. Setiap nilai yang tidak bisa disimpan Oracle apa adanya, dan setiap objek yang tidak didukungnya, dicantumkan di laporan.

[Panduan migrasi SQL Server ke Oracle](https://intosql.com/docs/migrations/sql-server-to-oracle)

[Tipe data SQL Server ke Oracle](https://intosql.com/docs/types/sql-server-to-oracle)

## Yang berubah dari SQL Server ke Oracle

Setiap baris adalah aturan yang diterapkan konverter, beserta baris laporan yang ditulisnya saat aturan itu mengubah sesuatu di data Anda.

| Di SQL Server | Di Oracle | Baris laporan |
| --- | --- | --- |
| bit | NUMBER(1) dengan CHECK 0 dan 1 |  |
| char(n), varchar(n), nchar(n), nvarchar(n) | VARCHAR2(n CHAR), menghitung karakter |  |
| varchar(max), nvarchar(max), text, ntext | VARCHAR2(4000 CHAR) jika setiap nilai muat dalam 4000 byte, selain itu CLOB | `text_as_lob` |
| empty strings and empty binary values | NULL | `empty_string_null` |
| decimal(p,s), money, smallmoney | NUMBER(p,s); money sebagai NUMBER(19,4) |  |
| datetime, datetime2, smalldatetime | TIMESTAMP(p) |  |
| datetimeoffset | TIMESTAMP WITH TIME ZONE, dengan offset setiap nilai |  |
| time | INTERVAL DAY TO SECOND sejak tengah malam |  |
| dates that aren't valid | NULL | `date_out_of_range` |
| json (SQL Server 2025) | CLOB |  |
| uniqueidentifier | VARCHAR2(36) |  |
| binary, varbinary, image | RAW(n) dan BLOB |  |
| geometry, geography | BLOB dengan byte milik SQL Server | `spatial_as_native` |
| rowversion, timestamp | BLOB, kosong | `rowversion_empty` |
| xml, sql_variant, hierarchyid, vector | VARCHAR2 atau CLOB dengan teks setiap nilai | `type_replaced` |
| collations that ignore case (_CI_) | perbandingan persis | `case_insensitive_collation` |
| IDENTITY | GENERATED BY DEFAULT ON NULL AS IDENTITY, berlanjut setelah id tertinggi |  |
| CREATE SEQUENCE | CREATE SEQUENCE dengan opsi yang sama |  |
| computed columns | kolom virtual | `stored_as_virtual` |
| computed columns with functions Oracle lacks | kolom biasa | `generated_not_translated` |
| defaults with functions Oracle lacks, and NEXT VALUE FOR | tanpa default | `default_not_translated` |
| CHECK constraints | diterjemahkan |  |
| CHECK constraints with functions Oracle lacks | tidak dibuat | `check_skipped` |
| CHECK constraints added WITH NOCHECK or disabled | tidak dibuat | `check_not_enforced` |
| filtered and columnstore indexes, and indexes on CLOB columns | tidak dibuat | `index_skipped` |
| foreign keys | setelah data ENABLE NOVALIDATE, lalu divalidasi dengan peringatan untuk baris yatim |  |
| ON UPDATE CASCADE, SET NULL or SET DEFAULT; ON DELETE SET DEFAULT | dihapus | `foreign_key_action_unsupported` |
| names over 128 bytes | dipersingkat | `name_shortened` |
| foreign keys to tables the dump doesn't create | tidak dibuat | `foreign_key_skipped` |
| tables on a partition scheme | satu tabel dengan baris dari setiap partisi | `partitions_dropped` |
| temporal tables (SYSTEM_VERSIONING) | dua tabel: baris saat ini dan riwayatnya | `system_versioning_dropped` |
| schemas | satu skema, nama tabel diawali nama skemanya | `schemas_merged` |
| NOT NULL columns with values that become NULL | NOT NULL dihapus | `not_null_relaxed` |
| views, functions, procedures, triggers, synonyms, types and partition functions | dicantumkan di laporan | `not_converted_objects` |
| scripts without CREATE TABLE (data only) | tipe dibaca dari nilai | `no_schema` |
| expressions in INSERT values | NULL | `expression_value` |
| types IntoSQL doesn't know | CLOB | `unknown_type` |
| NUL characters in text | dipertahankan |  |
| text that isn't valid in its encoding | byte yang rusak menjadi karakter pengganti | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | disalin apa adanya | `mojibake_suspected` |

## Muat skrip ke Oracle

Skrip membuat tabel, menyalin baris, lalu menambahkan kunci, indeks, dan foreign key, jadi pemuatan berjalan cepat dan berhenti di galat pertama.

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

Foreign key ditambahkan ENABLE NOVALIDATE, jadi baris baru langsung diperiksa, lalu divalidasi. Jika baris lama merujuk ke baris yang tidak ada, skrip menyebutkan constraint mana dan membiarkannya tidak tervalidasi, bukan gagal di tengah jalan.

Untuk dump yang besar, jalankan SQL*Plus di mesin yang sama dengan database. Skrip melakukan commit setiap 100 baris. Pengguna yang menjalankannya memerlukan CREATE TABLE, CREATE SEQUENCE, CREATE TRIGGER, dan CREATE PROCEDURE, serta kuota di tablespace-nya.

## Buat dump SQL Server untuk hasil terbaik

Konverter membaca apa yang ada di dump. Opsi berikut membuat lebih banyak data Anda tetap ada di dalamnya:

- Di SSMS, klik kanan database, Tasks, Generate Scripts, lalu pilih tabelnya. dbatools, mssql-scripter, dan alat lain yang dibangun di atas library yang sama menulis skrip yang sama.
- Di Advanced, atur Types of data to script ke Schema and data. Skrip yang hanya berisi schema punya tabel tanpa baris.
- Simpan sebagai Unicode, default SSMS, atau sebagai UTF-8: keduanya dibaca dengan cara yang sama, dan gzip juga bisa.

## Yang tidak dikonversi

View, fungsi, prosedur, trigger, sinonim, rule, dan kebijakan keamanan ditulis dalam T-SQL. Semuanya dicantumkan di laporan berdasarkan nama, tidak pernah dibuang diam-diam, sehingga Anda bisa menulis ulang untuk Oracle.

## Pertanyaan tentang SQL Server ke Oracle

### Apakah dump saya diunggah?

Tidak. Konverter berjalan di browser Anda dan membaca dump dari disk Anda sepotong demi sepotong, jadi dump tidak pernah meninggalkan komputer Anda. Aplikasi desktop dan command line juga mengonversi di komputer Anda.

### Seberapa besar dump yang bisa dipakai?

Konverter tidak pernah menyimpan seluruh dump di memori: file dibaca dua kali, per rentang, dan skrip ditulis sambil berjalan. Dump berukuran beberapa gigabyte bisa dikonversi di browser, di aplikasi desktop, dan dengan command line.

### Apakah file UTF-16 yang disimpan SSMS bisa dibaca?

Ya. SSMS menyimpan skrip sebagai UTF-16 secara default, dan konverter membaca UTF-16 dan UTF-8 sama baiknya, di-gzip atau tidak, dengan GO di antara batch.

### Skrip dari versi SQL Server mana yang bisa dipakai?

Skrip yang ditulis SSMS, dbatools, atau mssql-scripter dari SQL Server 2017 ke atas. Setiap skrip uji berasal dari SQL Server 2017, 2022, dan 2025 dan dibandingkan dengan sumbernya sel demi sel.

### Apakah nilai IDENTITY dipertahankan?

Ya. Kolom IDENTITY menjadi kolom identity, setiap baris mempertahankan id-nya, dan id berikutnya berlanjut setelah id tertinggi. Sequence dibuat dengan opsi yang sama.

### Apa yang terjadi pada money, datetimeoffset, dan tipe SQL Server lainnya?

bit menjadi NUMBER(1), datetime2 menjadi TIMESTAMP dengan setiap digit, datetimeoffset menjadi TIMESTAMP WITH TIME ZONE dengan offset-nya, dan nvarchar(max) menjadi CLOB jika nilainya tidak muat di VARCHAR2. String kosong menjadi NULL, seperti yang disimpan Oracle, dan laporan menghitungnya.

### Bagaimana dengan prosedur, trigger, dan view?

Semuanya dicantumkan di laporan berdasarkan nama dan tidak dikonversi, karena setiap database menulisnya dalam bahasanya sendiri.

### Di versi Oracle mana skrip bisa dimuat?

Oracle 19c dan yang lebih baru. Setiap skrip uji dimuat di 21c dan 23ai, dan berhenti di galat pertama jika ada yang salah.

## Dari SQL Server

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

## Ke Oracle

- [MySQL ke Oracle](https://intosql.com/id/mysql-ke-oracle)
- [MariaDB ke Oracle](https://intosql.com/id/mariadb-ke-oracle)
- [PostgreSQL ke Oracle](https://intosql.com/id/postgresql-ke-oracle)
- [SQLite ke Oracle](https://intosql.com/id/sqlite-ke-oracle)
- [Oracle ke Oracle](https://intosql.com/id/oracle-ke-oracle)

## Panduan dan setiap pasangan

- [Oracle ke SQL Server](https://intosql.com/id/oracle-ke-sql-server)
- [Panduan migrasi SQL Server ke Oracle](https://intosql.com/docs/migrations/sql-server-to-oracle)
- [Tipe data SQL Server ke Oracle](https://intosql.com/docs/types/sql-server-to-oracle)
- [Setiap pasangan database](https://intosql.com/id/migrasi-database)
