Vai al contenuto
Home di IntoSQL

Converti MariaDB in Oracle

Trascina un dump di mariadb-dump, mysqldump, phpMyAdmin o Adminer, in .sql o .sql.gz, e scarica uno script Oracle con le stesse tabelle, chiavi, indici e dati. Ogni valore che Oracle non può contenere così com'è, e ogni oggetto che non supporta, è elencato nel report.

Il tuo file
sqlshop_2024_mariadb.sqlFile di esempio, 6,6 kB
Il tuo database

18 righe convertite, 4 correzioni, nessuna rifiutata

Mostra

Tabelle in shop_2024_mariadb.sqlDump MariaDB 11.8.9-MariaDB-ubu2404 · scritto da mariadb-dump · utf8mb4

  • customersscritta come CUSTOMERS8 righe2
    8 colonne
    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)
  • ordersscritta come ORDERS10 righe2
    12 colonne
    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;

Correzioni

  1. "signed_up" di customers ora ammette NULL: alcuni dei suoi valori non si potevano salvare e sono NULL.
  2. Il valore predefinito di "signed_up" in customers, 0000‑00‑00, non è una data che Oracle accetta, quindi la colonna non ha un valore predefinito.
  3. "status" di orders ora ammette NULL: alcuni dei suoi valori non si potevano salvare e sono NULL.
  4. "updated_at" di orders passa all'ora corrente a ogni aggiornamento; in Oracle lo fa un trigger.

Da controllare

  • 1 valore in "signed_up" di customers è una data zero o impossibile come 0000‑00‑00, che Oracle non può salvare, quindi è NULL. Se quelle date hanno un significato, sostituiscile nell'origine con date reali prima del dump.
  • 1 valore in "shipped_at" di orders è una data zero o impossibile come 0000‑00‑00 00:00:00, che Oracle non può salvare, quindi è NULL. Se quelle date hanno un significato, sostituiscile nell'origine con date reali prima del dump.
  • 1 valore vuoto in "status" di orders è diventato NULL; Oracle salva una stringa vuota come NULL. Dove le query confrontano questa colonna con ', confronta invece con IS NULL.

Il tuo file viene convertito su questo computer e non viene mai caricato.

Altri esempi:

Cosa cambia da MariaDB a Oracle

