---
title: "Migrasi MySQL ke Oracle di browser Anda"
description: "Migrasi database MySQL atau MariaDB ke Oracle: konversi dump-nya menjadi skrip dengan tabel, kunci, dan data yang sama, plus laporan setiap perubahan."
canonical: https://intosql.com/id/mysql-ke-oracle
last_updated: 2026-10-15
---

# Migrasi MySQL ke Oracle di browser Anda

Letakkan dump dari mysqldump, mariadb-dump, mysqlpump, phpMyAdmin, atau Adminer, sebagai .sql atau .sql.gz, 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 MySQL ke Oracle](https://intosql.com/docs/migrations/mysql-to-oracle)

[Tipe data MySQL ke Oracle](https://intosql.com/docs/types/mysql-to-oracle)

## Yang berubah dari MySQL ke Oracle

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

| Di MySQL | Di Oracle | Baris laporan |
| --- | --- | --- |
| TINYINT(1), BOOL | NUMBER(1) dengan CHECK 0 dan 1 jika setiap nilai 0 atau 1, selain itu NUMBER(3) | `bool_kept_numeric` |
| UNSIGNED integers | NUMBER yang cukup lebar untuk rentangnya, dengan CHECK bahwa nilainya tidak negatif |  |
| ZEROFILL and display widths | dihapus | `zerofill_dropped` |
| FLOAT(M,D) | BINARY_FLOAT atau BINARY_DOUBLE, tanpa skala | `float_scale_dropped` |
| DECIMAL(p,s) | NUMBER(p,s) sampai 38 digit; VARCHAR2 jika lebih | `decimal_as_text` |
| BIT(1), BIT(n) | NUMBER(1), NUMBER(19) sampai 63 bit, NUMBER(20) untuk BIT(64) |  |
| zero, partial or impossible dates (0000-00-00, 2024-02-30) | NULL | `invalid_date_null` |
| NOT NULL columns with values that become NULL | NOT NULL dihapus | `not_null_relaxed` |
| empty strings and empty binary values | NULL | `empty_string_null` |
| DEFAULT '0000-00-00' | tanpa default | `zero_date_default` |
| TIME | INTERVAL DAY TO SECOND, yang memuat durasi |  |
| YEAR | NUMBER(4) dengan CHECK rentangnya |  |
| CHAR(n), VARCHAR(n) | VARCHAR2(n CHAR), menghitung karakter |  |
| VARCHAR(n) and TEXT longer than 4000 bytes | CLOB | `text_as_lob` |
| DATETIME | TIMESTAMP |  |
| TIMESTAMP | TIMESTAMP WITH TIME ZONE dalam zona yang disebutkan dump, UTC jika tidak disebutkan | `timestamp_zone_assumed` |
| ENUM | VARCHAR2 dengan CHECK nilainya |  |
| ENUM holding '' (MySQL's error value) | NULL |  |
| ENUM holding values outside its list | tanpa CHECK | `enum_check_skipped` |
| SET | VARCHAR2 seperti yang ditulis MySQL ('a,b') |  |
| JSON | CLOB |  |
| NUL bytes in text | dipertahankan |  |
| text that isn't valid in its character set | byte yang rusak menjadi karakter pengganti | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | disalin apa adanya | `mojibake_suspected` |
| AUTO_INCREMENT | GENERATED BY DEFAULT ON NULL AS IDENTITY, dimulai ulang melewati id yang disalin |  |
| MyISAM AUTO_INCREMENT on the second column of a key | satu penghitung untuk tabel | `myisam_group_autoincrement` |
| ON UPDATE CURRENT_TIMESTAMP | trigger BEFORE UPDATE | `on_update_trigger` |
| generated columns | kolom virtual | `stored_as_virtual` |
| generated columns with functions Oracle lacks | kolom biasa | `generated_not_translated` |
| INVISIBLE columns | kolom INVISIBLE |  |
| CHECK constraints | diterjemahkan, langsung di CREATE TABLE |  |
| CHECK constraints with functions Oracle lacks | tidak dibuat | `check_skipped` |
| CHECK ... NOT ENFORCED | tidak dibuat | `check_not_enforced` |
| defaults with functions Oracle lacks | tanpa default | `default_not_translated` |
| keys and indexes on a prefix, c(20) | indeks pada SUBSTR kolom | `prefix_unique` |
| FULLTEXT indexes | tidak dibuat | `fulltext_not_created` |
| SPATIAL indexes | tidak dibuat | `spatial_index_not_created` |
| functional indexes, and indexes on whole CLOB or BLOB 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` |
| foreign keys to columns without a unique key | tidak dibuat | `foreign_key_skipped` |
| table and column names | huruf besar jika berupa nama biasa, selain itu seperti ditulis | `identifier_renamed` |
| names over 128 bytes | dipersingkat | `name_shortened` |
| GEOMETRY, POINT, POLYGON... | BLOB berisi WKB | `geometry_as_blob` |
| INET4, INET6, UUID (MariaDB) | VARCHAR2(39), VARCHAR2(36) |  |
| BINARY, VARBINARY, BLOB | RAW sampai 2000 byte, selain itu BLOB |  |
| PARTITION BY | satu tabel | `partitions_dropped` |
| WITH SYSTEM VERSIONING (MariaDB) | tabel dengan baris saat ini | `system_versioning_dropped` |
| MyISAM, MEMORY and other engines | tabel biasa | `engine_dropped` |
| views, triggers, procedures, functions and events | dicantumkan di laporan | `not_converted_objects` |
| dumps without CREATE TABLE | tipe dibaca dari nilai | `no_schema` |
| geometries in a dump without CREATE TABLE | BLOB berisi WKB | `geometry_inferred` |
| _ci collations | perbandingan persis | `case_insensitive_collation` |
| SET NAMES utf8 from utf8mb4 tables | dikonversi, dengan peringatan | `dump_lost_four_byte_chars` |
| dumps without SET NAMES whose text isn't UTF-8 | dibaca sebagai Latin-1 (Windows-1252) | `charset_guessed` |
| sjis, cp932, gbk, big5 dumps | dibaca sebagai UTF-8, dengan peringatan | `unsupported_charset` |
| UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rows | dievaluasi |  |
| other expressions in rows | NULL | `expression_value` |
| DEFAULT in VALUES | nilai default kolom | `default_keyword_filled` |
| DEFAULT in VALUES without a literal default | NULL | `default_keyword_null` |
| REPLACE and INSERT IGNORE | baris biasa | `replace_as_insert` |
| types IntoSQL doesn't know | CLOB | `unknown_type` |
| values that don't fit their column | NULL | `invalid_value_null` |
| unreadable geometries | NULL | `bad_geometry` |
| dumps of several databases | satu skema, setiap tabel diberi nama database-nya di depan | `databases_merged` |
| CREATE SEQUENCE (MariaDB) | CREATE SEQUENCE, pada nilai yang sudah dicapai |  |
| VECTOR(n) (MariaDB 11.7+) | CLOB dengan float sebagai array JSON | `type_replaced` |

## 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 @mysql.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 MySQL untuk hasil terbaik

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

- --default-character-set=utf8mb4 mempertahankan emoji dan karakter 4 byte lainnya, yang hilang di dump utf8 sebelum konverter melihatnya.
- --hex-blob menulis kolom biner sebagai heksadesimal, yang tetap utuh saat disalin antarsistem.
- --routines --triggers --events menambahkan objek-objek itu ke dump, sehingga laporan bisa mencantumkannya.

## Yang tidak dikonversi

View, trigger, stored procedure, fungsi, dan event ditulis dalam bahasa masing-masing database. Semuanya dicantumkan di laporan berdasarkan nama, tidak pernah dibuang diam-diam, sehingga Anda bisa menulis ulang untuk Oracle.

## Pertanyaan tentang MySQL 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 dump MariaDB bisa dibaca?

Ya. Dump dari mariadb-dump dan dari MariaDB 10.3 sampai 12 dikonversi dengan cara yang sama, termasuk kolom INET6, INET4, dan UUID milik MariaDB.

### Apa yang terjadi pada tanggal 0000-00-00?

Oracle tidak punya tanggal nol, jadi tanggal itu menjadi NULL dan kolomnya menerima NULL. Laporan menyebutkan jumlahnya di setiap kolom. String kosong juga menjadi NULL, karena Oracle menyimpannya begitu.

### Apakah nilai AUTO_INCREMENT dipertahankan?

Ya. Setiap kolom AUTO_INCREMENT menjadi kolom identity, setiap baris mempertahankan id-nya, dan id berikutnya berlanjut setelah id tertinggi, atau setelah AUTO_INCREMENT tabel jika itu lebih tinggi.

### Apakah TINYINT(1) menjadi boolean?

Oracle sebelum 23ai tidak punya kolom boolean. Kolom yang semua nilainya 0 atau 1 menjadi NUMBER(1) dengan CHECK yang menjaganya tetap begitu; kolom yang berisi angka lain mempertahankannya, dan laporan menjelaskan alasannya.

### Bagaimana dengan stored procedure dan trigger?

Semuanya dicantumkan di laporan berdasarkan nama dan tidak dikonversi, karena setiap database menulisnya dalam bahasanya sendiri. ON UPDATE CURRENT_TIMESTAMP adalah pengecualian: menjadi trigger Oracle.

### Di versi Oracle mana skrip bisa dimuat?

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

## Dari MySQL

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

## Ke Oracle

- [MariaDB ke Oracle](https://intosql.com/id/mariadb-ke-oracle)
- [PostgreSQL ke Oracle](https://intosql.com/id/postgresql-ke-oracle)
- [SQL Server ke Oracle](https://intosql.com/id/sql-server-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 MySQL](https://intosql.com/id/oracle-ke-mysql)
- [Panduan migrasi MySQL ke Oracle](https://intosql.com/docs/migrations/mysql-to-oracle)
- [Tipe data MySQL ke Oracle](https://intosql.com/docs/types/mysql-to-oracle)
- [Setiap pasangan database](https://intosql.com/id/migrasi-database)
