Chuyển đến nội dung
Trang chủ IntoSQL

Chuyển MariaDB sang Oracle

Thả bản dump từ mariadb-dump, mysqldump, phpMyAdmin hoặc Adminer, dạng .sql hoặc .sql.gz, và tải xuống tập lệnh Oracle với cùng bảng, khóa, chỉ mục và dữ liệu. Mọi giá trị Oracle không chứa được nguyên trạng, và mọi đối tượng nó không hỗ trợ, đều được liệt kê trong báo cáo.

Tệp của bạn
sqlshop_2024_mariadb.sqlTệp mẫu, 6,6 kB
Cơ sở dữ liệu của bạn

Đã chuyển đổi 18 hàng, 4 bản sửa, không hàng nào bị từ chối

Hiển thị

Các bảng trong shop_2024_mariadb.sqlBản dump MariaDB 11.8.9-MariaDB-ubu2404 · do mariadb-dump ghi · utf8mb4

  • customersghi thành CUSTOMERS8 hàng2
    8 cột
    IDNUMBER(10) not null
    NAMEVARCHAR2(100 CHAR) not null
    EMAILVARCHAR2(150 CHAR) not null
    COUNTRYVARCHAR2(2 CHAR) not null
    IS_ACTIVENUMBER(1) not null
    SIGNED_UPDATE
    CREATED_ATTIMESTAMP(0) WITH TIME ZONE not null
    LAST_IPVARCHAR2(39 CHAR)
  • ordersghi thành ORDERS10 hàng2
    12 cột
    IDNUMBER(10) not null
    CUSTOMER_IDNUMBER(10) not null
    STATUSVARCHAR2(9 CHAR)
    TOTALNUMBER(10,2) not null
    ITEMSNUMBER(5) not null
    ORDERED_ATTIMESTAMP(0) not null
    SHIPPED_ATTIMESTAMP(0)
    NOTEVARCHAR2(255 CHAR)
    ORDER_REFVARCHAR2(36 CHAR) not null
    INVOICENUMBER(10) not null
    DETAILSCLOB
    UPDATED_ATTIMESTAMP(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;

Bản sửa

  1. "signed_up" của customers giờ cho phép NULL: một số giá trị không lưu được và là NULL.
  2. Giá trị mặc định của "signed_up" trong customers, 0000‑00‑00, không phải ngày Oracle chấp nhận, nên cột không có giá trị mặc định.
  3. "status" của orders giờ cho phép NULL: một số giá trị không lưu được và là NULL.
  4. "updated_at" của orders đổi thành thời điểm hiện tại mỗi lần cập nhật; trong Oracle, một trình kích hoạt làm việc đó.

Cần xem lại

  • 1 giá trị trong "signed_up" của customers là ngày bằng 0 hoặc không hợp lệ, như 0000‑00‑00, mà Oracle không lưu được, nên được đặt thành NULL. Nếu các ngày đó có ý nghĩa, hãy thay chúng bằng ngày thật trong nguồn trước khi tạo bản dump.
  • 1 giá trị trong "shipped_at" của orders là ngày bằng 0 hoặc không hợp lệ, như 0000‑00‑00 00:00:00, mà Oracle không lưu được, nên được đặt thành NULL. Nếu các ngày đó có ý nghĩa, hãy thay chúng bằng ngày thật trong nguồn trước khi tạo bản dump.
  • 1 giá trị rỗng trong "status" của orders đã thành NULL; Oracle lưu chuỗi rỗng dưới dạng NULL. Ở chỗ truy vấn so sánh cột này với ', hãy dùng IS NULL thay thế.

Tệp được chuyển đổi ngay trên máy tính này và không bao giờ được tải lên.

Mẫu khác:

Những gì thay đổi từ MariaDB sang Oracle

Mỗi hàng là một quy tắc trình chuyển đổi áp dụng, kèm dòng báo cáo được ghi khi quy tắc thay đổi dữ liệu của bạn.

  • TINYINT(1), BOOL

    NUMBER(1) kèm CHECK 0 và 1 khi mọi giá trị là 0 hoặc 1, nếu không thì NUMBER(3)

    BOOL của MySQL là TINYINT(1), chứa được mọi số từ -128 đến 127. Oracle trước 23ai không có cột boolean, nên cột chỉ gồm 0 và 1 là NUMBER(1) kèm ràng buộc kiểm tra; cột chứa 2 hoặc -1 giữ các số của nó.

    Dòng báo cáo: bool_kept_numeric

  • UNSIGNED integers

    NUMBER đủ rộng cho phạm vi, kèm CHECK không âm

    NUMBER của Oracle chứa được mọi số nguyên thuộc các độ rộng MySQL có; ràng buộc kiểm tra chặn giá trị âm như MySQL.

  • ZEROFILL and display widths

    bị bỏ

    Thêm số 0 phía trước là cách hiển thị số, không phải một phần của số. Các số được giữ; hãy định dạng khi đọc nếu cần phần số 0 đó.

    Dòng báo cáo: zerofill_dropped

  • FLOAT(M,D)

    BINARY_FLOAT hoặc BINARY_DOUBLE, bỏ số chữ số thập phân cố định

    Số dấu phẩy động nhị phân của Oracle không có số chữ số thập phân cố định. Giá trị đã lưu được sao chép nguyên trạng.

    Dòng báo cáo: float_scale_dropped

  • DECIMAL(p,s)

    NUMBER(p,s) đến 38 chữ số; vượt quá thì VARCHAR2

    NUMBER của Oracle chứa 38 chữ số. Số thập phân rộng hơn được giữ dạng văn bản để mọi chữ số đều chính xác.

    Dòng báo cáo: decimal_as_text

  • BIT(1), BIT(n)

    NUMBER(1), NUMBER(19) đến 63 bit, NUMBER(20) cho BIT(64)

    Trường bit được lưu thành số do các bit của nó tạo nên.

  • zero, partial or impossible dates (0000-00-00, 2024-02-30)

    NULL

    Oracle chỉ lưu ngày có thật trên lịch. MySQL giữ ngày bằng 0 và ngày không hợp lệ khi chế độ SQL cho phép; chúng trở thành NULL và báo cáo đếm số lượng.

    Dòng báo cáo: invalid_date_null

  • NOT NULL columns with values that become NULL

    bỏ NOT NULL

    Cột có giá trị phải chuyển thành NULL, kể cả chuỗi rỗng, không thể giữ NOT NULL, nếu không quá trình nạp sẽ dừng.

    Dòng báo cáo: not_null_relaxed

  • empty strings and empty binary values

    NULL

    Oracle lưu chuỗi rỗng dưới dạng NULL, nên giá trị từng là ' sẽ được đọc lại là NULL. Báo cáo đếm chúng theo từng cột.

    Dòng báo cáo: empty_string_null

  • DEFAULT '0000-00-00'

    không có giá trị mặc định

    Giá trị mặc định mà Oracle không lưu được sẽ bị bỏ, thay vì thay bằng một ngày bịa ra.

    Dòng báo cáo: zero_date_default

  • TIME

    INTERVAL DAY TO SECOND, chứa được khoảng thời gian

    Oracle không có kiểu giờ trong ngày, và TIME của MySQL là khoảng thời gian từ -838:59:59 đến 838:59:59; interval chứa được mọi giá trị.

  • YEAR

    NUMBER(4) kèm CHECK phạm vi

    Oracle không có kiểu năm; ràng buộc kiểm tra giữ đúng các giá trị MySQL cho phép.

  • CHAR(n), VARCHAR(n)

    VARCHAR2(n CHAR), đếm theo ký tự

    Độ dài được đếm theo ký tự như MySQL, và MySQL trả về giá trị CHAR không có khoảng trắng cuối, đúng như VARCHAR2 giữ chúng.

  • VARCHAR(n) and TEXT longer than 4000 bytes

    CLOB

    VARCHAR2 mặc định chứa 4000 byte, nên văn bản dài hơn là CLOB; cột có mọi giá trị vừa thì giữ VARCHAR2.

    Dòng báo cáo: text_as_lob

  • DATETIME

    TIMESTAMP

    DATETIME là thời gian theo đồng hồ, không kèm múi giờ, giống TIMESTAMP. DATE trở thành DATE của Oracle, kiểu này cũng chứa giờ trong ngày, luôn là nửa đêm.

  • TIMESTAMP

    TIMESTAMP WITH TIME ZONE theo múi giờ bản dump nêu, UTC khi không nêu

    TIMESTAMP là một thời điểm. Bản dump nêu múi giờ đã dùng khi ghi (mysqldump ghi UTC); nếu không, giá trị được đọc theo UTC và báo cáo ghi rõ điều đó.

    Dòng báo cáo: timestamp_zone_assumed

  • ENUM

    VARCHAR2 kèm CHECK các giá trị

    Văn bản kèm ràng buộc kiểm tra giữ đúng các giá trị.

  • ENUM holding '' (MySQL's error value)

    NULL

    MySQL lưu chuỗi rỗng khi một giá trị không hợp lệ được ghi vào ENUM ở chế độ SQL không nghiêm ngặt. Oracle lưu nó dưới dạng NULL, ràng buộc kiểm tra cho phép, và báo cáo đếm nó cùng các giá trị rỗng khác.

  • ENUM holding values outside its list

    không có CHECK

    Giá trị không có trong danh sách sẽ vi phạm ràng buộc kiểm tra, nên ràng buộc không được tạo.

    Dòng báo cáo: enum_check_skipped

  • SET

    VARCHAR2 như MySQL ghi ('a,b')

    Oracle không có kiểu tập hợp; văn bản là chuỗi MySQL trả về.

  • JSON

    CLOB

    Hàm JSON của Oracle đọc JSON từ văn bản trên mọi phiên bản, và CLOB giữ được giá trị ở mọi kích thước.

  • NUL bytes in text

    được giữ

    VARCHAR2 và CLOB chứa được ký tự NUL, nên giá trị được sao chép nguyên trạng.

  • text that isn't valid in its character set

    byte lỗi thành ký tự thay thế

    Văn bản phải được đọc thành ký tự thì mới ghi được dưới dạng VARCHAR2.

    Dòng báo cáo: invalid_utf8_replaced

  • text decoded twice (ñ)

    sao chép nguyên trạng

    Bản dump chứa đúng các ký tự này, nên chúng được sao chép; báo cáo chỉ ra chúng.

    Dòng báo cáo: mojibake_suspected

  • AUTO_INCREMENT

    GENERATED BY DEFAULT ON NULL AS IDENTITY, khởi động lại sau các id đã sao chép

    Các id đã sao chép được nạp nguyên trạng, và bộ đếm tiếp tục sau id lớn nhất hoặc AUTO_INCREMENT của bản dump, tùy giá trị nào lớn hơn.

  • MyISAM AUTO_INCREMENT on the second column of a key

    một bộ đếm cho cả bảng

    MyISAM đếm theo nhóm của cột đầu tiên trong khóa; Oracle có một bộ đếm cho mỗi bảng.

    Dòng báo cáo: myisam_group_autoincrement

  • ON UPDATE CURRENT_TIMESTAMP

    một trình kích hoạt BEFORE UPDATE

    Trình kích hoạt đặt cột thành thời điểm hiện tại khi lệnh cập nhật không đặt nó.

    Dòng báo cáo: on_update_trigger

  • generated columns

    cột ảo

    Oracle chỉ tính cột tính toán khi đọc; cột STORED trở thành cột ảo với cùng giá trị.

    Dòng báo cáo: stored_as_virtual

  • generated columns with functions Oracle lacks

    một cột thường

    Công thức không viết được cho Oracle để lại một cột thường và một dòng trong báo cáo.

    Dòng báo cáo: generated_not_translated

  • INVISIBLE columns

    cột INVISIBLE

    Oracle ẩn cột ẩn khỏi SELECT * như MySQL.

  • CHECK constraints

    được chuyển đổi, viết trực tiếp trong CREATE TABLE

    Ràng buộc kiểm tra viết trực tiếp được kiểm tra khi từng hàng được nạp.

  • CHECK constraints with functions Oracle lacks

    không được tạo

    Ràng buộc kiểm tra không viết được cho Oracle sẽ bị bỏ và được báo cáo.

    Dòng báo cáo: check_skipped

  • CHECK ... NOT ENFORCED

    không được tạo

    MySQL giữ các ràng buộc kiểm tra này nhưng không áp dụng, nên các hàng có thể vi phạm chúng.

    Dòng báo cáo: check_not_enforced

  • defaults with functions Oracle lacks

    không có giá trị mặc định

    Giá trị mặc định không viết được cho Oracle sẽ bị bỏ và được báo cáo.

    Dòng báo cáo: default_not_translated

  • keys and indexes on a prefix, c(20)

    chỉ mục trên SUBSTR của cột

    Chỉ mục hàm trên cùng phần đầu của cột giữ các hàng không trùng nhau như cũ, và lập chỉ mục được cột CLOB mà Oracle không lập chỉ mục toàn bộ được.

    Dòng báo cáo: prefix_unique

  • FULLTEXT indexes

    không được tạo

    Oracle Text xây dựng tìm kiếm toàn văn với kiểu chỉ mục và truy vấn riêng.

    Dòng báo cáo: fulltext_not_created

  • SPATIAL indexes

    không được tạo

    Dữ liệu hình học được lưu dưới dạng byte WKB, mà chỉ mục không gian không đọc được.

    Dòng báo cáo: spatial_index_not_created

  • functional indexes, and indexes on whole CLOB or BLOB columns

    không được tạo

    Oracle không lập chỉ mục toàn bộ một đối tượng lớn được, và một số hàm MySQL không có hàm tương đương trong Oracle.

    Dòng báo cáo: index_skipped

  • foreign keys

    sau dữ liệu với ENABLE NOVALIDATE, rồi xác thực kèm cảnh báo về hàng mồ côi

    Bản dump nạp với FOREIGN_KEY_CHECKS=0 và MyISAM không bao giờ kiểm tra, nên hàng không có hàng cha là chuyện thường. Khóa kiểm tra hàng mới ngay và được xác thực sau cùng; hàng mồ côi khiến khóa ở trạng thái chưa xác thực kèm cảnh báo thay vì dừng quá trình nạp.

  • ON UPDATE CASCADE, SET NULL or SET DEFAULT; ON DELETE SET DEFAULT

    bị bỏ

    Khóa ngoại của Oracle chỉ hành động khi xóa, với CASCADE hoặc SET NULL.

    Dòng báo cáo: foreign_key_action_unsupported

  • foreign keys to columns without a unique key

    không được tạo

    Oracle cần khóa chính hoặc ràng buộc duy nhất trên các cột được tham chiếu; InnoDB thì không.

    Dòng báo cáo: foreign_key_skipped

  • table and column names

    chữ hoa khi là tên thông thường, nếu không thì như đã viết

    Oracle lưu tên viết không có dấu ngoặc kép bằng chữ hoa, nên tên thông thường thành chữ hoa và truy vấn có thể bỏ dấu ngoặc kép; các tên khác giữ hoa thường và cần dấu ngoặc kép.

    Dòng báo cáo: identifier_renamed

  • names over 128 bytes

    rút ngắn

    Tên trong Oracle 12.2 trở lên tối đa 128 byte.

    Dòng báo cáo: name_shortened

  • GEOMETRY, POINT, POLYGON...

    BLOB chứa WKB

    WKB là dạng chuẩn mà mọi thư viện không gian đều đọc được; SDO_GEOMETRY cần metadata của Oracle Spatial.

    Dòng báo cáo: geometry_as_blob

  • INET4, INET6, UUID (MariaDB)

    VARCHAR2(39), VARCHAR2(36)

    Oracle không có kiểu nào trong hai kiểu này; văn bản là chuỗi MariaDB trả về.

  • BINARY, VARBINARY, BLOB

    RAW đến 2000 byte, nếu không thì BLOB

    Byte vẫn là byte.

  • PARTITION BY

    một bảng

    Các hàng giữ nguyên; hãy phân vùng lại bảng trong Oracle nếu cần.

    Dòng báo cáo: partitions_dropped

  • WITH SYSTEM VERSIONING (MariaDB)

    bảng chứa các hàng hiện tại

    Bản dump chỉ chứa các hàng hiện tại.

    Dòng báo cáo: system_versioning_dropped

  • MyISAM, MEMORY and other engines

    bảng thường

    Oracle có một engine bảng duy nhất.

    Dòng báo cáo: engine_dropped

  • views, triggers, procedures, functions and events

    được liệt kê trong báo cáo

    Mã của chúng viết bằng ngôn ngữ của MySQL, nên được liệt kê để bạn tạo lại.

    Dòng báo cáo: not_converted_objects

  • dumps without CREATE TABLE

    kiểu suy ra từ giá trị

    Bản dump tạo với --no-create-info chỉ có các hàng, nên kiểu được suy ra từ giá trị.

    Dòng báo cáo: no_schema

  • geometries in a dump without CREATE TABLE

    BLOB chứa WKB

    Định dạng hình học của MySQL được nhận diện từ giá trị và lưu dưới dạng WKB chuẩn.

    Dòng báo cáo: geometry_inferred

  • _ci collations

    so sánh chính xác

    Oracle so sánh văn bản chính xác, trừ khi được chỉ định khác.

    Dòng báo cáo: case_insensitive_collation

  • SET NAMES utf8 from utf8mb4 tables

    được chuyển đổi, kèm cảnh báo

    mysqldump của MySQL 5.x mặc định ghi utf8 3 byte và thay mọi emoji bằng dấu chấm hỏi trước khi bất kỳ trình chuyển đổi nào thấy tệp.

    Dòng báo cáo: dump_lost_four_byte_chars

  • dumps without SET NAMES whose text isn't UTF-8

    đọc dưới dạng Latin-1 (Windows-1252)

    latin1 của MySQL là Windows-1252, bảng mã thường gặp của những bản dump như vậy.

    Dòng báo cáo: charset_guessed

  • sjis, cp932, gbk, big5 dumps

    đọc dưới dạng UTF-8, kèm cảnh báo

    Các bảng mã này chưa được giải mã.

    Dòng báo cáo: unsupported_charset

  • UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rows

    được tính ra giá trị

    Một số công cụ dump ghi giá trị dưới dạng các lệnh gọi này; chúng được đọc thành giá trị mà chúng tạo ra, với WKT địa lý được chuyển sang kinh độ trước.

  • other expressions in rows

    NULL

    Trình chuyển đổi không chạy cơ sở dữ liệu thì không tính được chúng.

    Dòng báo cáo: expression_value

  • DEFAULT in VALUES

    giá trị mặc định của cột

    Giá trị mặc định dạng hằng được sao chép vào hàng.

    Dòng báo cáo: default_keyword_filled

  • DEFAULT in VALUES without a literal default

    NULL

    Không có giá trị nào để sao chép.

    Dòng báo cáo: default_keyword_null

  • REPLACE and INSERT IGNORE

    hàng thường

    Bản dump có một hàng cho mỗi khóa, nên các hàng vẫn giống nhau.

    Dòng báo cáo: replace_as_insert

  • types IntoSQL doesn't know

    CLOB

    Văn bản chứa được mọi giá trị; hãy đổi kiểu sau khi nạp.

    Dòng báo cáo: unknown_type

  • values that don't fit their column

    NULL

    Bản dump bị hỏng hoặc viết tay có thể chứa giá trị mà cột không chứa được; chúng trở thành NULL để phần còn lại được nạp.

    Dòng báo cáo: invalid_value_null

  • unreadable geometries

    NULL

    Byte không phải dữ liệu hình học thì không lưu được dưới dạng hình học.

    Dòng báo cáo: bad_geometry

  • dumps of several databases

    một schema, mỗi bảng có tên cơ sở dữ liệu ở đầu

    Tập lệnh nạp vào schema của người dùng chạy nó, nên bảng từ các cơ sở dữ liệu khác nhau có tên cơ sở dữ liệu ở đầu.

    Dòng báo cáo: databases_merged

  • CREATE SEQUENCE (MariaDB)

    CREATE SEQUENCE, tại giá trị nó đã đạt tới

    Sequence của Oracle hoạt động theo cùng cách.

  • VECTOR(n) (MariaDB 11.7+)

    CLOB với các số thực dưới dạng mảng JSON

    Chỉ Oracle 23ai có kiểu vector; mảng JSON giữ mọi số thực trên mọi phiên bản.

    Dòng báo cáo: type_replaced

Trong MariaDBTrong OracleDòng báo cáo
TINYINT(1), BOOLNUMBER(1) kèm CHECK 0 và 1 khi mọi giá trị là 0 hoặc 1, nếu không thì NUMBER(3)BOOL của MySQL là TINYINT(1), chứa được mọi số từ -128 đến 127. Oracle trước 23ai không có cột boolean, nên cột chỉ gồm 0 và 1 là NUMBER(1) kèm ràng buộc kiểm tra; cột chứa 2 hoặc -1 giữ các số của nó.bool_kept_numeric
UNSIGNED integersNUMBER đủ rộng cho phạm vi, kèm CHECK không âmNUMBER của Oracle chứa được mọi số nguyên thuộc các độ rộng MySQL có; ràng buộc kiểm tra chặn giá trị âm như MySQL.
ZEROFILL and display widthsbị bỏThêm số 0 phía trước là cách hiển thị số, không phải một phần của số. Các số được giữ; hãy định dạng khi đọc nếu cần phần số 0 đó.zerofill_dropped
FLOAT(M,D)BINARY_FLOAT hoặc BINARY_DOUBLE, bỏ số chữ số thập phân cố địnhSố dấu phẩy động nhị phân của Oracle không có số chữ số thập phân cố định. Giá trị đã lưu được sao chép nguyên trạng.float_scale_dropped
DECIMAL(p,s)NUMBER(p,s) đến 38 chữ số; vượt quá thì VARCHAR2NUMBER của Oracle chứa 38 chữ số. Số thập phân rộng hơn được giữ dạng văn bản để mọi chữ số đều chính xác.decimal_as_text
BIT(1), BIT(n)NUMBER(1), NUMBER(19) đến 63 bit, NUMBER(20) cho BIT(64)Trường bit được lưu thành số do các bit của nó tạo nên.
zero, partial or impossible dates (0000-00-00, 2024-02-30)NULLOracle chỉ lưu ngày có thật trên lịch. MySQL giữ ngày bằng 0 và ngày không hợp lệ khi chế độ SQL cho phép; chúng trở thành NULL và báo cáo đếm số lượng.invalid_date_null
NOT NULL columns with values that become NULLbỏ NOT NULLCột có giá trị phải chuyển thành NULL, kể cả chuỗi rỗng, không thể giữ NOT NULL, nếu không quá trình nạp sẽ dừng.not_null_relaxed
empty strings and empty binary valuesNULLOracle lưu chuỗi rỗng dưới dạng NULL, nên giá trị từng là ' sẽ được đọc lại là NULL. Báo cáo đếm chúng theo từng cột.empty_string_null
DEFAULT '0000-00-00'không có giá trị mặc địnhGiá trị mặc định mà Oracle không lưu được sẽ bị bỏ, thay vì thay bằng một ngày bịa ra.zero_date_default
TIMEINTERVAL DAY TO SECOND, chứa được khoảng thời gianOracle không có kiểu giờ trong ngày, và TIME của MySQL là khoảng thời gian từ -838:59:59 đến 838:59:59; interval chứa được mọi giá trị.
YEARNUMBER(4) kèm CHECK phạm viOracle không có kiểu năm; ràng buộc kiểm tra giữ đúng các giá trị MySQL cho phép.
CHAR(n), VARCHAR(n)VARCHAR2(n CHAR), đếm theo ký tựĐộ dài được đếm theo ký tự như MySQL, và MySQL trả về giá trị CHAR không có khoảng trắng cuối, đúng như VARCHAR2 giữ chúng.
VARCHAR(n) and TEXT longer than 4000 bytesCLOBVARCHAR2 mặc định chứa 4000 byte, nên văn bản dài hơn là CLOB; cột có mọi giá trị vừa thì giữ VARCHAR2.text_as_lob
DATETIMETIMESTAMPDATETIME là thời gian theo đồng hồ, không kèm múi giờ, giống TIMESTAMP. DATE trở thành DATE của Oracle, kiểu này cũng chứa giờ trong ngày, luôn là nửa đêm.
TIMESTAMPTIMESTAMP WITH TIME ZONE theo múi giờ bản dump nêu, UTC khi không nêuTIMESTAMP là một thời điểm. Bản dump nêu múi giờ đã dùng khi ghi (mysqldump ghi UTC); nếu không, giá trị được đọc theo UTC và báo cáo ghi rõ điều đó.timestamp_zone_assumed
ENUMVARCHAR2 kèm CHECK các giá trịVăn bản kèm ràng buộc kiểm tra giữ đúng các giá trị.
ENUM holding '' (MySQL's error value)NULLMySQL lưu chuỗi rỗng khi một giá trị không hợp lệ được ghi vào ENUM ở chế độ SQL không nghiêm ngặt. Oracle lưu nó dưới dạng NULL, ràng buộc kiểm tra cho phép, và báo cáo đếm nó cùng các giá trị rỗng khác.
ENUM holding values outside its listkhông có CHECKGiá trị không có trong danh sách sẽ vi phạm ràng buộc kiểm tra, nên ràng buộc không được tạo.enum_check_skipped
SETVARCHAR2 như MySQL ghi ('a,b')Oracle không có kiểu tập hợp; văn bản là chuỗi MySQL trả về.
JSONCLOBHàm JSON của Oracle đọc JSON từ văn bản trên mọi phiên bản, và CLOB giữ được giá trị ở mọi kích thước.
NUL bytes in textđược giữVARCHAR2 và CLOB chứa được ký tự NUL, nên giá trị được sao chép nguyên trạng.
text that isn't valid in its character setbyte lỗi thành ký tự thay thếVăn bản phải được đọc thành ký tự thì mới ghi được dưới dạng VARCHAR2.invalid_utf8_replaced
text decoded twice (ñ)sao chép nguyên trạngBản dump chứa đúng các ký tự này, nên chúng được sao chép; báo cáo chỉ ra chúng.mojibake_suspected
AUTO_INCREMENTGENERATED BY DEFAULT ON NULL AS IDENTITY, khởi động lại sau các id đã sao chépCác id đã sao chép được nạp nguyên trạng, và bộ đếm tiếp tục sau id lớn nhất hoặc AUTO_INCREMENT của bản dump, tùy giá trị nào lớn hơn.
MyISAM AUTO_INCREMENT on the second column of a keymột bộ đếm cho cả bảngMyISAM đếm theo nhóm của cột đầu tiên trong khóa; Oracle có một bộ đếm cho mỗi bảng.myisam_group_autoincrement
ON UPDATE CURRENT_TIMESTAMPmột trình kích hoạt BEFORE UPDATETrình kích hoạt đặt cột thành thời điểm hiện tại khi lệnh cập nhật không đặt nó.on_update_trigger
generated columnscột ảoOracle chỉ tính cột tính toán khi đọc; cột STORED trở thành cột ảo với cùng giá trị.stored_as_virtual
generated columns with functions Oracle lacksmột cột thườngCông thức không viết được cho Oracle để lại một cột thường và một dòng trong báo cáo.generated_not_translated
INVISIBLE columnscột INVISIBLEOracle ẩn cột ẩn khỏi SELECT * như MySQL.
CHECK constraintsđược chuyển đổi, viết trực tiếp trong CREATE TABLERàng buộc kiểm tra viết trực tiếp được kiểm tra khi từng hàng được nạp.
CHECK constraints with functions Oracle lackskhông được tạoRàng buộc kiểm tra không viết được cho Oracle sẽ bị bỏ và được báo cáo.check_skipped
CHECK ... NOT ENFORCEDkhông được tạoMySQL giữ các ràng buộc kiểm tra này nhưng không áp dụng, nên các hàng có thể vi phạm chúng.check_not_enforced
defaults with functions Oracle lackskhông có giá trị mặc địnhGiá trị mặc định không viết được cho Oracle sẽ bị bỏ và được báo cáo.default_not_translated
keys and indexes on a prefix, c(20)chỉ mục trên SUBSTR của cộtChỉ mục hàm trên cùng phần đầu của cột giữ các hàng không trùng nhau như cũ, và lập chỉ mục được cột CLOB mà Oracle không lập chỉ mục toàn bộ được.prefix_unique
FULLTEXT indexeskhông được tạoOracle Text xây dựng tìm kiếm toàn văn với kiểu chỉ mục và truy vấn riêng.fulltext_not_created
SPATIAL indexeskhông được tạoDữ liệu hình học được lưu dưới dạng byte WKB, mà chỉ mục không gian không đọc được.spatial_index_not_created
functional indexes, and indexes on whole CLOB or BLOB columnskhông được tạoOracle không lập chỉ mục toàn bộ một đối tượng lớn được, và một số hàm MySQL không có hàm tương đương trong Oracle.index_skipped
foreign keyssau dữ liệu với ENABLE NOVALIDATE, rồi xác thực kèm cảnh báo về hàng mồ côiBản dump nạp với FOREIGN_KEY_CHECKS=0 và MyISAM không bao giờ kiểm tra, nên hàng không có hàng cha là chuyện thường. Khóa kiểm tra hàng mới ngay và được xác thực sau cùng; hàng mồ côi khiến khóa ở trạng thái chưa xác thực kèm cảnh báo thay vì dừng quá trình nạp.
ON UPDATE CASCADE, SET NULL or SET DEFAULT; ON DELETE SET DEFAULTbị bỏKhóa ngoại của Oracle chỉ hành động khi xóa, với CASCADE hoặc SET NULL.foreign_key_action_unsupported
foreign keys to columns without a unique keykhông được tạoOracle cần khóa chính hoặc ràng buộc duy nhất trên các cột được tham chiếu; InnoDB thì không.foreign_key_skipped
table and column nameschữ hoa khi là tên thông thường, nếu không thì như đã viếtOracle lưu tên viết không có dấu ngoặc kép bằng chữ hoa, nên tên thông thường thành chữ hoa và truy vấn có thể bỏ dấu ngoặc kép; các tên khác giữ hoa thường và cần dấu ngoặc kép.identifier_renamed
names over 128 bytesrút ngắnTên trong Oracle 12.2 trở lên tối đa 128 byte.name_shortened
GEOMETRY, POINT, POLYGON...BLOB chứa WKBWKB là dạng chuẩn mà mọi thư viện không gian đều đọc được; SDO_GEOMETRY cần metadata của Oracle Spatial.geometry_as_blob
INET4, INET6, UUID (MariaDB)VARCHAR2(39), VARCHAR2(36)Oracle không có kiểu nào trong hai kiểu này; văn bản là chuỗi MariaDB trả về.
BINARY, VARBINARY, BLOBRAW đến 2000 byte, nếu không thì BLOBByte vẫn là byte.
PARTITION BYmột bảngCác hàng giữ nguyên; hãy phân vùng lại bảng trong Oracle nếu cần.partitions_dropped
WITH SYSTEM VERSIONING (MariaDB)bảng chứa các hàng hiện tạiBản dump chỉ chứa các hàng hiện tại.system_versioning_dropped
MyISAM, MEMORY and other enginesbảng thườngOracle có một engine bảng duy nhất.engine_dropped
views, triggers, procedures, functions and eventsđược liệt kê trong báo cáoMã của chúng viết bằng ngôn ngữ của MySQL, nên được liệt kê để bạn tạo lại.not_converted_objects
dumps without CREATE TABLEkiểu suy ra từ giá trịBản dump tạo với --no-create-info chỉ có các hàng, nên kiểu được suy ra từ giá trị.no_schema
geometries in a dump without CREATE TABLEBLOB chứa WKBĐịnh dạng hình học của MySQL được nhận diện từ giá trị và lưu dưới dạng WKB chuẩn.geometry_inferred
_ci collationsso sánh chính xácOracle so sánh văn bản chính xác, trừ khi được chỉ định khác.case_insensitive_collation
SET NAMES utf8 from utf8mb4 tablesđược chuyển đổi, kèm cảnh báomysqldump của MySQL 5.x mặc định ghi utf8 3 byte và thay mọi emoji bằng dấu chấm hỏi trước khi bất kỳ trình chuyển đổi nào thấy tệp.dump_lost_four_byte_chars
dumps without SET NAMES whose text isn't UTF-8đọc dưới dạng Latin-1 (Windows-1252)latin1 của MySQL là Windows-1252, bảng mã thường gặp của những bản dump như vậy.charset_guessed
sjis, cp932, gbk, big5 dumpsđọc dưới dạng UTF-8, kèm cảnh báoCác bảng mã này chưa được giải mã.unsupported_charset
UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rowsđược tính ra giá trịMột số công cụ dump ghi giá trị dưới dạng các lệnh gọi này; chúng được đọc thành giá trị mà chúng tạo ra, với WKT địa lý được chuyển sang kinh độ trước.
other expressions in rowsNULLTrình chuyển đổi không chạy cơ sở dữ liệu thì không tính được chúng.expression_value
DEFAULT in VALUESgiá trị mặc định của cộtGiá trị mặc định dạng hằng được sao chép vào hàng.default_keyword_filled
DEFAULT in VALUES without a literal defaultNULLKhông có giá trị nào để sao chép.default_keyword_null
REPLACE and INSERT IGNOREhàng thườngBản dump có một hàng cho mỗi khóa, nên các hàng vẫn giống nhau.replace_as_insert
types IntoSQL doesn't knowCLOBVăn bản chứa được mọi giá trị; hãy đổi kiểu sau khi nạp.unknown_type
values that don't fit their columnNULLBản dump bị hỏng hoặc viết tay có thể chứa giá trị mà cột không chứa được; chúng trở thành NULL để phần còn lại được nạp.invalid_value_null
unreadable geometriesNULLByte không phải dữ liệu hình học thì không lưu được dưới dạng hình học.bad_geometry
dumps of several databasesmột schema, mỗi bảng có tên cơ sở dữ liệu ở đầuTập lệnh nạp vào schema của người dùng chạy nó, nên bảng từ các cơ sở dữ liệu khác nhau có tên cơ sở dữ liệu ở đầu.databases_merged
CREATE SEQUENCE (MariaDB)CREATE SEQUENCE, tại giá trị nó đã đạt tớiSequence của Oracle hoạt động theo cùng cách.
VECTOR(n) (MariaDB 11.7+)CLOB với các số thực dưới dạng mảng JSONChỉ Oracle 23ai có kiểu vector; mảng JSON giữ mọi số thực trên mọi phiên bản.type_replaced

Nạp tập lệnh vào Oracle

Tập lệnh tạo bảng, sao chép các hàng, rồi thêm khóa, chỉ mục và khóa ngoại, nên nạp nhanh và dừng ở lỗi đầu tiên.

NLS_LANG=.AL32UTF8 sqlplus -S -L user@//localhost/mydb @mariadb.oracle.sql

Khóa ngoại được thêm với ENABLE NOVALIDATE, nên hàng mới được kiểm tra ngay, rồi được xác thực. Nếu một hàng cũ trỏ tới hàng không tồn tại, tập lệnh cho biết ràng buộc nào và để nó ở trạng thái chưa xác thực, thay vì thất bại giữa chừng.

Với bản dump lớn, hãy chạy SQL*Plus trên cùng máy với cơ sở dữ liệu. Tập lệnh commit sau mỗi 100 hàng. Người dùng chạy tập lệnh cần quyền CREATE TABLE, CREATE SEQUENCE, CREATE TRIGGER và CREATE PROCEDURE, cùng hạn mức trên tablespace của mình.

Tạo bản dump MariaDB để có kết quả tốt nhất

Trình chuyển đổi đọc những gì bản dump chứa. Các tùy chọn sau giữ lại nhiều dữ liệu hơn trong đó:

  • --default-character-set=utf8mb4 giữ emoji và các ký tự 4 byte khác, vốn bị bản dump utf8mb3 làm mất trước khi trình chuyển đổi nhìn thấy.
  • --hex-blob ghi cột nhị phân và giá trị VECTOR dưới dạng thập lục phân, không bị hỏng khi sao chép giữa các hệ thống.
  • --routines --triggers --events thêm các đối tượng đó vào bản dump, để báo cáo có thể liệt kê chúng.

Những gì không được chuyển đổi

Khung nhìn, trình kích hoạt, thủ tục lưu trữ, hàm và sự kiện được viết bằng ngôn ngữ riêng của MariaDB. Chúng được liệt kê theo tên trong báo cáo, không bao giờ bị bỏ âm thầm, để bạn viết lại cho Oracle.

Câu hỏi về MariaDB sang Oracle

Chưa có câu trả lời ở đây? Hãy viết cho chúng tôi từ trang liên hệ, sẽ có người trả lời. Trang liên hệ

Bản dump của tôi có bị tải lên không?

Không. Trình chuyển đổi chạy trong trình duyệt và đọc bản dump từ ổ đĩa theo từng phần, nên nó không bao giờ rời khỏi máy tính của bạn. Ứng dụng máy tính và dòng lệnh cũng chuyển đổi ngay trên máy tính của bạn.

Bản dump có thể lớn đến đâu?

Trình chuyển đổi không bao giờ giữ toàn bộ bản dump trong bộ nhớ: nó đọc tệp hai lần, theo từng đoạn, và ghi tập lệnh trong lúc đọc. Bản dump nhiều gigabyte vẫn chuyển đổi được trong trình duyệt, trong ứng dụng máy tính và bằng dòng lệnh.

Bản dump có thể đến từ những phiên bản MariaDB nào?

Bản dump từ mariadb-dump và mysqldump trên MariaDB 10.3 đến 12, với một INSERT mỗi bảng hoặc một INSERT mỗi hàng. Mọi bản dump thử nghiệm đến từ MariaDB 10.11, 11.4 và 11.8 và được so với nguồn từng ô một.

Cột UUID, INET6, JSON và VECTOR có được giữ không?

Cột UUID và INET thành VARCHAR2, JSON thành CLOB, và VECTOR thành mảng JSON chứa các số thực của nó. Ngày bằng 0 thành NULL, chuỗi rỗng cũng vậy, vì Oracle lưu chúng như thế.

Giá trị AUTO_INCREMENT và sequence có được giữ không?

Có. Mỗi cột AUTO_INCREMENT trở thành cột identity tiếp tục sau id lớn nhất. Sequence thành sequence Oracle, và giá trị mặc định lấy từ một sequence tiếp tục lấy từ nó.

Còn thủ tục lưu trữ và trình kích hoạt thì sao?

Chúng được liệt kê theo tên trong báo cáo và không được chuyển đổi, vì mỗi cơ sở dữ liệu viết chúng bằng ngôn ngữ riêng.

Tập lệnh nạp được trên những phiên bản Oracle nào?

Oracle 19c trở lên. Mọi bản dump thử nghiệm đều nạp được trên 21c và 23ai, và dừng ở lỗi đầu tiên nếu có sự cố.