Ogni riga è una regola che il convertitore applica, con la riga del report che scrive quando la regola cambia qualcosa nei tuoi dati.

  • TINYINT(1), BOOL

    NUMBER(1) con un CHECK di 0 e 1 quando ogni valore è 0 o 1, altrimenti NUMBER(3)

    Il BOOL di MySQL è un TINYINT(1) che può contenere qualsiasi numero da -128 a 127. Oracle prima della 23ai non ha colonne booleane, quindi una colonna di 0 e 1 è NUMBER(1) con un CHECK; una che contiene 2 o -1 mantiene i suoi numeri.

    Riga del report: bool_kept_numeric

  • UNSIGNED integers

    NUMBER abbastanza ampio per l'intervallo, con un CHECK che non sia negativo

    Il NUMBER di Oracle contiene qualsiasi intero delle ampiezze di MySQL; il vincolo CHECK tiene fuori i valori negativi come faceva MySQL.

  • ZEROFILL and display widths

    rimosso

    Il riempimento con zeri è un modo di mostrare un numero, non ne fa parte. I numeri restano; formattali quando li leggi se il riempimento conta.

    Riga del report: zerofill_dropped

  • FLOAT(M,D)

    BINARY_FLOAT o BINARY_DOUBLE, senza la scala

    I float binari di Oracle non hanno una scala fissa. I valori salvati vengono copiati così come sono.

    Riga del report: float_scale_dropped

  • DECIMAL(p,s)

    NUMBER(p,s) fino a 38 cifre; VARCHAR2 oltre

    Il NUMBER di Oracle contiene 38 cifre. I decimali più ampi restano come testo, così ogni cifra resta esatta.

    Riga del report: decimal_as_text

  • BIT(1), BIT(n)

    NUMBER(1), NUMBER(19) fino a 63 bit, NUMBER(20) per BIT(64)

    I campi di bit vengono salvati come il numero formato dai loro bit.

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

    NULL

    Oracle salva solo date reali del calendario. MySQL conserva date zero e impossibili quando la sua modalità SQL lo consente; diventano NULL e il report le conta.

    Riga del report: invalid_date_null

  • NOT NULL columns with values that become NULL

    NOT NULL rimosso

    Una colonna i cui valori sono dovuti diventare NULL, stringhe vuote incluse, non può mantenere NOT NULL, altrimenti il caricamento si fermerebbe.

    Riga del report: not_null_relaxed

  • empty strings and empty binary values

    NULL

    Oracle salva una stringa vuota come NULL, quindi un valore che era ' si rilegge come NULL. Il report li conta per colonna.

    Riga del report: empty_string_null

  • DEFAULT '0000-00-00'

    nessun valore predefinito

    Un valore predefinito che Oracle non può salvare viene omesso invece di essere sostituito con una data inventata.

    Riga del report: zero_date_default

  • TIME

    INTERVAL DAY TO SECOND, che contiene durate

    Oracle non ha un tipo ora del giorno, e il TIME di MySQL è una durata da -838:59:59 a 838:59:59; un intervallo contiene ogni valore.

  • YEAR

    NUMBER(4) con un CHECK del suo intervallo

    Oracle non ha un tipo anno; il vincolo CHECK mantiene gli stessi valori che MySQL consente.

  • CHAR(n), VARCHAR(n)

    VARCHAR2(n CHAR), contando i caratteri

    Le lunghezze contano i caratteri come in MySQL, e MySQL restituisce i valori CHAR senza spazi finali, come li mantiene VARCHAR2.

  • VARCHAR(n) and TEXT longer than 4000 bytes

    CLOB

    Un VARCHAR2 contiene 4000 byte per impostazione predefinita, quindi il testo più lungo è un CLOB; una colonna i cui valori ci stanno tutti mantiene VARCHAR2.

    Riga del report: text_as_lob

  • DATETIME

    TIMESTAMP

    Un DATETIME è l'ora letta su un orologio, senza fuso orario, come TIMESTAMP. DATE diventa il DATE di Oracle, che contiene anche un'ora del giorno che resta a mezzanotte.

  • TIMESTAMP

    TIMESTAMP WITH TIME ZONE nel fuso indicato dal dump, UTC se non ne indica uno

    Un TIMESTAMP è un istante. I dump indicano il fuso in cui lo hanno scritto (mysqldump scrive UTC); senza questa indicazione, i valori vengono letti come UTC e il report lo dice.

    Riga del report: timestamp_zone_assumed

  • ENUM

    VARCHAR2 con un CHECK dei suoi valori

    Il testo con un vincolo CHECK mantiene gli stessi valori.

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

    NULL

    MySQL salva una stringa vuota quando un valore non valido entra in un ENUM con una modalità SQL permissiva. Oracle la salva come NULL, che il vincolo CHECK ammette, e il report la conta con gli altri valori vuoti.

  • ENUM holding values outside its list

    nessun CHECK

    I valori che la lista non nomina violerebbero il vincolo CHECK, quindi il vincolo non viene creato.

    Riga del report: enum_check_skipped

  • SET

    VARCHAR2 come lo scrive MySQL ('a,b')

    Oracle non ha un tipo set; il testo è quello che restituisce MySQL.

  • JSON

    CLOB

    Le funzioni JSON di Oracle leggono il JSON dal testo su ogni versione, e un CLOB mantiene valori di qualsiasi dimensione.

  • NUL bytes in text

    mantenuto

    VARCHAR2 e CLOB possono contenere un carattere NUL, quindi il valore viene copiato così com'è.

  • text that isn't valid in its character set

    i byte errati come carattere di sostituzione

    Il testo va letto come caratteri per essere scritto come VARCHAR2.

    Riga del report: invalid_utf8_replaced

  • text decoded twice (ñ)

    copiato così com'è

    Il dump contiene esattamente questi caratteri, quindi vengono copiati; il report li segnala.

    Riga del report: mojibake_suspected

  • AUTO_INCREMENT

    GENERATED BY DEFAULT ON NULL AS IDENTITY, riavviato oltre gli id copiati

    Gli id copiati si caricano così come sono, e il contatore riparte dopo il più alto o dopo l'AUTO_INCREMENT del dump, se è maggiore.

  • MyISAM AUTO_INCREMENT on the second column of a key

    un solo contatore per la tabella

    MyISAM conta per gruppo della prima colonna della chiave; Oracle ha un contatore per tabella.

    Riga del report: myisam_group_autoincrement

  • ON UPDATE CURRENT_TIMESTAMP

    un trigger BEFORE UPDATE

    Il trigger imposta la colonna all'ora corrente quando un aggiornamento non la imposta.

    Riga del report: on_update_trigger

  • generated columns

    colonne virtuali

    Oracle calcola le colonne generate solo in lettura; le colonne STORED diventano virtuali con gli stessi valori.

    Riga del report: stored_as_virtual

  • generated columns with functions Oracle lacks

    una colonna semplice

    Una formula che non si può scrivere per Oracle lascia una colonna semplice e una riga nel report.

    Riga del report: generated_not_translated

  • INVISIBLE columns

    colonne INVISIBLE

    Oracle nasconde le colonne invisibili da SELECT * come fa MySQL.

  • CHECK constraints

    tradotti, dentro CREATE TABLE

    I CHECK nella tabella si verificano mentre ogni riga si carica.

  • CHECK constraints with functions Oracle lacks

    non creato

    Un vincolo CHECK che non si può scrivere per Oracle viene omesso e segnalato.

    Riga del report: check_skipped

  • CHECK ... NOT ENFORCED

    non creati

    MySQL conserva questi vincoli senza applicarli, quindi le righe possono violarli.

    Riga del report: check_not_enforced

  • defaults with functions Oracle lacks

    nessun valore predefinito

    Un valore predefinito che non si può scrivere per Oracle viene omesso e segnalato.

    Riga del report: default_not_translated

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

    un indice su SUBSTR della colonna

    Un indice funzionale sullo stesso inizio della colonna tiene distinte le stesse righe, e indicizza le colonne CLOB che Oracle non può indicizzare per intero.

    Riga del report: prefix_unique

  • FULLTEXT indexes

    non creato

    Oracle Text gestisce la ricerca full-text con un tipo di indice e query propri.

    Riga del report: fulltext_not_created

  • SPATIAL indexes

    non creato

    Le geometrie sono salvate come byte WKB, che un indice spaziale non sa leggere.

    Riga del report: spatial_index_not_created

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

    non creato

    Oracle non può indicizzare per intero un oggetto di grandi dimensioni, e alcune funzioni di MySQL non hanno un equivalente in Oracle.

    Riga del report: index_skipped

  • foreign keys

    dopo i dati ENABLE NOVALIDATE, poi validata con un avviso sulle righe orfane

    I dump si caricano con FOREIGN_KEY_CHECKS=0 e MyISAM non controlla mai, quindi le righe senza un genitore sono comuni. La chiave controlla subito le nuove righe e viene validata per ultima; le righe orfane la lasciano non validata con un avviso invece di fermare il caricamento.

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

    rimosso

    Le chiavi esterne di Oracle agiscono solo in eliminazione, con CASCADE o SET NULL.

    Riga del report: foreign_key_action_unsupported

  • foreign keys to columns without a unique key

    non creata

    Oracle richiede una chiave primaria o un vincolo univoco sulle colonne referenziate; InnoDB no.

    Riga del report: foreign_key_skipped

  • table and column names

    maiuscolo per i nomi semplici, altrimenti come scritti

    Oracle salva in maiuscolo i nomi scritti senza virgolette, quindi i nomi semplici diventano maiuscoli e le query possono omettere le virgolette; gli altri nomi mantengono le maiuscole e minuscole e richiedono virgolette.

    Riga del report: identifier_renamed

  • names over 128 bytes

    accorciato

    In Oracle 12.2 e successive i nomi arrivano a 128 byte.

    Riga del report: name_shortened

  • GEOMETRY, POINT, POLYGON...

    BLOB con WKB

    WKB è la forma standard che ogni libreria spaziale legge; SDO_GEOMETRY richiede i metadati di Oracle Spatial.

    Riga del report: geometry_as_blob

  • INET4, INET6, UUID (MariaDB)

    VARCHAR2(39), VARCHAR2(36)

    Oracle non ha nessuno dei due tipi; il testo è quello che restituisce MariaDB.

  • BINARY, VARBINARY, BLOB

    RAW fino a 2000 byte, altrimenti BLOB

    I byte restano byte.

  • PARTITION BY

    una sola tabella

    Le righe sono le stesse; partiziona di nuovo la tabella in Oracle se serve.

    Riga del report: partitions_dropped

  • WITH SYSTEM VERSIONING (MariaDB)

    una tabella con le righe attuali

    Un dump contiene solo le righe attuali.

    Riga del report: system_versioning_dropped

  • MyISAM, MEMORY and other engines

    una tabella normale

    Oracle ha un solo motore di tabelle.

    Riga del report: engine_dropped

  • views, triggers, procedures, functions and events

    elencati nel report

    Il loro codice è scritto nel linguaggio di MySQL, quindi vengono elencati perché tu li ricrei.

    Riga del report: not_converted_objects

  • dumps without CREATE TABLE

    tipi ricavati dai valori

    Un dump fatto con --no-create-info contiene solo righe, quindi i tipi vengono dai valori.

    Riga del report: no_schema

  • geometries in a dump without CREATE TABLE

    BLOB con WKB

    Il formato delle geometrie di MySQL viene riconosciuto dai valori e salvato come WKB standard.

    Riga del report: geometry_inferred

  • _ci collations

    confronto esatto

    Oracle confronta il testo in modo esatto, salvo indicazione diversa.

    Riga del report: case_insensitive_collation

  • SET NAMES utf8 from utf8mb4 tables

    convertito, con un avviso

    mysqldump di MySQL 5.x scrive utf8 a 3 byte per impostazione predefinita e sostituisce ogni emoji con un punto interrogativo prima che un convertitore veda il file.

    Riga del report: dump_lost_four_byte_chars

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

    letto come Latin-1 (Windows-1252)

    Il latin1 di MySQL è Windows-1252, la codifica abituale di questi dump.

    Riga del report: charset_guessed

  • sjis, cp932, gbk, big5 dumps

    letto come UTF-8, con un avviso

    Queste codifiche non vengono ancora decodificate.

    Riga del report: unsupported_charset

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

    valutate

    Alcuni strumenti di dump scrivono i valori come queste chiamate; vengono letti come i valori che producono, e il WKT geografico viene convertito mettendo prima la longitudine.

  • other expressions in rows

    NULL

    Un convertitore che non esegue un database non può valutarle.

    Riga del report: expression_value

  • DEFAULT in VALUES

    il valore predefinito della colonna

    Un valore predefinito letterale viene copiato nella riga.

    Riga del report: default_keyword_filled

  • DEFAULT in VALUES without a literal default

    NULL

    Non c'è nessun valore da copiare.

    Riga del report: default_keyword_null

  • REPLACE and INSERT IGNORE

    righe semplici

    Un dump ha una riga per chiave, quindi le righe sono le stesse.

    Riga del report: replace_as_insert

  • types IntoSQL doesn't know

    CLOB

    Il testo contiene qualsiasi valore; cambia il tipo dopo il caricamento.

    Riga del report: unknown_type

  • values that don't fit their column

    NULL

    Un dump danneggiato o scritto a mano può contenere valori che la colonna non ammette; diventano NULL così il resto si carica.

    Riga del report: invalid_value_null

  • unreadable geometries

    NULL

    I byte che non sono una geometria non si possono salvare come tale.

    Riga del report: bad_geometry

  • dumps of several databases

    un unico schema, ogni tabella con il nome del suo database davanti

    Lo script si carica nello schema dell'utente che lo esegue, quindi le tabelle di database diversi hanno davanti il nome del loro database.

    Riga del report: databases_merged

  • CREATE SEQUENCE (MariaDB)

    CREATE SEQUENCE, al valore raggiunto

    Le sequenze di Oracle funzionano allo stesso modo.

  • VECTOR(n) (MariaDB 11.7+)

    CLOB con i float come array JSON

    Solo Oracle 23ai ha un tipo vector; un array JSON mantiene ogni float su ogni versione.

    Riga del report: type_replaced

