---
title: "Pindahkan ekspor Oracle ke versi lain"
description: "Konversi ekspor SQL Developer atau SQLcl dari Oracle 11g ke atas menjadi skrip yang dimuat di Oracle 19c dan yang lebih baru, dengan tabel, kunci, dan data yang sama."
canonical: https://intosql.com/id/oracle-ke-oracle
last_updated: 2026-10-15
---

# Pindahkan ekspor Oracle ke versi lain

Letakkan file .sql yang ditulis Database Export di SQL Developer atau SQLcl, dengan tabel dan pernyataan Insert-nya, lalu unduh skrip yang dimuat di Oracle 19c dan yang lebih baru. NUMBER, DATE, TIMESTAMP, LOB, identity, dan sequence tetap apa adanya, XMLTYPE dan JSON menyimpan teksnya di CLOB, dan setiap perubahan dicantumkan di laporan.

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

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

## Apa yang berubah antara file dan skrip

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

| Di file | Di skrip | Baris laporan |
| --- | --- | --- |
| BOOLEAN (23ai) | BOOLEAN di 23ai, selain itu NUMBER(1) dengan CHECK 0 dan 1 |  |
| VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONG | tipe yang sama, dengan panjang BYTE atau CHAR-nya |  |
| VARCHAR2 and NVARCHAR2 past what the target's own types hold | VARCHAR2(4000 CHAR) jika setiap nilai muat dalam 4000 byte, selain itu CLOB | `text_as_lob` |
| NUMBER, NUMBER(p,s), FLOAT(b) | tipe NUMBER yang sama |  |
| INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND | tipe INTERVAL yang sama |  |
| DATE, TIMESTAMP(p) | DATE dan TIMESTAMP(p), sesuai deklarasi |  |
| TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE | tipe yang sama |  |
| JSON (21c), and CLOB holding JSON | JSON di 21c ke atas, selain itu CLOB |  |
| BLOB, RAW(n), LONG RAW | tipe yang sama; LONG RAW sebagai BLOB |  |
| ROWID, UROWID, XMLTYPE, SDO_GEOMETRY | CLOB dengan teksnya | `type_replaced` |
| collations that ignore case (BINARY_CI) | perbandingan persis | `case_insensitive_collation` |
| identity columns, and a sequence a BEFORE INSERT trigger assigns | GENERATED BY DEFAULT ON NULL AS IDENTITY, berlanjut setelah id tertinggi |  |
| identity columns the target can't count | bilangan bulat biasa | `counter_dropped` |
| CREATE SEQUENCE | CREATE SEQUENCE dengan opsi yang sama |  |
| virtual columns (GENERATED ALWAYS AS ... VIRTUAL) | kolom virtual | `stored_as_virtual` |
| virtual columns with functions IntoSQL doesn't write, and the || operator | kolom biasa | `generated_not_translated` |
| defaults with functions IntoSQL doesn't write (SYS_GUID(), ||) | tanpa default | `default_not_translated` |
| CHECK constraints | diterjemahkan |  |
| CHECK constraints with functions IntoSQL doesn't write | tidak dibuat | `check_skipped` |
| CHECK constraints that are DISABLE or ENABLE NOVALIDATE | tidak dibuat | `check_not_enforced` |
| function-based, bitmap and domain indexes | tidak dibuat | `index_skipped` |
| foreign keys | setelah data ENABLE NOVALIDATE, lalu divalidasi dengan peringatan untuk baris yatim |  |
| ON DELETE CASCADE that cascades in a cycle or along a second path | dihapus | `foreign_key_action_unsupported` |
| foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE ones | tidak dibuat | `foreign_key_skipped` |
| names longer than Oracle 12.1 allows | dipersingkat | `name_shortened` |
| partitioned tables | satu tabel dengan baris dari setiap partisi | `partitions_dropped` |
| several schemas in one export | satu skema, nama tabel diawali nama skemanya | `schemas_merged` |
| NOT NULL columns with values that become NULL | NOT NULL dihapus | `not_null_relaxed` |
| views, synonyms, types, packages, procedures, functions and other triggers | dicantumkan di laporan | `not_converted_objects` |
| exports without CREATE TABLE (data only) | tipe dibaca dari nilai | `no_schema` |
| expressions in INSERT values other than the ones exports write | NULL | `expression_value` |
| types IntoSQL doesn't know, and object types | CLOB | `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 | NaN dan Infinity dipertahankan |  |
| 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 @oracle.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 Oracle untuk hasil terbaik

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

- Di SQL Developer, pilih Tools, Database Export, dengan DDL dan format data Insert. SQLcl menulis hal yang sama dengan SET SQLFORMAT INSERT.
- Jalankan ALTER SESSION SET NLS_DATE_FORMAT = 'SYYYY-MM-DD HH24:MI:SS' sebelum mengekspor: format default menulis tanggal tanpa jam atau abadnya.
- File .dmp dari exp atau expdp bersifat biner: impor ke database Oracle, misalnya Oracle Database Free di Docker, lalu ekspor dengan SQL Developer.

## Yang tidak dikonversi

View, trigger, procedure, fungsi, dan objek lain yang ditulis dalam bahasa Oracle sendiri dicantumkan di laporan berdasarkan nama, tidak pernah dibuang diam-diam, jadi Anda bisa memeriksa masing-masing dengan versi Oracle tujuan pemuatan sebelum membuatnya ulang.

## Pertanyaan tentang memindahkan Oracle antarversi

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

### Bisakah saya mengonversi file .dmp dari exp atau expdp?

Tidak secara langsung: Data Pump dan Export versi asli menulis format biner yang hanya bisa dibaca Oracle. Impor ke database Oracle mana pun, Oracle Database Free berjalan di Docker, lalu ekspor dengan Database Export di SQL Developer atau SQLcl. Konverter memberi tahu hal ini saat menerima file .dmp.

### Ekspor dari versi Oracle mana yang bisa dipakai?

Ekspor dari SQL Developer dan SQLcl, dengan definisi tabel dari DBMS_METADATA, dari Oracle 11g ke atas. Setiap ekspor uji berasal dari Oracle 21c dan 23ai, dalam sesi Amerika, Jerman, dan ISO, dan dibandingkan dengan sumbernya sel demi sel.

### Apa yang terjadi pada NUMBER, DATE, dan tipe Oracle lainnya?

Tetap apa adanya: NUMBER dengan presisinya, DATE, TIMESTAMP, interval, CHAR dan VARCHAR2 dengan panjangnya, RAW, dan LOB. XMLTYPE dan JSON menyimpan teksnya dalam CLOB, jadi skrip bisa dimuat di 19c.

### Apakah kolom identity dan sequence dipertahankan?

Ya. Kolom identity dan sequence tetap apa adanya dan berlanjut dari posisi yang disebutkan ekspor.

### Bagaimana dengan paket PL/SQL, prosedur, dan trigger?

Semuanya dicantumkan di laporan berdasarkan nama dan tidak dikonversi, sehingga Anda bisa membuatnya ulang setelah tabel dimuat.

### Di versi Oracle mana skrip bisa dimuat?

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

## Dari Oracle

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

## Panduan dan setiap pasangan

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