MariaDB omzetten naar Oracle
Zet een dump van mariadb-dump, mysqldump, phpMyAdmin of Adminer neer, als .sql of .sql.gz, en download een Oracle-script met dezelfde tabellen, sleutels, indexen en data. Elke waarde die Oracle niet ongewijzigd kan bevatten, en elk object dat het niet overneemt, staat in het rapport.
18 rijen geconverteerd, 4 correcties, geen afgewezen
Tabellen in shop_2024_mariadb.sqlMariaDB 11.8.9-MariaDB-ubu2404-dump · geschreven door mariadb-dump · utf8mb4
customersgeschreven als CUSTOMERS8 rijen2
8 kolommen 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) ordersgeschreven als ORDERS10 rijen2
12 kolommen 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;
Correcties
- "signed_up" van customers staat nu NULL toe: sommige waarden konden niet worden opgeslagen en zijn NULL.
- De standaardwaarde van "signed_up" in customers, 0000‑00‑00, is geen datum die Oracle accepteert, dus de kolom heeft geen standaardwaarde.
- "status" van orders staat nu NULL toe: sommige waarden konden niet worden opgeslagen en zijn NULL.
- "updated_at" van orders verandert bij elke update in de huidige tijd; in Oracle doet een trigger dat.
Na te kijken
- 1 waarde in "signed_up" van customers is een nul- of onmogelijke datum zoals 0000‑00‑00, die Oracle niet kan opslaan, dus die is NULL. Als die datums iets betekenen, vervang ze dan in de bron door echte datums voordat je de dump maakt.
- 1 waarde in "shipped_at" van orders is een nul- of onmogelijke datum zoals 0000‑00‑00 00:00:00, die Oracle niet kan opslaan, dus die is NULL. Als die datums iets betekenen, vervang ze dan in de bron door echte datums voordat je de dump maakt.
- 1 lege waarde in "status" van orders is NULL geworden; Oracle slaat een lege string op als NULL. Waar query's deze kolom vergelijken met ', vergelijk dan met IS NULL.
Je bestand wordt op deze computer omgezet en nooit geüpload.
Andere voorbeelden:
Wat er verandert van MariaDB naar Oracle
Elke rij is een regel die de converter toepast, met de rapportregel die hij schrijft als de regel iets in je data verandert.
TINYINT(1), BOOL
NUMBER(1) met een CHECK op 0 en 1 als elke waarde 0 of 1 is, anders NUMBER(3)
BOOL in MySQL is een TINYINT(1) die elk getal van -128 tot 127 kan bevatten. Oracle vóór 23ai heeft geen boolean-kolom, dus een kolom met 0 en 1 wordt NUMBER(1) met een check; een kolom met 2 of -1 behoudt zijn getallen.
Rapportregel: bool_kept_numeric
UNSIGNED integers
NUMBER, breed genoeg voor het bereik, met een CHECK dat het niet negatief is
NUMBER in Oracle bevat elk geheel getal van de breedtes die MySQL heeft; de check houdt negatieve waarden buiten, zoals MySQL deed.
ZEROFILL and display widths
weggelaten
Opvulling met nullen is een manier om een getal te tonen, geen deel ervan. De getallen blijven; formatteer ze bij het lezen als de opvulling ertoe doet.
Rapportregel: zerofill_dropped
FLOAT(M,D)
BINARY_FLOAT of BINARY_DOUBLE, zonder de schaal
Binaire drijvendekommagetallen in Oracle hebben geen vaste schaal. De opgeslagen waarden worden ongewijzigd gekopieerd.
Rapportregel: float_scale_dropped
DECIMAL(p,s)
NUMBER(p,s) tot 38 cijfers; daarboven VARCHAR2
NUMBER in Oracle bevat 38 cijfers. Bredere decimalen blijven tekst, zodat elk cijfer exact blijft.
Rapportregel: decimal_as_text
BIT(1), BIT(n)
NUMBER(1), NUMBER(19) tot 63 bits, NUMBER(20) voor BIT(64)
Bitvelden worden opgeslagen als het getal dat hun bits vormen.
zero, partial or impossible dates (0000-00-00, 2024-02-30)
NULL
Oracle slaat alleen echte kalenderdatums op. MySQL bewaart nul- en onmogelijke datums als de SQL-modus dat toestaat; ze worden NULL en het rapport telt ze.
Rapportregel: invalid_date_null
NOT NULL columns with values that become NULL
NOT NULL weggelaten
Een kolom waarvan waarden NULL moesten worden, lege strings inbegrepen, kan NOT NULL niet houden, anders zou het laden stoppen.
Rapportregel: not_null_relaxed
empty strings and empty binary values
NULL
Oracle slaat een lege string op als NULL, dus een waarde die ' was, wordt teruggelezen als NULL. Het rapport telt ze per kolom.
Rapportregel: empty_string_null
DEFAULT '0000-00-00'
geen standaardwaarde
Een standaardwaarde die Oracle niet kan opslaan, wordt weggelaten in plaats van vervangen door een verzonnen datum.
Rapportregel: zero_date_default
TIME
INTERVAL DAY TO SECOND, dat duren bevat
Oracle heeft geen type voor een tijdstip, en TIME in MySQL is een duur van -838:59:59 tot 838:59:59; een interval bevat elke waarde.
YEAR
NUMBER(4) met een CHECK op het bereik
Oracle heeft geen jaartype; de check houdt dezelfde waarden die MySQL toestaat.
CHAR(n), VARCHAR(n)
VARCHAR2(n CHAR), in tekens geteld
Lengtes tellen tekens zoals die van MySQL, en MySQL geeft CHAR-waarden terug zonder spaties aan het einde, zoals VARCHAR2 ze bewaart.
VARCHAR(n) and TEXT longer than 4000 bytes
CLOB
Een VARCHAR2 bevat standaard 4000 bytes, dus langere tekst wordt een CLOB; een kolom waarvan alle waarden passen, houdt VARCHAR2.
Rapportregel: text_as_lob
DATETIME
TIMESTAMP
Een DATETIME is een kloktijd zonder tijdzone, net als TIMESTAMP. DATE wordt DATE in Oracle, dat ook een tijdstip bevat dat op middernacht blijft.
TIMESTAMP
TIMESTAMP WITH TIME ZONE in de zone die de dump vermeldt, UTC als die er geen vermeldt
Een TIMESTAMP is een moment. Dumps vermelden de zone waarin ze het schreven (mysqldump schrijft UTC); zonder die vermelding worden de waarden gelezen als UTC en meldt het rapport dat.
Rapportregel: timestamp_zone_assumed
ENUM
VARCHAR2 met een CHECK op de waarden
Tekst met een check houdt dezelfde waarden.
ENUM holding '' (MySQL's error value)
NULL
MySQL slaat een lege string op als er in een tolerante SQL-modus een ongeldige waarde in een ENUM komt. Oracle slaat die op als NULL, wat de check toestaat, en het rapport telt hem bij de andere lege waarden.
ENUM holding values outside its list
geen CHECK
Waarden die niet in de lijst staan, zouden de check laten mislukken, dus de check wordt niet aangemaakt.
Rapportregel: enum_check_skipped
SET
VARCHAR2 zoals MySQL het schrijft ('a,b')
Oracle heeft geen settype; de tekst is die MySQL teruggeeft.
JSON
CLOB
De JSON-functies van Oracle lezen JSON uit tekst op elke versie, en een CLOB bewaart waarden van elke grootte.
NUL bytes in text
behouden
VARCHAR2 en CLOB kunnen een NUL-teken bevatten, dus de waarde wordt ongewijzigd gekopieerd.
text that isn't valid in its character set
de foute bytes als het vervangingsteken
Tekst moet als tekens worden gelezen om als VARCHAR2 te worden geschreven.
Rapportregel: invalid_utf8_replaced
text decoded twice (ñ)
ongewijzigd gekopieerd
De dump bevat precies deze tekens, dus ze worden gekopieerd; het rapport wijst ze aan.
Rapportregel: mojibake_suspected
AUTO_INCREMENT
GENERATED BY DEFAULT ON NULL AS IDENTITY, herstart voorbij de gekopieerde id's
De gekopieerde id's laden ongewijzigd, en de teller gaat verder na het hoogste daarvan of na de AUTO_INCREMENT van de dump, welke hoger is.
MyISAM AUTO_INCREMENT on the second column of a key
één teller voor de tabel
MyISAM telt per groep van de eerste kolom van de sleutel; Oracle heeft één teller per tabel.
Rapportregel: myisam_group_autoincrement
ON UPDATE CURRENT_TIMESTAMP
een BEFORE UPDATE-trigger
De trigger zet de kolom op de huidige tijd als een update hem niet instelt.
Rapportregel: on_update_trigger
generated columns
virtuele kolommen
Oracle berekent gegenereerde kolommen alleen bij het lezen; STORED-kolommen worden virtueel met dezelfde waarden.
Rapportregel: stored_as_virtual
generated columns with functions Oracle lacks
een gewone kolom
Een formule die niet voor Oracle kan worden geschreven, levert een gewone kolom en een regel in het rapport op.
Rapportregel: generated_not_translated
INVISIBLE columns
INVISIBLE-kolommen
Oracle verbergt onzichtbare kolommen voor SELECT *, zoals MySQL doet.
CHECK constraints
vertaald, inline in CREATE TABLE
Inline checks worden getest terwijl elke rij laadt.
CHECK constraints with functions Oracle lacks
niet aangemaakt
Een check die niet voor Oracle kan worden geschreven, wordt weggelaten en gemeld.
Rapportregel: check_skipped
CHECK ... NOT ENFORCED
niet aangemaakt
MySQL bewaart deze checks zonder ze toe te passen, dus de rijen kunnen ze schenden.
Rapportregel: check_not_enforced
defaults with functions Oracle lacks
geen standaardwaarde
Een standaardwaarde die niet voor Oracle kan worden geschreven, wordt weggelaten en gemeld.
Rapportregel: default_not_translated
keys and indexes on a prefix, c(20)
een index op SUBSTR van de kolom
Een functie-index op hetzelfde begin van de kolom houdt dezelfde rijen uit elkaar, en indexeert CLOB-kolommen die Oracle niet in hun geheel kan indexeren.
Rapportregel: prefix_unique
FULLTEXT indexes
niet aangemaakt
Oracle Text bouwt zoeken in volledige tekst met een eigen indextype en eigen query's.
Rapportregel: fulltext_not_created
SPATIAL indexes
niet aangemaakt
Geometrieën worden opgeslagen als WKB-bytes, die een ruimtelijke index niet kan lezen.
Rapportregel: spatial_index_not_created
functional indexes, and indexes on whole CLOB or BLOB columns
niet aangemaakt
Oracle kan een groot object niet in zijn geheel indexeren, en sommige MySQL-functies hebben geen equivalent in Oracle.
Rapportregel: index_skipped
foreign keys
na de data, ENABLE NOVALIDATE, daarna gevalideerd met een waarschuwing bij wezen
Dumps laden met FOREIGN_KEY_CHECKS=0 en MyISAM controleert nooit, dus rijen zonder ouder komen vaak voor. De sleutel controleert nieuwe rijen meteen en wordt als laatste gevalideerd; wezen laten hem ongevalideerd met een waarschuwing, in plaats van het laden te stoppen.
ON UPDATE CASCADE, SET NULL or SET DEFAULT; ON DELETE SET DEFAULT
weggelaten
Refererende sleutels in Oracle werken alleen bij verwijderen, met CASCADE of SET NULL.
Rapportregel: foreign_key_action_unsupported
foreign keys to columns without a unique key
niet aangemaakt
Oracle heeft een primaire sleutel of een unieke constraint nodig op de kolommen waarnaar wordt verwezen; InnoDB niet.
Rapportregel: foreign_key_skipped
table and column names
hoofdletters als het eenvoudige namen zijn, anders zoals geschreven
Oracle slaat namen zonder aanhalingstekens op in hoofdletters, dus eenvoudige namen worden hoofdletters en query's kunnen de aanhalingstekens weglaten; andere namen houden hun hoofdletters en hebben aanhalingstekens nodig.
Rapportregel: identifier_renamed
names over 128 bytes
ingekort
Namen in Oracle 12.2 en later bevatten 128 bytes.
Rapportregel: name_shortened
GEOMETRY, POINT, POLYGON...
BLOB met WKB
WKB is het standaardformaat dat elke ruimtelijke bibliotheek leest; SDO_GEOMETRY heeft de metadata van Oracle Spatial nodig.
Rapportregel: geometry_as_blob
INET4, INET6, UUID (MariaDB)
VARCHAR2(39), VARCHAR2(36)
Oracle heeft geen van beide typen; de tekst is die MariaDB teruggeeft.
BINARY, VARBINARY, BLOB
RAW tot 2000 bytes, anders BLOB
Bytes blijven bytes.
PARTITION BY
één tabel
De rijen zijn dezelfde; partitioneer de tabel opnieuw in Oracle als dat nodig is.
Rapportregel: partitions_dropped
WITH SYSTEM VERSIONING (MariaDB)
een tabel met de huidige rijen
Een dump bevat alleen de huidige rijen.
Rapportregel: system_versioning_dropped
MyISAM, MEMORY and other engines
een gewone tabel
Oracle heeft één tabelengine.
Rapportregel: engine_dropped
views, triggers, procedures, functions and events
vermeld in het rapport
Hun code is geschreven in de taal van MySQL, dus ze worden vermeld zodat je ze opnieuw kunt maken.
Rapportregel: not_converted_objects
dumps without CREATE TABLE
typen afgeleid uit de waarden
Een dump gemaakt met --no-create-info bevat alleen rijen, dus de typen komen uit de waarden.
Rapportregel: no_schema
geometries in a dump without CREATE TABLE
BLOB met WKB
Het geometrieformaat van MySQL wordt herkend aan de waarden en opgeslagen als standaard-WKB.
Rapportregel: geometry_inferred
_ci collations
exacte vergelijking
Oracle vergelijkt tekst exact, tenzij anders aangegeven.
Rapportregel: case_insensitive_collation
SET NAMES utf8 from utf8mb4 tables
geconverteerd, met een waarschuwing
mysqldump van MySQL 5.x schrijft standaard 3-byte utf8 en vervangt elke emoji door een vraagteken voordat een converter het bestand ziet.
Rapportregel: dump_lost_four_byte_chars
dumps without SET NAMES whose text isn't UTF-8
gelezen als Latin-1 (Windows-1252)
latin1 in MySQL is Windows-1252, de gebruikelijke codering van zulke dumps.
Rapportregel: charset_guessed
sjis, cp932, gbk, big5 dumps
gelezen als UTF-8, met een waarschuwing
Deze coderingen worden nog niet gedecodeerd.
Rapportregel: unsupported_charset
UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rows
geëvalueerd
Sommige dumptools schrijven waarden als deze aanroepen; ze worden gelezen als de waarden die ze opleveren, met geografische WKT omgezet naar lengtegraad eerst.
other expressions in rows
NULL
Een converter die geen database draait, kan ze niet evalueren.
Rapportregel: expression_value
DEFAULT in VALUES
de standaardwaarde van de kolom
Een letterlijke standaardwaarde wordt in de rij gekopieerd.
Rapportregel: default_keyword_filled
DEFAULT in VALUES without a literal default
NULL
Er is geen waarde om te kopiëren.
Rapportregel: default_keyword_null
REPLACE and INSERT IGNORE
gewone rijen
Een dump heeft één rij per sleutel, dus de rijen zijn dezelfde.
Rapportregel: replace_as_insert
types IntoSQL doesn't know
CLOB
Tekst kan elke waarde bevatten; wijzig het type na het laden.
Rapportregel: unknown_type
values that don't fit their column
NULL
Een beschadigde of met de hand geschreven dump kan waarden bevatten die de kolom niet aankan; ze worden NULL zodat de rest laadt.
Rapportregel: invalid_value_null
unreadable geometries
NULL
Bytes die geen geometrie zijn, kunnen niet als geometrie worden opgeslagen.
Rapportregel: bad_geometry
dumps of several databases
één schema, elke tabel met de naam van zijn database ervoor
Het script laadt in het schema van de gebruiker die het uitvoert, dus tabellen uit verschillende databases krijgen de naam van hun database ervoor.
Rapportregel: databases_merged
CREATE SEQUENCE (MariaDB)
CREATE SEQUENCE, op de waarde die hij had bereikt
Sequences in Oracle werken op dezelfde manier.
VECTOR(n) (MariaDB 11.7+)
CLOB met de floats als JSON-array
Alleen Oracle 23ai heeft een vectortype; een JSON-array behoudt elke float op elke versie.
Rapportregel: type_replaced
| In MariaDB | In Oracle | Rapportregel |
|---|---|---|
| TINYINT(1), BOOL | NUMBER(1) met een CHECK op 0 en 1 als elke waarde 0 of 1 is, anders NUMBER(3)BOOL in MySQL is een TINYINT(1) die elk getal van -128 tot 127 kan bevatten. Oracle vóór 23ai heeft geen boolean-kolom, dus een kolom met 0 en 1 wordt NUMBER(1) met een check; een kolom met 2 of -1 behoudt zijn getallen. | bool_kept_numeric |
| UNSIGNED integers | NUMBER, breed genoeg voor het bereik, met een CHECK dat het niet negatief isNUMBER in Oracle bevat elk geheel getal van de breedtes die MySQL heeft; de check houdt negatieve waarden buiten, zoals MySQL deed. | |
| ZEROFILL and display widths | weggelatenOpvulling met nullen is een manier om een getal te tonen, geen deel ervan. De getallen blijven; formatteer ze bij het lezen als de opvulling ertoe doet. | zerofill_dropped |
| FLOAT(M,D) | BINARY_FLOAT of BINARY_DOUBLE, zonder de schaalBinaire drijvendekommagetallen in Oracle hebben geen vaste schaal. De opgeslagen waarden worden ongewijzigd gekopieerd. | float_scale_dropped |
| DECIMAL(p,s) | NUMBER(p,s) tot 38 cijfers; daarboven VARCHAR2NUMBER in Oracle bevat 38 cijfers. Bredere decimalen blijven tekst, zodat elk cijfer exact blijft. | decimal_as_text |
| BIT(1), BIT(n) | NUMBER(1), NUMBER(19) tot 63 bits, NUMBER(20) voor BIT(64)Bitvelden worden opgeslagen als het getal dat hun bits vormen. | |
| zero, partial or impossible dates (0000-00-00, 2024-02-30) | NULLOracle slaat alleen echte kalenderdatums op. MySQL bewaart nul- en onmogelijke datums als de SQL-modus dat toestaat; ze worden NULL en het rapport telt ze. | invalid_date_null |
| NOT NULL columns with values that become NULL | NOT NULL weggelatenEen kolom waarvan waarden NULL moesten worden, lege strings inbegrepen, kan NOT NULL niet houden, anders zou het laden stoppen. | not_null_relaxed |
| empty strings and empty binary values | NULLOracle slaat een lege string op als NULL, dus een waarde die ' was, wordt teruggelezen als NULL. Het rapport telt ze per kolom. | empty_string_null |
| DEFAULT '0000-00-00' | geen standaardwaardeEen standaardwaarde die Oracle niet kan opslaan, wordt weggelaten in plaats van vervangen door een verzonnen datum. | zero_date_default |
| TIME | INTERVAL DAY TO SECOND, dat duren bevatOracle heeft geen type voor een tijdstip, en TIME in MySQL is een duur van -838:59:59 tot 838:59:59; een interval bevat elke waarde. | |
| YEAR | NUMBER(4) met een CHECK op het bereikOracle heeft geen jaartype; de check houdt dezelfde waarden die MySQL toestaat. | |
| CHAR(n), VARCHAR(n) | VARCHAR2(n CHAR), in tekens geteldLengtes tellen tekens zoals die van MySQL, en MySQL geeft CHAR-waarden terug zonder spaties aan het einde, zoals VARCHAR2 ze bewaart. | |
| VARCHAR(n) and TEXT longer than 4000 bytes | CLOBEen VARCHAR2 bevat standaard 4000 bytes, dus langere tekst wordt een CLOB; een kolom waarvan alle waarden passen, houdt VARCHAR2. | text_as_lob |
| DATETIME | TIMESTAMPEen DATETIME is een kloktijd zonder tijdzone, net als TIMESTAMP. DATE wordt DATE in Oracle, dat ook een tijdstip bevat dat op middernacht blijft. | |
| TIMESTAMP | TIMESTAMP WITH TIME ZONE in de zone die de dump vermeldt, UTC als die er geen vermeldtEen TIMESTAMP is een moment. Dumps vermelden de zone waarin ze het schreven (mysqldump schrijft UTC); zonder die vermelding worden de waarden gelezen als UTC en meldt het rapport dat. | timestamp_zone_assumed |
| ENUM | VARCHAR2 met een CHECK op de waardenTekst met een check houdt dezelfde waarden. | |
| ENUM holding '' (MySQL's error value) | NULLMySQL slaat een lege string op als er in een tolerante SQL-modus een ongeldige waarde in een ENUM komt. Oracle slaat die op als NULL, wat de check toestaat, en het rapport telt hem bij de andere lege waarden. | |
| ENUM holding values outside its list | geen CHECKWaarden die niet in de lijst staan, zouden de check laten mislukken, dus de check wordt niet aangemaakt. | enum_check_skipped |
| SET | VARCHAR2 zoals MySQL het schrijft ('a,b')Oracle heeft geen settype; de tekst is die MySQL teruggeeft. | |
| JSON | CLOBDe JSON-functies van Oracle lezen JSON uit tekst op elke versie, en een CLOB bewaart waarden van elke grootte. | |
| NUL bytes in text | behoudenVARCHAR2 en CLOB kunnen een NUL-teken bevatten, dus de waarde wordt ongewijzigd gekopieerd. | |
| text that isn't valid in its character set | de foute bytes als het vervangingstekenTekst moet als tekens worden gelezen om als VARCHAR2 te worden geschreven. | invalid_utf8_replaced |
| text decoded twice (ñ) | ongewijzigd gekopieerdDe dump bevat precies deze tekens, dus ze worden gekopieerd; het rapport wijst ze aan. | mojibake_suspected |
| AUTO_INCREMENT | GENERATED BY DEFAULT ON NULL AS IDENTITY, herstart voorbij de gekopieerde id'sDe gekopieerde id's laden ongewijzigd, en de teller gaat verder na het hoogste daarvan of na de AUTO_INCREMENT van de dump, welke hoger is. | |
| MyISAM AUTO_INCREMENT on the second column of a key | één teller voor de tabelMyISAM telt per groep van de eerste kolom van de sleutel; Oracle heeft één teller per tabel. | myisam_group_autoincrement |
| ON UPDATE CURRENT_TIMESTAMP | een BEFORE UPDATE-triggerDe trigger zet de kolom op de huidige tijd als een update hem niet instelt. | on_update_trigger |
| generated columns | virtuele kolommenOracle berekent gegenereerde kolommen alleen bij het lezen; STORED-kolommen worden virtueel met dezelfde waarden. | stored_as_virtual |
| generated columns with functions Oracle lacks | een gewone kolomEen formule die niet voor Oracle kan worden geschreven, levert een gewone kolom en een regel in het rapport op. | generated_not_translated |
| INVISIBLE columns | INVISIBLE-kolommenOracle verbergt onzichtbare kolommen voor SELECT *, zoals MySQL doet. | |
| CHECK constraints | vertaald, inline in CREATE TABLEInline checks worden getest terwijl elke rij laadt. | |
| CHECK constraints with functions Oracle lacks | niet aangemaaktEen check die niet voor Oracle kan worden geschreven, wordt weggelaten en gemeld. | check_skipped |
| CHECK ... NOT ENFORCED | niet aangemaaktMySQL bewaart deze checks zonder ze toe te passen, dus de rijen kunnen ze schenden. | check_not_enforced |
| defaults with functions Oracle lacks | geen standaardwaardeEen standaardwaarde die niet voor Oracle kan worden geschreven, wordt weggelaten en gemeld. | default_not_translated |
| keys and indexes on a prefix, c(20) | een index op SUBSTR van de kolomEen functie-index op hetzelfde begin van de kolom houdt dezelfde rijen uit elkaar, en indexeert CLOB-kolommen die Oracle niet in hun geheel kan indexeren. | prefix_unique |
| FULLTEXT indexes | niet aangemaaktOracle Text bouwt zoeken in volledige tekst met een eigen indextype en eigen query's. | fulltext_not_created |
| SPATIAL indexes | niet aangemaaktGeometrieën worden opgeslagen als WKB-bytes, die een ruimtelijke index niet kan lezen. | spatial_index_not_created |
| functional indexes, and indexes on whole CLOB or BLOB columns | niet aangemaaktOracle kan een groot object niet in zijn geheel indexeren, en sommige MySQL-functies hebben geen equivalent in Oracle. | index_skipped |
| foreign keys | na de data, ENABLE NOVALIDATE, daarna gevalideerd met een waarschuwing bij wezenDumps laden met FOREIGN_KEY_CHECKS=0 en MyISAM controleert nooit, dus rijen zonder ouder komen vaak voor. De sleutel controleert nieuwe rijen meteen en wordt als laatste gevalideerd; wezen laten hem ongevalideerd met een waarschuwing, in plaats van het laden te stoppen. | |
| ON UPDATE CASCADE, SET NULL or SET DEFAULT; ON DELETE SET DEFAULT | weggelatenRefererende sleutels in Oracle werken alleen bij verwijderen, met CASCADE of SET NULL. | foreign_key_action_unsupported |
| foreign keys to columns without a unique key | niet aangemaaktOracle heeft een primaire sleutel of een unieke constraint nodig op de kolommen waarnaar wordt verwezen; InnoDB niet. | foreign_key_skipped |
| table and column names | hoofdletters als het eenvoudige namen zijn, anders zoals geschrevenOracle slaat namen zonder aanhalingstekens op in hoofdletters, dus eenvoudige namen worden hoofdletters en query's kunnen de aanhalingstekens weglaten; andere namen houden hun hoofdletters en hebben aanhalingstekens nodig. | identifier_renamed |
| names over 128 bytes | ingekortNamen in Oracle 12.2 en later bevatten 128 bytes. | name_shortened |
| GEOMETRY, POINT, POLYGON... | BLOB met WKBWKB is het standaardformaat dat elke ruimtelijke bibliotheek leest; SDO_GEOMETRY heeft de metadata van Oracle Spatial nodig. | geometry_as_blob |
| INET4, INET6, UUID (MariaDB) | VARCHAR2(39), VARCHAR2(36)Oracle heeft geen van beide typen; de tekst is die MariaDB teruggeeft. | |
| BINARY, VARBINARY, BLOB | RAW tot 2000 bytes, anders BLOBBytes blijven bytes. | |
| PARTITION BY | één tabelDe rijen zijn dezelfde; partitioneer de tabel opnieuw in Oracle als dat nodig is. | partitions_dropped |
| WITH SYSTEM VERSIONING (MariaDB) | een tabel met de huidige rijenEen dump bevat alleen de huidige rijen. | system_versioning_dropped |
| MyISAM, MEMORY and other engines | een gewone tabelOracle heeft één tabelengine. | engine_dropped |
| views, triggers, procedures, functions and events | vermeld in het rapportHun code is geschreven in de taal van MySQL, dus ze worden vermeld zodat je ze opnieuw kunt maken. | not_converted_objects |
| dumps without CREATE TABLE | typen afgeleid uit de waardenEen dump gemaakt met --no-create-info bevat alleen rijen, dus de typen komen uit de waarden. | no_schema |
| geometries in a dump without CREATE TABLE | BLOB met WKBHet geometrieformaat van MySQL wordt herkend aan de waarden en opgeslagen als standaard-WKB. | geometry_inferred |
| _ci collations | exacte vergelijkingOracle vergelijkt tekst exact, tenzij anders aangegeven. | case_insensitive_collation |
| SET NAMES utf8 from utf8mb4 tables | geconverteerd, met een waarschuwingmysqldump van MySQL 5.x schrijft standaard 3-byte utf8 en vervangt elke emoji door een vraagteken voordat een converter het bestand ziet. | dump_lost_four_byte_chars |
| dumps without SET NAMES whose text isn't UTF-8 | gelezen als Latin-1 (Windows-1252)latin1 in MySQL is Windows-1252, de gebruikelijke codering van zulke dumps. | charset_guessed |
| sjis, cp932, gbk, big5 dumps | gelezen als UTF-8, met een waarschuwingDeze coderingen worden nog niet gedecodeerd. | unsupported_charset |
| UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rows | geëvalueerdSommige dumptools schrijven waarden als deze aanroepen; ze worden gelezen als de waarden die ze opleveren, met geografische WKT omgezet naar lengtegraad eerst. | |
| other expressions in rows | NULLEen converter die geen database draait, kan ze niet evalueren. | expression_value |
| DEFAULT in VALUES | de standaardwaarde van de kolomEen letterlijke standaardwaarde wordt in de rij gekopieerd. | default_keyword_filled |
| DEFAULT in VALUES without a literal default | NULLEr is geen waarde om te kopiëren. | default_keyword_null |
| REPLACE and INSERT IGNORE | gewone rijenEen dump heeft één rij per sleutel, dus de rijen zijn dezelfde. | replace_as_insert |
| types IntoSQL doesn't know | CLOBTekst kan elke waarde bevatten; wijzig het type na het laden. | unknown_type |
| values that don't fit their column | NULLEen beschadigde of met de hand geschreven dump kan waarden bevatten die de kolom niet aankan; ze worden NULL zodat de rest laadt. | invalid_value_null |
| unreadable geometries | NULLBytes die geen geometrie zijn, kunnen niet als geometrie worden opgeslagen. | bad_geometry |
| dumps of several databases | één schema, elke tabel met de naam van zijn database ervoorHet script laadt in het schema van de gebruiker die het uitvoert, dus tabellen uit verschillende databases krijgen de naam van hun database ervoor. | databases_merged |
| CREATE SEQUENCE (MariaDB) | CREATE SEQUENCE, op de waarde die hij had bereiktSequences in Oracle werken op dezelfde manier. | |
| VECTOR(n) (MariaDB 11.7+) | CLOB met de floats als JSON-arrayAlleen Oracle 23ai heeft een vectortype; een JSON-array behoudt elke float op elke versie. | type_replaced |
Het script in Oracle laden
Het script maakt de tabellen aan, kopieert de rijen en voegt daarna sleutels, indexen en refererende sleutels toe, zodat het snel laadt en bij de eerste fout stopt.
NLS_LANG=.AL32UTF8 sqlplus -S -L user@//localhost/mydb @mariadb.oracle.sqlRefererende sleutels worden toegevoegd met ENABLE NOVALIDATE, zodat nieuwe rijen meteen worden gecontroleerd, en daarna gevalideerd. Verwijst een oude rij naar een rij die niet bestaat, dan vertelt het script welke constraint het is en laat het die ongevalideerd, in plaats van halverwege te mislukken.
Voer bij een grote dump SQL*Plus uit op dezelfde machine als de database. Het script commit elke 100 rijen. De gebruiker die het uitvoert, heeft CREATE TABLE, CREATE SEQUENCE, CREATE TRIGGER en CREATE PROCEDURE nodig, en quota op zijn tablespace.
Een dump van MariaDB maken voor het beste resultaat
De converter leest wat de dump bevat. Met deze opties blijft er meer van je data in staan:
- --default-character-set=utf8mb4 behoudt emoji en andere 4-bytestekens, die een utf8mb3-dump kwijtraakt voordat de converter hem ziet.
- --hex-blob schrijft binaire kolommen en VECTOR-waarden als hexadecimaal, wat kopiëren tussen systemen overleeft.
- --routines --triggers --events voegen die objecten aan de dump toe, zodat het rapport ze kan vermelden.
Wat niet wordt geconverteerd
Weergaven, triggers, opgeslagen procedures, functies en gebeurtenissen zijn geschreven in de eigen taal van MariaDB. Ze staan op naam in het rapport en worden nooit stilletjes weggelaten, zodat je ze kunt herschrijven voor Oracle.
Vragen over MariaDB naar Oracle
Staat je vraag er niet bij? Schrijf ons via de contactpagina en een mens antwoordt. Contactpagina
Wordt mijn dump geüpload?
Nee. De converter draait in je browser en leest de dump in delen van je schijf, dus hij verlaat je computer nooit. De desktopapp en de opdrachtregel converteren ook op je computer.
Hoe groot mag de dump zijn?
De converter houdt nooit de hele dump in het geheugen: hij leest het bestand twee keer, in bereiken, en schrijft het script gaandeweg. Dumps van meerdere gigabytes worden geconverteerd in de browser, in de desktopapp en met de opdrachtregel.
Van welke MariaDB-versies kan de dump komen?
Dumps van mariadb-dump en mysqldump op MariaDB 10.3 tot en met 12, met één INSERT per tabel of één per rij. Elke testdump komt van MariaDB 10.11, 11.4 en 11.8 en wordt cel voor cel met zijn bron vergeleken.
Blijven UUID-, INET6-, JSON- en VECTOR-kolommen behouden?
UUID- en INET-kolommen worden VARCHAR2, JSON CLOB en VECTOR een JSON-array van zijn floats. Nuldatums worden NULL, en lege strings ook, zoals Oracle ze opslaat.
Blijven AUTO_INCREMENT-waarden en sequences behouden?
Ja. Elke AUTO_INCREMENT-kolom wordt een identity-kolom die verdergaat na het hoogste id. Sequences worden Oracle-sequences, en standaardwaarden die er een waarde uit halen, blijven dat doen.
En opgeslagen procedures en triggers?
Ze staan op naam in het rapport en worden niet geconverteerd, omdat elke database ze in een eigen taal schrijft.
Op welke Oracle-versies laadt het script?
Oracle 19c en later. Elke testdump laadt op 21c en 23ai en stopt bij de eerste fout als er iets misgaat.