In MariaDBIn OracleRiga del report
TINYINT(1), BOOLNUMBER(1) con un CHECK di 0 e 1 quando ogni valore è 0 o 1, altrimenti NUMBER(3)Il BOOL di MySQL è un TINYINT(1) che può contenere qualsiasi numero da -128 a 127. Oracle prima della 23ai non ha colonne booleane, quindi una colonna di 0 e 1 è NUMBER(1) con un CHECK; una che contiene 2 o -1 mantiene i suoi numeri.bool_kept_numeric
UNSIGNED integersNUMBER abbastanza ampio per l'intervallo, con un CHECK che non sia negativoIl NUMBER di Oracle contiene qualsiasi intero delle ampiezze di MySQL; il vincolo CHECK tiene fuori i valori negativi come faceva MySQL.
ZEROFILL and display widthsrimossoIl riempimento con zeri è un modo di mostrare un numero, non ne fa parte. I numeri restano; formattali quando li leggi se il riempimento conta.zerofill_dropped
FLOAT(M,D)BINARY_FLOAT o BINARY_DOUBLE, senza la scalaI float binari di Oracle non hanno una scala fissa. I valori salvati vengono copiati così come sono.float_scale_dropped
DECIMAL(p,s)NUMBER(p,s) fino a 38 cifre; VARCHAR2 oltreIl NUMBER di Oracle contiene 38 cifre. I decimali più ampi restano come testo, così ogni cifra resta esatta.decimal_as_text
BIT(1), BIT(n)NUMBER(1), NUMBER(19) fino a 63 bit, NUMBER(20) per BIT(64)I campi di bit vengono salvati come il numero formato dai loro bit.
zero, partial or impossible dates (0000-00-00, 2024-02-30)NULLOracle salva solo date reali del calendario. MySQL conserva date zero e impossibili quando la sua modalità SQL lo consente; diventano NULL e il report le conta.invalid_date_null
NOT NULL columns with values that become NULLNOT NULL rimossoUna colonna i cui valori sono dovuti diventare NULL, stringhe vuote incluse, non può mantenere NOT NULL, altrimenti il caricamento si fermerebbe.not_null_relaxed
empty strings and empty binary valuesNULLOracle salva una stringa vuota come NULL, quindi un valore che era ' si rilegge come NULL. Il report li conta per colonna.empty_string_null
DEFAULT '0000-00-00'nessun valore predefinitoUn valore predefinito che Oracle non può salvare viene omesso invece di essere sostituito con una data inventata.zero_date_default
TIMEINTERVAL DAY TO SECOND, che contiene durateOracle non ha un tipo ora del giorno, e il TIME di MySQL è una durata da -838:59:59 a 838:59:59; un intervallo contiene ogni valore.
YEARNUMBER(4) con un CHECK del suo intervalloOracle non ha un tipo anno; il vincolo CHECK mantiene gli stessi valori che MySQL consente.
CHAR(n), VARCHAR(n)VARCHAR2(n CHAR), contando i caratteriLe lunghezze contano i caratteri come in MySQL, e MySQL restituisce i valori CHAR senza spazi finali, come li mantiene VARCHAR2.
VARCHAR(n) and TEXT longer than 4000 bytesCLOBUn VARCHAR2 contiene 4000 byte per impostazione predefinita, quindi il testo più lungo è un CLOB; una colonna i cui valori ci stanno tutti mantiene VARCHAR2.text_as_lob
DATETIMETIMESTAMPUn DATETIME è l'ora letta su un orologio, senza fuso orario, come TIMESTAMP. DATE diventa il DATE di Oracle, che contiene anche un'ora del giorno che resta a mezzanotte.
TIMESTAMPTIMESTAMP WITH TIME ZONE nel fuso indicato dal dump, UTC se non ne indica unoUn TIMESTAMP è un istante. I dump indicano il fuso in cui lo hanno scritto (mysqldump scrive UTC); senza questa indicazione, i valori vengono letti come UTC e il report lo dice.timestamp_zone_assumed
ENUMVARCHAR2 con un CHECK dei suoi valoriIl testo con un vincolo CHECK mantiene gli stessi valori.
ENUM holding '' (MySQL's error value)NULLMySQL salva una stringa vuota quando un valore non valido entra in un ENUM con una modalità SQL permissiva. Oracle la salva come NULL, che il vincolo CHECK ammette, e il report la conta con gli altri valori vuoti.
ENUM holding values outside its listnessun CHECKI valori che la lista non nomina violerebbero il vincolo CHECK, quindi il vincolo non viene creato.enum_check_skipped
SETVARCHAR2 come lo scrive MySQL ('a,b')Oracle non ha un tipo set; il testo è quello che restituisce MySQL.
JSONCLOBLe funzioni JSON di Oracle leggono il JSON dal testo su ogni versione, e un CLOB mantiene valori di qualsiasi dimensione.
NUL bytes in textmantenutoVARCHAR2 e CLOB possono contenere un carattere NUL, quindi il valore viene copiato così com'è.
text that isn't valid in its character seti byte errati come carattere di sostituzioneIl testo va letto come caratteri per essere scritto come VARCHAR2.invalid_utf8_replaced
text decoded twice (ñ)copiato così com'èIl dump contiene esattamente questi caratteri, quindi vengono copiati; il report li segnala.mojibake_suspected
AUTO_INCREMENTGENERATED BY DEFAULT ON NULL AS IDENTITY, riavviato oltre gli id copiatiGli id copiati si caricano così come sono, e il contatore riparte dopo il più alto o dopo l'AUTO_INCREMENT del dump, se è maggiore.
MyISAM AUTO_INCREMENT on the second column of a keyun solo contatore per la tabellaMyISAM conta per gruppo della prima colonna della chiave; Oracle ha un contatore per tabella.myisam_group_autoincrement
ON UPDATE CURRENT_TIMESTAMPun trigger BEFORE UPDATEIl trigger imposta la colonna all'ora corrente quando un aggiornamento non la imposta.on_update_trigger
generated columnscolonne virtualiOracle calcola le colonne generate solo in lettura; le colonne STORED diventano virtuali con gli stessi valori.stored_as_virtual
generated columns with functions Oracle lacksuna colonna sempliceUna formula che non si può scrivere per Oracle lascia una colonna semplice e una riga nel report.generated_not_translated
INVISIBLE columnscolonne INVISIBLEOracle nasconde le colonne invisibili da SELECT * come fa MySQL.
CHECK constraintstradotti, dentro CREATE TABLEI CHECK nella tabella si verificano mentre ogni riga si carica.
CHECK constraints with functions Oracle lacksnon creatoUn vincolo CHECK che non si può scrivere per Oracle viene omesso e segnalato.check_skipped
CHECK ... NOT ENFORCEDnon creatiMySQL conserva questi vincoli senza applicarli, quindi le righe possono violarli.check_not_enforced
defaults with functions Oracle lacksnessun valore predefinitoUn valore predefinito che non si può scrivere per Oracle viene omesso e segnalato.default_not_translated
keys and indexes on a prefix, c(20)un indice su SUBSTR della colonnaUn indice funzionale sullo stesso inizio della colonna tiene distinte le stesse righe, e indicizza le colonne CLOB che Oracle non può indicizzare per intero.prefix_unique
FULLTEXT indexesnon creatoOracle Text gestisce la ricerca full-text con un tipo di indice e query propri.fulltext_not_created
SPATIAL indexesnon creatoLe geometrie sono salvate come byte WKB, che un indice spaziale non sa leggere.spatial_index_not_created
functional indexes, and indexes on whole CLOB or BLOB columnsnon creatoOracle non può indicizzare per intero un oggetto di grandi dimensioni, e alcune funzioni di MySQL non hanno un equivalente in Oracle.index_skipped
foreign keysdopo i dati ENABLE NOVALIDATE, poi validata con un avviso sulle righe orfaneI dump si caricano con FOREIGN_KEY_CHECKS=0 e MyISAM non controlla mai, quindi le righe senza un genitore sono comuni. La chiave controlla subito le nuove righe e viene validata per ultima; le righe orfane la lasciano non validata con un avviso invece di fermare il caricamento.
ON UPDATE CASCADE, SET NULL or SET DEFAULT; ON DELETE SET DEFAULTrimossoLe chiavi esterne di Oracle agiscono solo in eliminazione, con CASCADE o SET NULL.foreign_key_action_unsupported
foreign keys to columns without a unique keynon creataOracle richiede una chiave primaria o un vincolo univoco sulle colonne referenziate; InnoDB no.foreign_key_skipped
table and column namesmaiuscolo per i nomi semplici, altrimenti come scrittiOracle salva in maiuscolo i nomi scritti senza virgolette, quindi i nomi semplici diventano maiuscoli e le query possono omettere le virgolette; gli altri nomi mantengono le maiuscole e minuscole e richiedono virgolette.identifier_renamed
names over 128 bytesaccorciatoIn Oracle 12.2 e successive i nomi arrivano a 128 byte.name_shortened
GEOMETRY, POINT, POLYGON...BLOB con WKBWKB è la forma standard che ogni libreria spaziale legge; SDO_GEOMETRY richiede i metadati di Oracle Spatial.geometry_as_blob
INET4, INET6, UUID (MariaDB)VARCHAR2(39), VARCHAR2(36)Oracle non ha nessuno dei due tipi; il testo è quello che restituisce MariaDB.
BINARY, VARBINARY, BLOBRAW fino a 2000 byte, altrimenti BLOBI byte restano byte.
PARTITION BYuna sola tabellaLe righe sono le stesse; partiziona di nuovo la tabella in Oracle se serve.partitions_dropped
WITH SYSTEM VERSIONING (MariaDB)una tabella con le righe attualiUn dump contiene solo le righe attuali.system_versioning_dropped
MyISAM, MEMORY and other enginesuna tabella normaleOracle ha un solo motore di tabelle.engine_dropped
views, triggers, procedures, functions and eventselencati nel reportIl loro codice è scritto nel linguaggio di MySQL, quindi vengono elencati perché tu li ricrei.not_converted_objects
dumps without CREATE TABLEtipi ricavati dai valoriUn dump fatto con --no-create-info contiene solo righe, quindi i tipi vengono dai valori.no_schema
geometries in a dump without CREATE TABLEBLOB con WKBIl formato delle geometrie di MySQL viene riconosciuto dai valori e salvato come WKB standard.geometry_inferred
_ci collationsconfronto esattoOracle confronta il testo in modo esatto, salvo indicazione diversa.case_insensitive_collation
SET NAMES utf8 from utf8mb4 tablesconvertito, con un avvisomysqldump di MySQL 5.x scrive utf8 a 3 byte per impostazione predefinita e sostituisce ogni emoji con un punto interrogativo prima che un convertitore veda il file.dump_lost_four_byte_chars
dumps without SET NAMES whose text isn't UTF-8letto come Latin-1 (Windows-1252)Il latin1 di MySQL è Windows-1252, la codifica abituale di questi dump.charset_guessed
sjis, cp932, gbk, big5 dumpsletto come UTF-8, con un avvisoQueste codifiche non vengono ancora decodificate.unsupported_charset
UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rowsvalutateAlcuni strumenti di dump scrivono i valori come queste chiamate; vengono letti come i valori che producono, e il WKT geografico viene convertito mettendo prima la longitudine.
other expressions in rowsNULLUn convertitore che non esegue un database non può valutarle.expression_value
DEFAULT in VALUESil valore predefinito della colonnaUn valore predefinito letterale viene copiato nella riga.default_keyword_filled
DEFAULT in VALUES without a literal defaultNULLNon c'è nessun valore da copiare.default_keyword_null
REPLACE and INSERT IGNORErighe sempliciUn dump ha una riga per chiave, quindi le righe sono le stesse.replace_as_insert
types IntoSQL doesn't knowCLOBIl testo contiene qualsiasi valore; cambia il tipo dopo il caricamento.unknown_type
values that don't fit their columnNULLUn dump danneggiato o scritto a mano può contenere valori che la colonna non ammette; diventano NULL così il resto si carica.invalid_value_null
unreadable geometriesNULLI byte che non sono una geometria non si possono salvare come tale.bad_geometry
dumps of several databasesun unico schema, ogni tabella con il nome del suo database davantiLo script si carica nello schema dell'utente che lo esegue, quindi le tabelle di database diversi hanno davanti il nome del loro database.databases_merged
CREATE SEQUENCE (MariaDB)CREATE SEQUENCE, al valore raggiuntoLe sequenze di Oracle funzionano allo stesso modo.
VECTOR(n) (MariaDB 11.7+)CLOB con i float come array JSONSolo Oracle 23ai ha un tipo vector; un array JSON mantiene ogni float su ogni versione.type_replaced

Carica lo script in Oracle

Lo script crea le tabelle, copia le righe, poi aggiunge chiavi, indici e chiavi esterne, così si carica in fretta e si ferma al primo errore.

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

Le chiavi esterne vengono aggiunte ENABLE NOVALIDATE, così le nuove righe sono controllate subito, e poi validate. Se una riga vecchia punta a una riga che non esiste, lo script dice quale vincolo e lo lascia non validato, invece di fallire a metà.

Per un dump grande, esegui SQL*Plus sulla stessa macchina del database. Lo script fa il commit ogni 100 righe. L'utente che lo esegue ha bisogno di CREATE TABLE, CREATE SEQUENCE, CREATE TRIGGER e CREATE PROCEDURE, e di una quota sul suo tablespace.

Fai il dump di MariaDB per il miglior risultato

Il convertitore legge ciò che il dump contiene. Con queste opzioni il dump conserva più dei tuoi dati:

  • --default-character-set=utf8mb4 conserva emoji e altri caratteri a 4 byte, che un dump utf8mb3 perde prima che il convertitore lo veda.
  • --hex-blob scrive le colonne binarie e i valori VECTOR in esadecimale, che resiste alla copia tra sistemi diversi.
  • --routines --triggers --events aggiungono quegli oggetti al dump, così il report può elencarli.

Cosa non viene convertito

Viste, trigger, stored procedure, funzioni ed eventi sono scritti nel linguaggio proprio di MariaDB. Sono elencati per nome nel report, mai rimossi in silenzio, così puoi riscriverli per Oracle.

Domande sulla conversione da MariaDB a Oracle

Non trovi la risposta? Scrivici dalla pagina dei contatti e ti risponde una persona. Pagina dei contatti

Il mio dump viene caricato?

No. Il convertitore funziona nel tuo browser e legge il dump dal tuo disco a pezzi, quindi non lascia mai il tuo computer. Anche l'app desktop e la riga di comando convertono sul tuo computer.

Quanto può essere grande il dump?

Il convertitore non tiene mai l'intero dump in memoria: legge il file due volte, per intervalli, e scrive lo script man mano. I dump di più gigabyte si convertono nel browser, nell'app desktop e con la riga di comando.

Da quali versioni di MariaDB può provenire il dump?

Dump di mariadb-dump e mysqldump su MariaDB dalla 10.3 alla 12, con un INSERT per tabella o uno per riga. Ogni dump di test viene da MariaDB 10.11, 11.4 e 11.8 ed è confrontato con la sorgente cella per cella.

Le colonne UUID, INET6, JSON e VECTOR vengono mantenute?

Le colonne UUID e INET diventano VARCHAR2, JSON CLOB e VECTOR un array JSON dei suoi float. Le date zero diventano NULL, e così le stringhe vuote, come le salva Oracle.

I valori AUTO_INCREMENT e le sequenze vengono mantenuti?

Sì. Ogni colonna AUTO_INCREMENT diventa una colonna identity che riparte dopo l'id più alto. Le sequenze diventano sequenze di Oracle, e i valori predefiniti che attingono da una continuano ad attingere da lì.

E le stored procedure e i trigger?

Sono elencati per nome nel report e non vengono convertiti, perché ogni database li scrive nel proprio linguaggio.

Su quali versioni di Oracle si carica lo script?

Oracle 19c e successive. Ogni dump di test si carica su 21c e 23ai, fermandosi al primo errore se qualcosa va storto.