Konversi MariaDB ke Oracle
Letakkan dump dari mariadb-dump, mysqldump, 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.
18 baris dikonversi, 4 perbaikan, tidak ada yang ditolak
Tabel di shop_2024_mariadb.sqlDump MariaDB 11.8.9-MariaDB-ubu2404 · ditulis oleh mariadb-dump · utf8mb4
customersditulis sebagai CUSTOMERS8 baris2
8 kolom ID NUMBER(10) not null NAME VARCHAR2(100 CHAR) not null EMAIL VARCHAR2(150 CHAR) not null COUNTRY VARCHAR2(2 CHAR) not null IS_ACTIVE NUMBER(1) not null SIGNED_UP DATE CREATED_AT TIMESTAMP(0) WITH TIME ZONE not null LAST_IP VARCHAR2(39 CHAR) ordersditulis sebagai ORDERS10 baris2
12 kolom ID NUMBER(10) not null CUSTOMER_ID NUMBER(10) not null STATUS VARCHAR2(9 CHAR) TOTAL NUMBER(10,2) not null ITEMS NUMBER(5) not null ORDERED_AT TIMESTAMP(0) not null SHIPPED_AT TIMESTAMP(0) NOTE VARCHAR2(255 CHAR) ORDER_REF VARCHAR2(36 CHAR) not null INVOICE NUMBER(10) not null DETAILS CLOB UPDATED_AT TIMESTAMP(0) WITH TIME ZONE not null
-- Written by IntoSQL from a MySQL dump. Load it with: NLS_LANG=.AL32UTF8 sqlplus -S -L <user>/<password>@<database> @<file>
WHENEVER SQLERROR EXIT FAILURE ROLLBACK;
SET DEFINE OFF;
SET SQLBLANKLINES ON;
SET FEEDBACK OFF;
SET SERVEROUTPUT ON;
CREATE OR REPLACE FUNCTION "INTOSQL_CLOB" (p SYS.ODCIVARCHAR2LIST) RETURN CLOB IS
r CLOB;
BEGIN
DBMS_LOB.CREATETEMPORARY(r, TRUE);
FOR i IN 1 .. p.COUNT LOOP
IF p(i) IS NOT NULL THEN
DBMS_LOB.WRITEAPPEND(r, LENGTH2(p(i)), p(i));
END IF;
END LOOP;
RETURN r;
END;
/
CREATE OR REPLACE FUNCTION "INTOSQL_BLOB" (p SYS.ODCIVARCHAR2LIST) RETURN BLOB IS
r BLOB;
piece RAW(2000);
BEGIN
DBMS_LOB.CREATETEMPORARY(r, TRUE);
FOR i IN 1 .. p.COUNT LOOP
piece := HEXTORAW(p(i));
DBMS_LOB.WRITEAPPEND(r, UTL_RAW.LENGTH(piece), piece);
END LOOP;
RETURN r;
END;
/
CREATE SEQUENCE "INVOICE_NUMBERS" START WITH 2000 INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775806;
CREATE TABLE "CUSTOMERS" (
"ID" NUMBER(10) GENERATED BY DEFAULT ON NULL AS IDENTITY (START WITH 1001),
"NAME" VARCHAR2(100 CHAR) NOT NULL,
"EMAIL" VARCHAR2(150 CHAR) NOT NULL,
"COUNTRY" VARCHAR2(2 CHAR) DEFAULT 'US' NOT NULL,
"IS_ACTIVE" NUMBER(1) DEFAULT 1 NOT NULL,
"SIGNED_UP" DATE,
"CREATED_AT" TIMESTAMP(0) WITH TIME ZONE DEFAULT SYSTIMESTAMP NOT NULL,
"LAST_IP" VARCHAR2(39 CHAR),
CONSTRAINT "CK_CUSTOMERS_ID" CHECK ("ID" >= 0),
CONSTRAINT "CK_CUSTOMERS_IS_ACTIVE" CHECK ("IS_ACTIVE" IN (0, 1))
);
CREATE TABLE "ORDERS" (
"ID" NUMBER(10) GENERATED BY DEFAULT ON NULL AS IDENTITY (START WITH 5001),
"CUSTOMER_ID" NUMBER(10) NOT NULL,
"STATUS" VARCHAR2(9 CHAR) DEFAULT 'pending',
"TOTAL" NUMBER(10,2) NOT NULL,
"ITEMS" NUMBER(5) DEFAULT 1 NOT NULL,
"ORDERED_AT" TIMESTAMP(0) NOT NULL,
"SHIPPED_AT" TIMESTAMP(0),
"NOTE" VARCHAR2(255 CHAR),
"ORDER_REF" VARCHAR2(36 CHAR) NOT NULL,
"INVOICE" NUMBER(10) DEFAULT ("INVOICE_NUMBERS".NEXTVAL) NOT NULL,
"DETAILS" CLOB,
"UPDATED_AT" TIMESTAMP(0) WITH TIME ZONE DEFAULT SYSTIMESTAMP NOT NULL,
CONSTRAINT "CK_ORDERS_ID" CHECK ("ID" >= 0),
CONSTRAINT "CK_ORDERS_CUSTOMER_ID" CHECK ("CUSTOMER_ID" >= 0),
CONSTRAINT "CK_ORDERS_STATUS" CHECK ("STATUS" IN ('pending', 'paid', 'shipped', 'cancelled')),
CONSTRAINT "CK_ORDERS_ITEMS" CHECK ("ITEMS" >= 0)
);
BEGIN
INSERT INTO "CUSTOMERS" (
"ID",
"NAME",
"EMAIL",
"COUNTRY",
"IS_ACTIVE",
"SIGNED_UP",
"CREATED_AT",
"LAST_IP"
) VALUES (
1,
'Ana Martínez',
'ana@example.com',
'MX',
1,
DATE '2023-01-15',
TIMESTAMP '2023-01-15 10:24:00 +00:00',
'::ffff:203.0.113.7'
);
INSERT INTO "CUSTOMERS" (
"ID",
"NAME",
"EMAIL",
"COUNTRY",
"IS_ACTIVE",
"SIGNED_UP",
"CREATED_AT",
"LAST_IP"
) VALUES (
2,
'Zoë Müller',
'zoe@example.de',
'DE',
1,
DATE '2023-02-03',
TIMESTAMP '2023-02-03 08:11:42 +00:00',
'2001:db8::1'
);
INSERT INTO "CUSTOMERS" (
"ID",
"NAME",
"EMAIL",
"COUNTRY",
"IS_ACTIVE",
"SIGNED_UP",
"CREATED_AT",
"LAST_IP"
) VALUES (
3,
'José Peña',
'jose@example.es',
'ES',
0,
DATE '2023-03-21',
TIMESTAMP '2023-03-21 19:05:17 +00:00',
NULL
);
INSERT INTO "CUSTOMERS" (
"ID",
"NAME",
"EMAIL",
"COUNTRY",
"IS_ACTIVE",
"SIGNED_UP",
"CREATED_AT",
"LAST_IP"
) VALUES (
4,
'李雷',
'lilei@example.cn',
'CN',
1,
DATE '2023-05-09',
TIMESTAMP '2023-05-09 02:40:00 +00:00',
'::ffff:198.51.100.23'
);
INSERT INTO "CUSTOMERS" (
"ID",
"NAME",
"EMAIL",
"COUNTRY",
"IS_ACTIVE",
"SIGNED_UP",
"CREATED_AT",
"LAST_IP"
) VALUES (
5,
'Noah O''Brien',
'noah@example.ie',
'IE',
1,
NULL,
TIMESTAMP '2023-06-30 14:00:00 +00:00',
NULL
);
INSERT INTO "CUSTOMERS" (
"ID",
"NAME",
"EMAIL",
"COUNTRY",
"IS_ACTIVE",
"SIGNED_UP",
"CREATED_AT",
"LAST_IP"
) VALUES (
6,
'Amélie Laurent',
'amelie@example.fr',
'FR',
1,
DATE '2024-01-02',
TIMESTAMP '2024-01-02 09:30:00 +00:00',
'2001:db8:85a3::8a2e:370:7334'
);
INSERT INTO "CUSTOMERS" (
"ID",
"NAME",
"EMAIL",
"COUNTRY",
"IS_ACTIVE",
"SIGNED_UP",
"CREATED_AT",
"LAST_IP"
) VALUES (
7,
'Ravi Patel',
'ravi@example.in',
'IN',
0,
DATE '2024-02-29',
TIMESTAMP '2024-02-29 23:59:59 +00:00',
'::ffff:192.0.2.200'
);
INSERT INTO "CUSTOMERS" (
"ID",
"NAME",
"EMAIL",
"COUNTRY",
"IS_ACTIVE",
"SIGNED_UP",
"CREATED_AT",
"LAST_IP"
) VALUES (
8,
'Sofia Rossi 🌻',
'sofia@example.it',
'IT',
1,
DATE '2024-04-12',
TIMESTAMP '2024-04-12 12:12:12 +00:00',
NULL
);
COMMIT;
END;
/
BEGIN
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE",
"ORDER_REF",
"INVOICE",
"DETAILS",
"UPDATED_AT"
) VALUES (
1,
1,
'shipped',
129.90,
3,
TIMESTAMP '2024-03-01 10:00:00',
TIMESTAMP '2024-03-02 16:30:00',
NULL,
'0b7a4c2e-3f1d-4e8a-9c55-1a2b3c4d5e6f',
1000,
'{"gift": false}',
TIMESTAMP '2024-03-02 16:30:00 +00:00'
);
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE",
"ORDER_REF",
"INVOICE",
"DETAILS",
"UPDATED_AT"
) VALUES (
2,
2,
'paid',
54.00,
1,
TIMESTAMP '2024-03-02 11:15:00',
NULL,
'Gift wrap 🎁',
'1c8b5d3f-4a2e-4f9b-8d66-2b3c4d5e6f70',
1001,
'{"gift": true, "wrap": "red"}',
TIMESTAMP '2024-03-02 11:20:00 +00:00'
);
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE",
"ORDER_REF",
"INVOICE",
"DETAILS",
"UPDATED_AT"
) VALUES (
3,
1,
'cancelled',
12.50,
1,
TIMESTAMP '2024-03-03 09:45:00',
NULL,
'Customer changed their mind',
'2d9c6e4a-5b3f-4a0c-9e77-3c4d5e6f7081',
1002,
NULL,
TIMESTAMP '2024-03-03 10:00:00 +00:00'
);
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE",
"ORDER_REF",
"INVOICE",
"DETAILS",
"UPDATED_AT"
) VALUES (
4,
4,
'shipped',
980.00,
12,
TIMESTAMP '2024-03-05 02:10:00',
TIMESTAMP '2024-03-07 08:00:00',
'请小心轻放',
'3e0d7f5b-6c4a-4b1d-8f88-4d5e6f708192',
1003,
'{"fragile": true}',
TIMESTAMP '2024-03-07 08:00:00 +00:00'
);
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE",
"ORDER_REF",
"INVOICE",
"DETAILS",
"UPDATED_AT"
) VALUES (
5,
5,
'pending',
45.75,
2,
TIMESTAMP '2024-03-08 17:20:00',
NULL,
'Leave at the door; ring twice',
'4f1e806c-7d5b-4c2e-9a99-5e6f708192a3',
1004,
NULL,
TIMESTAMP '2024-03-08 17:20:00 +00:00'
);
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE",
"ORDER_REF",
"INVOICE",
"DETAILS",
"UPDATED_AT"
) VALUES (
6,
6,
'shipped',
310.40,
5,
TIMESTAMP '2024-03-10 13:00:00',
TIMESTAMP '2024-03-11 09:00:00',
'Fragile: "glass"',
'50f2917d-8e6c-4d3f-8baa-6f708192a3b4',
1005,
'{"fragile": true}',
TIMESTAMP '2024-03-11 09:00:00 +00:00'
);
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE",
"ORDER_REF",
"INVOICE",
"DETAILS",
"UPDATED_AT"
) VALUES (
7,
8,
'paid',
76.20,
2,
TIMESTAMP '2024-03-11 18:45:00',
NULL,
NULL,
'6103a28e-9f7d-4e40-9cbb-708192a3b4c5',
1006,
NULL,
TIMESTAMP '2024-03-11 18:46:00 +00:00'
);
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE",
"ORDER_REF",
"INVOICE",
"DETAILS",
"UPDATED_AT"
) VALUES (
8,
2,
NULL,
19.99,
1,
TIMESTAMP '2024-03-12 08:00:00',
NULL,
'Status lost in an old import',
'7214b39f-a08e-4f51-8dcc-8192a3b4c5d6',
1007,
NULL,
TIMESTAMP '2024-03-12 08:00:00 +00:00'
);
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE",
"ORDER_REF",
"INVOICE",
"DETAILS",
"UPDATED_AT"
) VALUES (
9,
3,
'shipped',
64.00,
2,
TIMESTAMP '2024-03-14 15:30:00',
NULL,
'Shipping date never recorded',
'8325c4a0-b19f-4062-9edd-92a3b4c5d6e7',
1008,
'{"parcels": [1, 2]}',
TIMESTAMP '2024-03-15 10:00:00 +00:00'
);
INSERT INTO "ORDERS" (
"ID",
"CUSTOMER_ID",
"STATUS",
"TOTAL",
"ITEMS",
"ORDERED_AT",
"SHIPPED_AT",
"NOTE",
"ORDER_REF",
"INVOICE",
"DETAILS",
"UPDATED_AT"
) VALUES (
10,
7,
'paid',
1499.00,
1,
TIMESTAMP '2024-03-15 21:05:00',
NULL,
'C:\Users\ravi\invoice.pdf',
'9436d5b1-c2a0-4173-8fee-a3b4c5d6e7f8',
1009,
NULL,
TIMESTAMP '2024-03-15 21:05:00 +00:00'
);
COMMIT;
END;
/
-- Keys, indexes, foreign keys, counters and triggers, after the rows.
ALTER TABLE "CUSTOMERS" ADD CONSTRAINT "PK_CUSTOMERS" PRIMARY KEY ("ID");
ALTER TABLE "CUSTOMERS" ADD CONSTRAINT "UQ_CUSTOMERS_UQ_EMAIL" UNIQUE ("EMAIL");
ALTER TABLE "ORDERS" ADD CONSTRAINT "PK_ORDERS" PRIMARY KEY ("ID");
CREATE INDEX "IX_ORDERS_IDX_CUSTOMER" ON "ORDERS" ("CUSTOMER_ID");
CREATE INDEX "IX_ORDERS_IDX_STATUS_DATE" ON "ORDERS" ("STATUS", "ORDERED_AT");
ALTER TABLE "ORDERS" ADD CONSTRAINT "FK_ORDERS_CUSTOMER" FOREIGN KEY ("CUSTOMER_ID") REFERENCES "CUSTOMERS" ("ID") ENABLE NOVALIDATE;
BEGIN
EXECUTE IMMEDIATE 'ALTER TABLE "ORDERS" ENABLE VALIDATE CONSTRAINT "FK_ORDERS_CUSTOMER"';
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Foreign key ' || '"FK_ORDERS_CUSTOMER"' || ' has rows without a parent: it stays unvalidated, and new rows are checked.');
END;
/
DECLARE
next_id NUMBER;
BEGIN
SELECT NVL(MAX("ID"), 0) + 1 INTO next_id FROM "CUSTOMERS";
IF next_id < 1001 THEN
next_id := 1001;
END IF;
EXECUTE IMMEDIATE 'ALTER TABLE "CUSTOMERS" MODIFY ("ID" GENERATED BY DEFAULT ON NULL AS IDENTITY (START WITH ' || next_id || '))';
END;
/
COMMENT ON TABLE "CUSTOMERS" IS 'People who bought at least once';
DECLARE
next_id NUMBER;
BEGIN
SELECT NVL(MAX("ID"), 0) + 1 INTO next_id FROM "ORDERS";
IF next_id < 5001 THEN
next_id := 5001;
END IF;
EXECUTE IMMEDIATE 'ALTER TABLE "ORDERS" MODIFY ("ID" GENERATED BY DEFAULT ON NULL AS IDENTITY (START WITH ' || next_id || '))';
END;
/
CREATE OR REPLACE TRIGGER "TR_ORDERS_UPDATED_AT" BEFORE UPDATE ON "ORDERS" FOR EACH ROW
BEGIN
IF NOT UPDATING('UPDATED_AT') THEN
:NEW."UPDATED_AT" := SYSTIMESTAMP;
END IF;
END;
/
DROP FUNCTION "INTOSQL_CLOB";
DROP FUNCTION "INTOSQL_BLOB";
COMMIT;
EXIT;
Perbaikan
- "signed_up" dari customers kini mengizinkan NULL: sebagian nilainya tidak bisa disimpan dan menjadi NULL.
- Default "signed_up" di customers, 0000‑00‑00, bukan tanggal yang diterima Oracle, jadi kolom itu tanpa default.
- "status" dari orders kini mengizinkan NULL: sebagian nilainya tidak bisa disimpan dan menjadi NULL.
- "updated_at" dari orders berubah ke waktu saat ini di setiap pembaruan; di Oracle, trigger yang melakukannya.
Perlu diperiksa
- 1 nilai di "signed_up" dari customers adalah tanggal nol atau mustahil, misalnya 0000‑00‑00, yang tidak bisa disimpan Oracle, jadi menjadi NULL. Jika tanggal itu bermakna, ganti di sumber dengan tanggal sungguhan sebelum membuat dump.
- 1 nilai di "shipped_at" dari orders adalah tanggal nol atau mustahil, misalnya 0000‑00‑00 00:00:00, yang tidak bisa disimpan Oracle, jadi menjadi NULL. Jika tanggal itu bermakna, ganti di sumber dengan tanggal sungguhan sebelum membuat dump.
- 1 nilai kosong di "status" dari orders menjadi NULL; Oracle menyimpan string kosong sebagai NULL. Jika kueri membandingkan kolom ini dengan ', bandingkan dengan IS NULL.
File Anda dikonversi di komputer ini dan tidak pernah diunggah.
Contoh lain:
Yang berubah dari MariaDB ke Oracle
Setiap baris adalah aturan yang diterapkan konverter, beserta baris laporan yang ditulisnya saat aturan itu mengubah sesuatu di data Anda.
TINYINT(1), BOOL
NUMBER(1) dengan CHECK 0 dan 1 jika setiap nilai 0 atau 1, selain itu NUMBER(3)
BOOL di MySQL adalah TINYINT(1) yang bisa berisi angka apa pun dari -128 sampai 127. Oracle sebelum 23ai tidak punya kolom boolean, jadi kolom berisi 0 dan 1 menjadi NUMBER(1) dengan CHECK; kolom yang berisi 2 atau -1 mempertahankan angkanya.
Baris laporan: bool_kept_numeric
UNSIGNED integers
NUMBER yang cukup lebar untuk rentangnya, dengan CHECK bahwa nilainya tidak negatif
NUMBER di Oracle memuat bilangan bulat dengan lebar apa pun yang ada di MySQL; CHECK mencegah nilai negatif seperti di MySQL.
ZEROFILL and display widths
dihapus
Isian nol adalah cara menampilkan angka, bukan bagian dari angka. Angkanya dipertahankan; format saat dibaca jika isian itu penting.
Baris laporan: zerofill_dropped
FLOAT(M,D)
BINARY_FLOAT atau BINARY_DOUBLE, tanpa skala
Bilangan floating-point biner Oracle tidak punya skala tetap. Nilai yang tersimpan disalin apa adanya.
Baris laporan: float_scale_dropped
DECIMAL(p,s)
NUMBER(p,s) sampai 38 digit; VARCHAR2 jika lebih
NUMBER di Oracle memuat 38 digit. Desimal yang lebih lebar disimpan sebagai teks agar setiap digit tetap tepat.
Baris laporan: decimal_as_text
BIT(1), BIT(n)
NUMBER(1), NUMBER(19) sampai 63 bit, NUMBER(20) untuk BIT(64)
Field bit disimpan sebagai angka yang dibentuk bit-bitnya.
zero, partial or impossible dates (0000-00-00, 2024-02-30)
NULL
Oracle hanya menyimpan tanggal kalender yang nyata. MySQL menyimpan tanggal nol dan mustahil jika mode SQL-nya mengizinkan; tanggal itu menjadi NULL dan laporan menghitungnya.
Baris laporan: invalid_date_null
NOT NULL columns with values that become NULL
NOT NULL dihapus
Kolom yang nilainya harus menjadi NULL, termasuk string kosong, tidak bisa mempertahankan NOT NULL, atau pemuatan akan berhenti.
Baris laporan: not_null_relaxed
empty strings and empty binary values
NULL
Oracle menyimpan string kosong sebagai NULL, jadi nilai yang tadinya ' terbaca sebagai NULL. Laporan menghitungnya per kolom.
Baris laporan: empty_string_null
DEFAULT '0000-00-00'
tanpa default
Default yang tidak bisa disimpan Oracle dihilangkan, bukan diganti dengan tanggal karangan.
Baris laporan: zero_date_default
TIME
INTERVAL DAY TO SECOND, yang memuat durasi
Oracle tidak punya tipe jam dalam sehari, dan TIME di MySQL adalah durasi dari -838:59:59 sampai 838:59:59; interval memuat setiap nilai.
YEAR
NUMBER(4) dengan CHECK rentangnya
Oracle tidak punya tipe tahun; CHECK mempertahankan nilai yang sama dengan yang diizinkan MySQL.
CHAR(n), VARCHAR(n)
VARCHAR2(n CHAR), menghitung karakter
Panjang dihitung dalam karakter seperti di MySQL, dan MySQL mengembalikan nilai CHAR tanpa spasi di akhir, sebagaimana VARCHAR2 menyimpannya.
VARCHAR(n) and TEXT longer than 4000 bytes
CLOB
VARCHAR2 memuat 4000 byte secara default, jadi teks yang lebih panjang menjadi CLOB; kolom yang semua nilainya muat tetap VARCHAR2.
Baris laporan: text_as_lob
DATETIME
TIMESTAMP
DATETIME adalah pembacaan jam dinding tanpa zona waktu, seperti TIMESTAMP. DATE menjadi DATE milik Oracle, yang juga memuat jam yang tetap tengah malam.
TIMESTAMP
TIMESTAMP WITH TIME ZONE dalam zona yang disebutkan dump, UTC jika tidak disebutkan
TIMESTAMP adalah satu momen. Dump menyebutkan zona tempat nilainya ditulis (mysqldump menulis UTC); tanpa itu, nilainya dibaca sebagai UTC dan laporan menyebutkannya.
Baris laporan: timestamp_zone_assumed
ENUM
VARCHAR2 dengan CHECK nilainya
Text dengan CHECK mempertahankan nilai yang sama.
ENUM holding '' (MySQL's error value)
NULL
MySQL menyimpan string kosong saat nilai tidak valid masuk ke ENUM dalam mode SQL yang longgar. Oracle menyimpannya sebagai NULL, yang diizinkan CHECK, dan laporan menghitungnya bersama nilai kosong lainnya.
ENUM holding values outside its list
tanpa CHECK
Nilai yang tidak ada di daftar akan gagal di CHECK, jadi CHECK tidak dibuat.
Baris laporan: enum_check_skipped
SET
VARCHAR2 seperti yang ditulis MySQL ('a,b')
Oracle tidak punya tipe set; teksnya sama dengan yang dikembalikan MySQL.
JSON
CLOB
Fungsi JSON Oracle membaca JSON dari teks di setiap versi, dan CLOB menyimpan nilai dengan ukuran berapa pun.
NUL bytes in text
dipertahankan
VARCHAR2 dan CLOB bisa memuat karakter NUL, jadi nilainya disalin apa adanya.
text that isn't valid in its character set
byte yang rusak menjadi karakter pengganti
Teks harus dibaca sebagai karakter agar bisa ditulis sebagai VARCHAR2.
Baris laporan: invalid_utf8_replaced
text decoded twice (ñ)
disalin apa adanya
Dump berisi persis karakter ini, jadi karakter itu disalin; laporan menunjukkannya.
Baris laporan: mojibake_suspected
AUTO_INCREMENT
GENERATED BY DEFAULT ON NULL AS IDENTITY, dimulai ulang melewati id yang disalin
Id yang disalin dimuat apa adanya, dan penghitung berlanjut setelah id tertinggi atau AUTO_INCREMENT dari dump, mana yang lebih tinggi.
MyISAM AUTO_INCREMENT on the second column of a key
satu penghitung untuk tabel
MyISAM menghitung per grup kolom pertama kunci; Oracle punya satu penghitung per tabel.
Baris laporan: myisam_group_autoincrement
ON UPDATE CURRENT_TIMESTAMP
trigger BEFORE UPDATE
Trigger mengatur kolom ke waktu saat ini ketika pembaruan tidak mengaturnya.
Baris laporan: on_update_trigger
generated columns
kolom virtual
Oracle hanya menghitung kolom generated saat dibaca; kolom STORED menjadi virtual dengan nilai yang sama.
Baris laporan: stored_as_virtual
generated columns with functions Oracle lacks
kolom biasa
Rumus yang tidak bisa ditulis untuk Oracle menyisakan kolom biasa dan satu baris laporan.
Baris laporan: generated_not_translated
INVISIBLE columns
kolom INVISIBLE
Oracle menyembunyikan kolom tak terlihat dari SELECT * seperti MySQL.
CHECK constraints
diterjemahkan, langsung di CREATE TABLE
CHECK di dalam tabel diuji saat setiap baris dimuat.
CHECK constraints with functions Oracle lacks
tidak dibuat
CHECK yang tidak bisa ditulis untuk Oracle dihilangkan dan dilaporkan.
Baris laporan: check_skipped
CHECK ... NOT ENFORCED
tidak dibuat
MySQL menyimpan CHECK ini tanpa menerapkannya, jadi baris bisa melanggarnya.
Baris laporan: check_not_enforced
defaults with functions Oracle lacks
tanpa default
Default yang tidak bisa ditulis untuk Oracle dihilangkan dan dilaporkan.
Baris laporan: default_not_translated
keys and indexes on a prefix, c(20)
indeks pada SUBSTR kolom
Indeks fungsi pada awal kolom yang sama tetap membedakan baris yang sama, dan mengindeks kolom CLOB yang tidak bisa diindeks utuh oleh Oracle.
Baris laporan: prefix_unique
FULLTEXT indexes
tidak dibuat
Oracle Text membangun pencarian teks lengkap dengan tipe indeks dan kuerinya sendiri.
Baris laporan: fulltext_not_created
SPATIAL indexes
tidak dibuat
Geometri disimpan sebagai byte WKB, yang tidak bisa dibaca indeks spasial.
Baris laporan: spatial_index_not_created
functional indexes, and indexes on whole CLOB or BLOB columns
tidak dibuat
Oracle tidak bisa mengindeks objek besar secara utuh, dan beberapa fungsi MySQL tidak punya padanan di Oracle.
Baris laporan: index_skipped
foreign keys
setelah data ENABLE NOVALIDATE, lalu divalidasi dengan peringatan untuk baris yatim
Dump dimuat dengan FOREIGN_KEY_CHECKS=0 dan MyISAM tidak pernah memeriksa, jadi baris tanpa induk umum ditemukan. Key langsung memeriksa baris baru dan divalidasi terakhir; baris yatim membuatnya tetap tidak tervalidasi dengan peringatan, bukan menghentikan pemuatan.
ON UPDATE CASCADE, SET NULL or SET DEFAULT; ON DELETE SET DEFAULT
dihapus
Foreign key Oracle hanya bertindak saat penghapusan, dengan CASCADE atau SET NULL.
Baris laporan: foreign_key_action_unsupported
foreign keys to columns without a unique key
tidak dibuat
Oracle memerlukan primary key atau unique constraint pada kolom yang dirujuk; InnoDB tidak.
Baris laporan: foreign_key_skipped
table and column names
huruf besar jika berupa nama biasa, selain itu seperti ditulis
Oracle menyimpan nama yang ditulis tanpa tanda kutip dalam huruf besar, jadi nama biasa menjadi huruf besar dan kueri bisa tanpa tanda kutip; nama lain mempertahankan huruf besar-kecilnya dan memerlukan tanda kutip.
Baris laporan: identifier_renamed
names over 128 bytes
dipersingkat
Nama di Oracle 12.2 dan yang lebih baru memuat 128 byte.
Baris laporan: name_shortened
GEOMETRY, POINT, POLYGON...
BLOB berisi WKB
WKB adalah bentuk standar yang dibaca setiap pustaka spasial; SDO_GEOMETRY memerlukan metadata Oracle Spatial.
Baris laporan: geometry_as_blob
INET4, INET6, UUID (MariaDB)
VARCHAR2(39), VARCHAR2(36)
Oracle tidak punya kedua tipe itu; teksnya sama dengan yang dikembalikan MariaDB.
BINARY, VARBINARY, BLOB
RAW sampai 2000 byte, selain itu BLOB
Byte tetap byte.
PARTITION BY
satu tabel
Barisnya sama; partisi ulang tabel di Oracle jika diperlukan.
Baris laporan: partitions_dropped
WITH SYSTEM VERSIONING (MariaDB)
tabel dengan baris saat ini
Dump hanya berisi baris saat ini.
Baris laporan: system_versioning_dropped
MyISAM, MEMORY and other engines
tabel biasa
Oracle punya satu engine tabel.
Baris laporan: engine_dropped
views, triggers, procedures, functions and events
dicantumkan di laporan
Kodenya ditulis dalam bahasa MySQL, jadi dicantumkan agar Anda bisa membuatnya ulang.
Baris laporan: not_converted_objects
dumps without CREATE TABLE
tipe dibaca dari nilai
Dump yang dibuat dengan --no-create-info hanya berisi baris, jadi tipenya diambil dari nilai.
Baris laporan: no_schema
geometries in a dump without CREATE TABLE
BLOB berisi WKB
Format geometri MySQL dikenali dari nilainya dan disimpan sebagai WKB standar.
Baris laporan: geometry_inferred
_ci collations
perbandingan persis
Oracle membandingkan teks secara persis kecuali diminta lain.
Baris laporan: case_insensitive_collation
SET NAMES utf8 from utf8mb4 tables
dikonversi, dengan peringatan
mysqldump di MySQL 5.x secara default menulis utf8 3 byte dan mengganti setiap emoji dengan tanda tanya sebelum konverter mana pun melihat file itu.
Baris laporan: dump_lost_four_byte_chars
dumps without SET NAMES whose text isn't UTF-8
dibaca sebagai Latin-1 (Windows-1252)
latin1 di MySQL adalah Windows-1252, pengodean yang biasa dipakai dump semacam itu.
Baris laporan: charset_guessed
sjis, cp932, gbk, big5 dumps
dibaca sebagai UTF-8, dengan peringatan
Pengodean ini belum didekode.
Baris laporan: unsupported_charset
UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rows
dievaluasi
Beberapa alat dump menulis nilai sebagai panggilan ini; panggilan itu dibaca sebagai nilai yang dihasilkannya, dengan WKT geografis diubah agar longitude lebih dulu.
other expressions in rows
NULL
Konverter yang tidak menjalankan database tidak bisa mengevaluasinya.
Baris laporan: expression_value
DEFAULT in VALUES
nilai default kolom
Default literal disalin ke baris.
Baris laporan: default_keyword_filled
DEFAULT in VALUES without a literal default
NULL
Tidak ada nilai untuk disalin.
Baris laporan: default_keyword_null
REPLACE and INSERT IGNORE
baris biasa
Dump punya satu baris per kunci, jadi barisnya sama.
Baris laporan: replace_as_insert
types IntoSQL doesn't know
CLOB
Text memuat nilai apa pun; ubah tipenya setelah pemuatan.
Baris laporan: unknown_type
values that don't fit their column
NULL
Dump yang rusak atau ditulis manual bisa berisi nilai yang tidak muat di kolomnya; nilai itu menjadi NULL agar sisanya tetap dimuat.
Baris laporan: invalid_value_null
unreadable geometries
NULL
Byte yang bukan geometri tidak bisa disimpan sebagai geometri.
Baris laporan: bad_geometry
dumps of several databases
satu skema, setiap tabel diberi nama database-nya di depan
Skrip dimuat ke skema milik pengguna yang menjalankannya, jadi tabel dari database berbeda diberi nama database-nya di depan.
Baris laporan: databases_merged
CREATE SEQUENCE (MariaDB)
CREATE SEQUENCE, pada nilai yang sudah dicapai
Sequence Oracle bekerja dengan cara yang sama.
VECTOR(n) (MariaDB 11.7+)
CLOB dengan float sebagai array JSON
Hanya Oracle 23ai yang punya tipe vektor; array JSON mempertahankan setiap float di setiap versi.
Baris laporan: type_replaced
| Di MariaDB | 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 di MySQL adalah TINYINT(1) yang bisa berisi angka apa pun dari -128 sampai 127. Oracle sebelum 23ai tidak punya kolom boolean, jadi kolom berisi 0 dan 1 menjadi NUMBER(1) dengan CHECK; kolom yang berisi 2 atau -1 mempertahankan angkanya. | bool_kept_numeric |
| UNSIGNED integers | NUMBER yang cukup lebar untuk rentangnya, dengan CHECK bahwa nilainya tidak negatifNUMBER di Oracle memuat bilangan bulat dengan lebar apa pun yang ada di MySQL; CHECK mencegah nilai negatif seperti di MySQL. | |
| ZEROFILL and display widths | dihapusIsian nol adalah cara menampilkan angka, bukan bagian dari angka. Angkanya dipertahankan; format saat dibaca jika isian itu penting. | zerofill_dropped |
| FLOAT(M,D) | BINARY_FLOAT atau BINARY_DOUBLE, tanpa skalaBilangan floating-point biner Oracle tidak punya skala tetap. Nilai yang tersimpan disalin apa adanya. | float_scale_dropped |
| DECIMAL(p,s) | NUMBER(p,s) sampai 38 digit; VARCHAR2 jika lebihNUMBER di Oracle memuat 38 digit. Desimal yang lebih lebar disimpan sebagai teks agar setiap digit tetap tepat. | decimal_as_text |
| BIT(1), BIT(n) | NUMBER(1), NUMBER(19) sampai 63 bit, NUMBER(20) untuk BIT(64)Field bit disimpan sebagai angka yang dibentuk bit-bitnya. | |
| zero, partial or impossible dates (0000-00-00, 2024-02-30) | NULLOracle hanya menyimpan tanggal kalender yang nyata. MySQL menyimpan tanggal nol dan mustahil jika mode SQL-nya mengizinkan; tanggal itu menjadi NULL dan laporan menghitungnya. | invalid_date_null |
| NOT NULL columns with values that become NULL | NOT NULL dihapusKolom yang nilainya harus menjadi NULL, termasuk string kosong, tidak bisa mempertahankan NOT NULL, atau pemuatan akan berhenti. | not_null_relaxed |
| empty strings and empty binary values | NULLOracle menyimpan string kosong sebagai NULL, jadi nilai yang tadinya ' terbaca sebagai NULL. Laporan menghitungnya per kolom. | empty_string_null |
| DEFAULT '0000-00-00' | tanpa defaultDefault yang tidak bisa disimpan Oracle dihilangkan, bukan diganti dengan tanggal karangan. | zero_date_default |
| TIME | INTERVAL DAY TO SECOND, yang memuat durasiOracle tidak punya tipe jam dalam sehari, dan TIME di MySQL adalah durasi dari -838:59:59 sampai 838:59:59; interval memuat setiap nilai. | |
| YEAR | NUMBER(4) dengan CHECK rentangnyaOracle tidak punya tipe tahun; CHECK mempertahankan nilai yang sama dengan yang diizinkan MySQL. | |
| CHAR(n), VARCHAR(n) | VARCHAR2(n CHAR), menghitung karakterPanjang dihitung dalam karakter seperti di MySQL, dan MySQL mengembalikan nilai CHAR tanpa spasi di akhir, sebagaimana VARCHAR2 menyimpannya. | |
| VARCHAR(n) and TEXT longer than 4000 bytes | CLOBVARCHAR2 memuat 4000 byte secara default, jadi teks yang lebih panjang menjadi CLOB; kolom yang semua nilainya muat tetap VARCHAR2. | text_as_lob |
| DATETIME | TIMESTAMPDATETIME adalah pembacaan jam dinding tanpa zona waktu, seperti TIMESTAMP. DATE menjadi DATE milik Oracle, yang juga memuat jam yang tetap tengah malam. | |
| TIMESTAMP | TIMESTAMP WITH TIME ZONE dalam zona yang disebutkan dump, UTC jika tidak disebutkanTIMESTAMP adalah satu momen. Dump menyebutkan zona tempat nilainya ditulis (mysqldump menulis UTC); tanpa itu, nilainya dibaca sebagai UTC dan laporan menyebutkannya. | timestamp_zone_assumed |
| ENUM | VARCHAR2 dengan CHECK nilainyaText dengan CHECK mempertahankan nilai yang sama. | |
| ENUM holding '' (MySQL's error value) | NULLMySQL menyimpan string kosong saat nilai tidak valid masuk ke ENUM dalam mode SQL yang longgar. Oracle menyimpannya sebagai NULL, yang diizinkan CHECK, dan laporan menghitungnya bersama nilai kosong lainnya. | |
| ENUM holding values outside its list | tanpa CHECKNilai yang tidak ada di daftar akan gagal di CHECK, jadi CHECK tidak dibuat. | enum_check_skipped |
| SET | VARCHAR2 seperti yang ditulis MySQL ('a,b')Oracle tidak punya tipe set; teksnya sama dengan yang dikembalikan MySQL. | |
| JSON | CLOBFungsi JSON Oracle membaca JSON dari teks di setiap versi, dan CLOB menyimpan nilai dengan ukuran berapa pun. | |
| NUL bytes in text | dipertahankanVARCHAR2 dan CLOB bisa memuat karakter NUL, jadi nilainya disalin apa adanya. | |
| text that isn't valid in its character set | byte yang rusak menjadi karakter penggantiTeks harus dibaca sebagai karakter agar bisa ditulis sebagai VARCHAR2. | invalid_utf8_replaced |
| text decoded twice (ñ) | disalin apa adanyaDump berisi persis karakter ini, jadi karakter itu disalin; laporan menunjukkannya. | mojibake_suspected |
| AUTO_INCREMENT | GENERATED BY DEFAULT ON NULL AS IDENTITY, dimulai ulang melewati id yang disalinId yang disalin dimuat apa adanya, dan penghitung berlanjut setelah id tertinggi atau AUTO_INCREMENT dari dump, mana yang lebih tinggi. | |
| MyISAM AUTO_INCREMENT on the second column of a key | satu penghitung untuk tabelMyISAM menghitung per grup kolom pertama kunci; Oracle punya satu penghitung per tabel. | myisam_group_autoincrement |
| ON UPDATE CURRENT_TIMESTAMP | trigger BEFORE UPDATETrigger mengatur kolom ke waktu saat ini ketika pembaruan tidak mengaturnya. | on_update_trigger |
| generated columns | kolom virtualOracle hanya menghitung kolom generated saat dibaca; kolom STORED menjadi virtual dengan nilai yang sama. | stored_as_virtual |
| generated columns with functions Oracle lacks | kolom biasaRumus yang tidak bisa ditulis untuk Oracle menyisakan kolom biasa dan satu baris laporan. | generated_not_translated |
| INVISIBLE columns | kolom INVISIBLEOracle menyembunyikan kolom tak terlihat dari SELECT * seperti MySQL. | |
| CHECK constraints | diterjemahkan, langsung di CREATE TABLECHECK di dalam tabel diuji saat setiap baris dimuat. | |
| CHECK constraints with functions Oracle lacks | tidak dibuatCHECK yang tidak bisa ditulis untuk Oracle dihilangkan dan dilaporkan. | check_skipped |
| CHECK ... NOT ENFORCED | tidak dibuatMySQL menyimpan CHECK ini tanpa menerapkannya, jadi baris bisa melanggarnya. | check_not_enforced |
| defaults with functions Oracle lacks | tanpa defaultDefault yang tidak bisa ditulis untuk Oracle dihilangkan dan dilaporkan. | default_not_translated |
| keys and indexes on a prefix, c(20) | indeks pada SUBSTR kolomIndeks fungsi pada awal kolom yang sama tetap membedakan baris yang sama, dan mengindeks kolom CLOB yang tidak bisa diindeks utuh oleh Oracle. | prefix_unique |
| FULLTEXT indexes | tidak dibuatOracle Text membangun pencarian teks lengkap dengan tipe indeks dan kuerinya sendiri. | fulltext_not_created |
| SPATIAL indexes | tidak dibuatGeometri disimpan sebagai byte WKB, yang tidak bisa dibaca indeks spasial. | spatial_index_not_created |
| functional indexes, and indexes on whole CLOB or BLOB columns | tidak dibuatOracle tidak bisa mengindeks objek besar secara utuh, dan beberapa fungsi MySQL tidak punya padanan di Oracle. | index_skipped |
| foreign keys | setelah data ENABLE NOVALIDATE, lalu divalidasi dengan peringatan untuk baris yatimDump dimuat dengan FOREIGN_KEY_CHECKS=0 dan MyISAM tidak pernah memeriksa, jadi baris tanpa induk umum ditemukan. Key langsung memeriksa baris baru dan divalidasi terakhir; baris yatim membuatnya tetap tidak tervalidasi dengan peringatan, bukan menghentikan pemuatan. | |
| ON UPDATE CASCADE, SET NULL or SET DEFAULT; ON DELETE SET DEFAULT | dihapusForeign key Oracle hanya bertindak saat penghapusan, dengan CASCADE atau SET NULL. | foreign_key_action_unsupported |
| foreign keys to columns without a unique key | tidak dibuatOracle memerlukan primary key atau unique constraint pada kolom yang dirujuk; InnoDB tidak. | foreign_key_skipped |
| table and column names | huruf besar jika berupa nama biasa, selain itu seperti ditulisOracle menyimpan nama yang ditulis tanpa tanda kutip dalam huruf besar, jadi nama biasa menjadi huruf besar dan kueri bisa tanpa tanda kutip; nama lain mempertahankan huruf besar-kecilnya dan memerlukan tanda kutip. | identifier_renamed |
| names over 128 bytes | dipersingkatNama di Oracle 12.2 dan yang lebih baru memuat 128 byte. | name_shortened |
| GEOMETRY, POINT, POLYGON... | BLOB berisi WKBWKB adalah bentuk standar yang dibaca setiap pustaka spasial; SDO_GEOMETRY memerlukan metadata Oracle Spatial. | geometry_as_blob |
| INET4, INET6, UUID (MariaDB) | VARCHAR2(39), VARCHAR2(36)Oracle tidak punya kedua tipe itu; teksnya sama dengan yang dikembalikan MariaDB. | |
| BINARY, VARBINARY, BLOB | RAW sampai 2000 byte, selain itu BLOBByte tetap byte. | |
| PARTITION BY | satu tabelBarisnya sama; partisi ulang tabel di Oracle jika diperlukan. | partitions_dropped |
| WITH SYSTEM VERSIONING (MariaDB) | tabel dengan baris saat iniDump hanya berisi baris saat ini. | system_versioning_dropped |
| MyISAM, MEMORY and other engines | tabel biasaOracle punya satu engine tabel. | engine_dropped |
| views, triggers, procedures, functions and events | dicantumkan di laporanKodenya ditulis dalam bahasa MySQL, jadi dicantumkan agar Anda bisa membuatnya ulang. | not_converted_objects |
| dumps without CREATE TABLE | tipe dibaca dari nilaiDump yang dibuat dengan --no-create-info hanya berisi baris, jadi tipenya diambil dari nilai. | no_schema |
| geometries in a dump without CREATE TABLE | BLOB berisi WKBFormat geometri MySQL dikenali dari nilainya dan disimpan sebagai WKB standar. | geometry_inferred |
| _ci collations | perbandingan persisOracle membandingkan teks secara persis kecuali diminta lain. | case_insensitive_collation |
| SET NAMES utf8 from utf8mb4 tables | dikonversi, dengan peringatanmysqldump di MySQL 5.x secara default menulis utf8 3 byte dan mengganti setiap emoji dengan tanda tanya sebelum konverter mana pun melihat file itu. | dump_lost_four_byte_chars |
| dumps without SET NAMES whose text isn't UTF-8 | dibaca sebagai Latin-1 (Windows-1252)latin1 di MySQL adalah Windows-1252, pengodean yang biasa dipakai dump semacam itu. | charset_guessed |
| sjis, cp932, gbk, big5 dumps | dibaca sebagai UTF-8, dengan peringatanPengodean ini belum didekode. | unsupported_charset |
| UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rows | dievaluasiBeberapa alat dump menulis nilai sebagai panggilan ini; panggilan itu dibaca sebagai nilai yang dihasilkannya, dengan WKT geografis diubah agar longitude lebih dulu. | |
| other expressions in rows | NULLKonverter yang tidak menjalankan database tidak bisa mengevaluasinya. | expression_value |
| DEFAULT in VALUES | nilai default kolomDefault literal disalin ke baris. | default_keyword_filled |
| DEFAULT in VALUES without a literal default | NULLTidak ada nilai untuk disalin. | default_keyword_null |
| REPLACE and INSERT IGNORE | baris biasaDump punya satu baris per kunci, jadi barisnya sama. | replace_as_insert |
| types IntoSQL doesn't know | CLOBText memuat nilai apa pun; ubah tipenya setelah pemuatan. | unknown_type |
| values that don't fit their column | NULLDump yang rusak atau ditulis manual bisa berisi nilai yang tidak muat di kolomnya; nilai itu menjadi NULL agar sisanya tetap dimuat. | invalid_value_null |
| unreadable geometries | NULLByte yang bukan geometri tidak bisa disimpan sebagai geometri. | bad_geometry |
| dumps of several databases | satu skema, setiap tabel diberi nama database-nya di depanSkrip dimuat ke skema milik pengguna yang menjalankannya, jadi tabel dari database berbeda diberi nama database-nya di depan. | databases_merged |
| CREATE SEQUENCE (MariaDB) | CREATE SEQUENCE, pada nilai yang sudah dicapaiSequence Oracle bekerja dengan cara yang sama. | |
| VECTOR(n) (MariaDB 11.7+) | CLOB dengan float sebagai array JSONHanya Oracle 23ai yang punya tipe vektor; array JSON mempertahankan setiap float di setiap versi. | 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.
NLS_LANG=.AL32UTF8 sqlplus -S -L user@//localhost/mydb @mariadb.oracle.sqlForeign 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 MariaDB 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 utf8mb3 sebelum konverter melihatnya.
- --hex-blob menulis kolom biner dan nilai VECTOR 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 MariaDB sendiri. Semuanya dicantumkan di laporan berdasarkan nama, tidak pernah dibuang diam-diam, sehingga Anda bisa menulis ulang untuk Oracle.
Pertanyaan tentang MariaDB ke Oracle
Tidak terjawab di sini? Tulis ke kami dari halaman kontak, dan seseorang akan membalas. Halaman kontak
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.
Dump dari versi MariaDB mana yang bisa dipakai?
Dump dari mariadb-dump dan mysqldump di MariaDB 10.3 sampai 12, dengan satu INSERT per tabel atau satu per baris. Setiap dump uji berasal dari MariaDB 10.11, 11.4, dan 11.8 dan dibandingkan dengan sumbernya sel demi sel.
Apakah kolom UUID, INET6, JSON, dan VECTOR dipertahankan?
Kolom UUID dan INET menjadi VARCHAR2, JSON menjadi CLOB, dan VECTOR menjadi array JSON berisi float-nya. Tanggal nol menjadi NULL, begitu juga string kosong, seperti yang disimpan Oracle.
Apakah nilai AUTO_INCREMENT dan sequence dipertahankan?
Ya. Setiap kolom AUTO_INCREMENT menjadi kolom identity yang berlanjut setelah id tertinggi. Sequence menjadi sequence Oracle, dan default yang mengambil nilai dari sequence tetap mengambil dari sana.
Bagaimana dengan stored procedure dan trigger?
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 dump uji dimuat di 21c dan 23ai, dan berhenti di galat pertama jika ada yang salah.