Zum Inhalt springen
IntoSQL-Startseite

MariaDB in Oracle umwandeln

Leg einen Dump aus mariadb-dump, mysqldump, phpMyAdmin oder Adminer ab, als .sql oder .sql.gz, und lade ein Oracle-Skript mit denselben Tabellen, Schlüsseln, Indizes und Daten herunter. Jeder Wert, den Oracle nicht unverändert aufnehmen kann, und jedes Objekt, das es nicht übernimmt, steht im Bericht.

Deine Datei
sqlshop_2024_mariadb.sqlBeispieldatei, 6,6 kB
Deine Datenbank

18 Zeilen konvertiert, 4 Korrekturen, keine abgelehnt

Anzeigen

Tabellen in shop_2024_mariadb.sqlMariaDB-11.8.9-MariaDB-ubu2404-Dump · erstellt mit mariadb-dump · utf8mb4

  • customersgeschrieben als CUSTOMERS8 Zeilen2
    8 Spalten
    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)
  • ordersgeschrieben als ORDERS10 Zeilen2
    12 Spalten
    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;

Korrekturen

  1. "signed_up" von customers erlaubt jetzt NULL: Einige Werte ließen sich nicht speichern und sind NULL.
  2. Der Standardwert von "signed_up" in customers, 0000‑00‑00, ist kein Datum, das Oracle akzeptiert, daher hat die Spalte keinen Standardwert.
  3. "status" von orders erlaubt jetzt NULL: Einige Werte ließen sich nicht speichern und sind NULL.
  4. "updated_at" von orders wird bei jeder Änderung auf die aktuelle Zeit gesetzt; in Oracle übernimmt das ein Trigger.

Zu prüfen

  • 1 Wert in "signed_up" von customers ist ein Null- oder unmögliches Datum wie 0000‑00‑00, was Oracle nicht speichern kann, daher ist er NULL. Wenn diese Datumsangaben etwas bedeuten, ersetze sie vor dem Dump in der Quelle durch echte.
  • 1 Wert in "shipped_at" von orders ist ein Null- oder unmögliches Datum wie 0000‑00‑00 00:00:00, was Oracle nicht speichern kann, daher ist er NULL. Wenn diese Datumsangaben etwas bedeuten, ersetze sie vor dem Dump in der Quelle durch echte.
  • 1 leerer Wert in "status" von orders wurde NULL; Oracle speichert einen leeren String als NULL. Wo Abfragen diese Spalte mit ' vergleichen, vergleiche stattdessen mit IS NULL.

Deine Datei wird auf diesem Computer umgewandelt und nie hochgeladen.

Weitere Beispiele:

Was sich von MariaDB zu Oracle ändert

Jede Zeile ist eine Regel, die der Konverter anwendet, mit der Berichtszeile, die er schreibt, wenn die Regel etwas an deinen Daten ändert.

  • TINYINT(1), BOOL

    NUMBER(1) mit einem CHECK auf 0 und 1, wenn jeder Wert 0 oder 1 ist, sonst NUMBER(3)

    MySQLs BOOL ist ein TINYINT(1), das jede Zahl von -128 bis 127 aufnehmen kann. Oracle vor 23ai hat keine boolesche Spalte, daher ist eine Spalte mit 0 und 1 NUMBER(1) mit einer CHECK-Bedingung; eine mit 2 oder -1 behält ihre Zahlen.

    Berichtszeile: bool_kept_numeric

  • UNSIGNED integers

    NUMBER, breit genug für den Bereich, mit einem CHECK gegen negative Werte

    NUMBER in Oracle fasst jede Ganzzahl der Breiten, die MySQL hat; die CHECK-Bedingung hält negative Werte fern wie in MySQL.

  • ZEROFILL and display widths

    entfernt

    Das Auffüllen mit Nullen ist eine Darstellung der Zahl, kein Teil davon. Die Zahlen bleiben erhalten; formatiere sie beim Lesen, wenn die Auffüllung wichtig ist.

    Berichtszeile: zerofill_dropped

  • FLOAT(M,D)

    BINARY_FLOAT oder BINARY_DOUBLE, ohne die Nachkommastellen

    Die binären Gleitkommazahlen von Oracle haben keine feste Skalierung. Die gespeicherten Werte werden unverändert kopiert.

    Berichtszeile: float_scale_dropped

  • DECIMAL(p,s)

    NUMBER(p,s) bis 38 Stellen; darüber VARCHAR2

    NUMBER in Oracle fasst 38 Stellen. Breitere Dezimalzahlen bleiben Text, damit jede Stelle exakt bleibt.

    Berichtszeile: decimal_as_text

  • BIT(1), BIT(n)

    NUMBER(1), NUMBER(19) bis 63 Bit, NUMBER(20) für BIT(64)

    Bitfelder werden als die Zahl gespeichert, die ihre Bits ergeben.

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

    NULL

    Oracle speichert nur echte Kalenderdaten. MySQL behält Null- und unmögliche Datumsangaben, wenn sein SQL-Modus sie erlaubt; sie werden NULL, und der Bericht zählt sie.

    Berichtszeile: invalid_date_null

  • NOT NULL columns with values that become NULL

    NOT NULL entfernt

    Eine Spalte, deren Werte NULL werden mussten, auch leere Strings, kann NOT NULL nicht behalten, sonst würde das Laden abbrechen.

    Berichtszeile: not_null_relaxed

  • empty strings and empty binary values

    NULL

    Oracle speichert einen leeren String als NULL, daher wird ein Wert, der ' war, als NULL gelesen. Der Bericht zählt sie pro Spalte.

    Berichtszeile: empty_string_null

  • DEFAULT '0000-00-00'

    kein Standardwert

    Ein Standardwert, den Oracle nicht speichern kann, wird weggelassen, statt durch ein erfundenes Datum ersetzt zu werden.

    Berichtszeile: zero_date_default

  • TIME

    INTERVAL DAY TO SECOND, das Dauern fasst

    Oracle hat keinen Uhrzeittyp, und MySQLs TIME ist eine Dauer von -838:59:59 bis 838:59:59; ein Intervall fasst jeden Wert.

  • YEAR

    NUMBER(4) mit einem CHECK seines Bereichs

    Oracle hat keinen Jahrestyp; die CHECK-Bedingung behält dieselben Werte, die MySQL erlaubt.

  • CHAR(n), VARCHAR(n)

    VARCHAR2(n CHAR), zählt Zeichen

    Längen zählen Zeichen wie in MySQL, und MySQL gibt CHAR-Werte ohne nachgestellte Leerzeichen zurück, wie VARCHAR2 sie behält.

  • VARCHAR(n) and TEXT longer than 4000 bytes

    CLOB

    Ein VARCHAR2 fasst standardmäßig 4000 Bytes, daher wird längerer Text ein CLOB; eine Spalte, deren Werte alle passen, behält VARCHAR2.

    Berichtszeile: text_as_lob

  • DATETIME

    TIMESTAMP

    Ein DATETIME ist eine Uhrzeitangabe ohne Zeitzone, wie TIMESTAMP. DATE wird Oracles DATE, das auch eine Uhrzeit enthält, die auf Mitternacht bleibt.

  • TIMESTAMP

    TIMESTAMP WITH TIME ZONE in der Zone, die der Dump angibt, UTC, wenn er keine angibt

    Ein TIMESTAMP ist ein Zeitpunkt. Dumps geben die Zone an, in der sie ihn geschrieben haben (mysqldump schreibt UTC); ohne diese Angabe werden die Werte als UTC gelesen, und der Bericht sagt es.

    Berichtszeile: timestamp_zone_assumed

  • ENUM

    VARCHAR2 mit einem CHECK der erlaubten Werte

    Text mit einer CHECK-Bedingung behält dieselben Werte.

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

    NULL

    MySQL speichert einen leeren String, wenn in einem nachsichtigen SQL-Modus ein ungültiger Wert in ein ENUM geschrieben wird. Oracle speichert ihn als NULL, was die CHECK-Bedingung erlaubt, und der Bericht zählt ihn mit den anderen leeren Werten.

  • ENUM holding values outside its list

    kein CHECK

    Werte, die nicht in der Liste stehen, würden die CHECK-Bedingung verletzen, daher wird sie nicht angelegt.

    Berichtszeile: enum_check_skipped

  • SET

    VARCHAR2, wie MySQL es schreibt ('a,b')

    Oracle hat keinen Mengentyp; der Text ist der, den MySQL zurückgibt.

  • JSON

    CLOB

    Die JSON-Funktionen von Oracle lesen JSON auf jeder Version aus Text, und ein CLOB behält Werte jeder Größe.

  • NUL bytes in text

    beibehalten

    VARCHAR2 und CLOB können ein NUL-Zeichen enthalten, daher wird der Wert unverändert kopiert.

  • text that isn't valid in its character set

    die fehlerhaften Bytes als Ersatzzeichen

    Text muss als Zeichen gelesen werden, um als VARCHAR2 geschrieben zu werden.

    Berichtszeile: invalid_utf8_replaced

  • text decoded twice (ñ)

    unverändert kopiert

    Der Dump enthält genau diese Zeichen, daher werden sie kopiert; der Bericht weist auf sie hin.

    Berichtszeile: mojibake_suspected

  • AUTO_INCREMENT

    GENERATED BY DEFAULT ON NULL AS IDENTITY, neu gestartet hinter den kopierten IDs

    Die kopierten IDs laden unverändert, und der Zähler macht nach der höchsten weiter oder nach dem AUTO_INCREMENT des Dumps, je nachdem, was höher ist.

  • MyISAM AUTO_INCREMENT on the second column of a key

    ein Zähler für die Tabelle

    MyISAM zählt pro Gruppe der ersten Schlüsselspalte; Oracle hat einen Zähler pro Tabelle.

    Berichtszeile: myisam_group_autoincrement

  • ON UPDATE CURRENT_TIMESTAMP

    ein Trigger mit BEFORE UPDATE

    Der Trigger setzt die Spalte auf die aktuelle Zeit, wenn eine Änderung sie nicht setzt.

    Berichtszeile: on_update_trigger

  • generated columns

    virtuelle Spalten

    Oracle berechnet generierte Spalten nur beim Lesen; STORED-Spalten werden virtuell, mit denselben Werten.

    Berichtszeile: stored_as_virtual

  • generated columns with functions Oracle lacks

    eine normale Spalte

    Eine Formel, die sich nicht für Oracle schreiben lässt, hinterlässt eine normale Spalte und eine Zeile im Bericht.

    Berichtszeile: generated_not_translated

  • INVISIBLE columns

    INVISIBLE-Spalten

    Oracle blendet unsichtbare Spalten bei SELECT * aus, wie MySQL.

  • CHECK constraints

    übersetzt, inline in CREATE TABLE

    Inline-CHECK-Bedingungen werden beim Laden jeder Zeile geprüft.

  • CHECK constraints with functions Oracle lacks

    nicht angelegt

    Eine CHECK-Bedingung, die sich nicht für Oracle schreiben lässt, wird weggelassen und gemeldet.

    Berichtszeile: check_skipped

  • CHECK ... NOT ENFORCED

    nicht angelegt

    MySQL behält diese CHECK-Bedingungen, ohne sie anzuwenden, daher können Zeilen sie verletzen.

    Berichtszeile: check_not_enforced

  • defaults with functions Oracle lacks

    kein Standardwert

    Ein Standardwert, der sich nicht für Oracle schreiben lässt, wird weggelassen und gemeldet.

    Berichtszeile: default_not_translated

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

    ein Index auf SUBSTR der Spalte

    Ein Funktionsindex auf demselben Anfang der Spalte hält dieselben Zeilen auseinander und indiziert CLOB-Spalten, die Oracle nicht ganz indizieren kann.

    Berichtszeile: prefix_unique

  • FULLTEXT indexes

    nicht angelegt

    Oracle Text baut Volltextsuche mit eigenem Indextyp und eigenen Abfragen.

    Berichtszeile: fulltext_not_created

  • SPATIAL indexes

    nicht angelegt

    Geometrien werden als WKB-Bytes gespeichert, die ein räumlicher Index nicht lesen kann.

    Berichtszeile: spatial_index_not_created

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

    nicht angelegt

    Oracle kann ein großes Objekt nicht ganz indizieren, und manche MySQL-Funktionen haben keine Entsprechung in Oracle.

    Berichtszeile: index_skipped

  • foreign keys

    nach den Daten, ENABLE NOVALIDATE, dann validiert, mit einer Warnung bei verwaisten Zeilen

    Dumps laden mit FOREIGN_KEY_CHECKS=0, und MyISAM prüft nie, daher sind Zeilen ohne Elternzeile häufig. Der Schlüssel prüft neue Zeilen sofort und wird zuletzt validiert; verwaiste Zeilen lassen ihn mit einer Warnung unvalidiert, statt das Laden abzubrechen.

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

    entfernt

    Fremdschlüssel in Oracle wirken nur beim Löschen, mit CASCADE oder SET NULL.

    Berichtszeile: foreign_key_action_unsupported

  • foreign keys to columns without a unique key

    nicht angelegt

    Oracle braucht einen Primärschlüssel oder eine eindeutige Bedingung auf den referenzierten Spalten; InnoDB nicht.

    Berichtszeile: foreign_key_skipped

  • table and column names

    in Großbuchstaben, wenn es einfache Namen sind, sonst wie geschrieben

    Oracle speichert Namen ohne Anführungszeichen in Großbuchstaben, daher werden einfache Namen großgeschrieben, und Abfragen können die Anführungszeichen weglassen; andere Namen behalten ihre Schreibung und brauchen Anführungszeichen.

    Berichtszeile: identifier_renamed

  • names over 128 bytes

    gekürzt

    Namen in Oracle 12.2 und neuer fassen 128 Bytes.

    Berichtszeile: name_shortened

  • GEOMETRY, POINT, POLYGON...

    BLOB mit WKB

    WKB ist das Standardformat, das jede räumliche Bibliothek liest; SDO_GEOMETRY braucht die Metadaten von Oracle Spatial.

    Berichtszeile: geometry_as_blob

  • INET4, INET6, UUID (MariaDB)

    VARCHAR2(39), VARCHAR2(36)

    Oracle hat keinen der beiden Typen; der Text ist der, den MariaDB zurückgibt.

  • BINARY, VARBINARY, BLOB

    RAW bis 2000 Bytes, sonst BLOB

    Bytes bleiben Bytes.

  • PARTITION BY

    eine Tabelle

    Die Zeilen bleiben dieselben; partitioniere die Tabelle in Oracle neu, wenn nötig.

    Berichtszeile: partitions_dropped

  • WITH SYSTEM VERSIONING (MariaDB)

    eine Tabelle mit den aktuellen Zeilen

    Ein Dump enthält nur die aktuellen Zeilen.

    Berichtszeile: system_versioning_dropped

  • MyISAM, MEMORY and other engines

    eine normale Tabelle

    Oracle hat eine einzige Tabellen-Engine.

    Berichtszeile: engine_dropped

  • views, triggers, procedures, functions and events

    im Bericht aufgeführt

    Ihr Code ist in der Sprache von MySQL geschrieben, daher werden sie aufgeführt, damit du sie neu anlegst.

    Berichtszeile: not_converted_objects

  • dumps without CREATE TABLE

    Typen aus den Werten gelesen

    Ein mit --no-create-info erstellter Dump enthält nur Zeilen, daher kommen die Typen aus den Werten.

    Berichtszeile: no_schema

  • geometries in a dump without CREATE TABLE

    BLOB mit WKB

    Das Geometrieformat von MySQL wird an den Werten erkannt und als Standard-WKB gespeichert.

    Berichtszeile: geometry_inferred

  • _ci collations

    exakter Vergleich

    Oracle vergleicht Text exakt, sofern nicht anders angegeben.

    Berichtszeile: case_insensitive_collation

  • SET NAMES utf8 from utf8mb4 tables

    konvertiert, mit einer Warnung

    mysqldump aus MySQL 5.x schreibt standardmäßig 3-Byte-utf8 und ersetzt jedes Emoji durch ein Fragezeichen, bevor ein Konverter die Datei sieht.

    Berichtszeile: dump_lost_four_byte_chars

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

    als Latin-1 (Windows-1252) gelesen

    latin1 in MySQL ist Windows-1252, die übliche Kodierung solcher Dumps.

    Berichtszeile: charset_guessed

  • sjis, cp932, gbk, big5 dumps

    als UTF-8 gelesen, mit einer Warnung

    Diese Kodierungen werden noch nicht dekodiert.

    Berichtszeile: unsupported_charset

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

    ausgewertet

    Manche Dump-Werkzeuge schreiben Werte als solche Aufrufe; sie werden als die Werte gelesen, die sie ergeben, wobei geografisches WKT auf Längengrad zuerst umgestellt wird.

  • other expressions in rows

    NULL

    Ein Konverter, der keine Datenbank ausführt, kann sie nicht auswerten.

    Berichtszeile: expression_value

  • DEFAULT in VALUES

    der Standardwert der Spalte

    Ein literaler Standardwert wird in die Zeile kopiert.

    Berichtszeile: default_keyword_filled

  • DEFAULT in VALUES without a literal default

    NULL

    Es gibt keinen Wert zum Kopieren.

    Berichtszeile: default_keyword_null

  • REPLACE and INSERT IGNORE

    normale Zeilen

    Ein Dump hat eine Zeile pro Schlüssel, daher sind die Zeilen dieselben.

    Berichtszeile: replace_as_insert

  • types IntoSQL doesn't know

    CLOB

    Text nimmt jeden Wert auf; ändere den Typ nach dem Laden.

    Berichtszeile: unknown_type

  • values that don't fit their column

    NULL

    Ein beschädigter oder von Hand geschriebener Dump kann Werte enthalten, die seine Spalte nicht aufnehmen kann; sie werden NULL, damit der Rest lädt.

    Berichtszeile: invalid_value_null

  • unreadable geometries

    NULL

    Bytes, die keine Geometrie sind, lassen sich nicht als solche speichern.

    Berichtszeile: bad_geometry

  • dumps of several databases

    ein Schema, jede Tabelle mit dem Namen ihrer Datenbank vorangestellt

    Das Skript lädt in das Schema des ausführenden Benutzers, daher bekommen Tabellen verschiedener Datenbanken den Namen ihrer Datenbank vorangestellt.

    Berichtszeile: databases_merged

  • CREATE SEQUENCE (MariaDB)

    CREATE SEQUENCE, beim erreichten Wert

    Sequenzen in Oracle funktionieren genauso.

  • VECTOR(n) (MariaDB 11.7+)

    CLOB mit den Gleitkommazahlen als JSON-Array

    Nur Oracle 23ai hat einen vector-Typ; ein JSON-Array behält jede Gleitkommazahl auf jeder Version.

    Berichtszeile: type_replaced

In MariaDBIn OracleBerichtszeile
TINYINT(1), BOOLNUMBER(1) mit einem CHECK auf 0 und 1, wenn jeder Wert 0 oder 1 ist, sonst NUMBER(3)MySQLs BOOL ist ein TINYINT(1), das jede Zahl von -128 bis 127 aufnehmen kann. Oracle vor 23ai hat keine boolesche Spalte, daher ist eine Spalte mit 0 und 1 NUMBER(1) mit einer CHECK-Bedingung; eine mit 2 oder -1 behält ihre Zahlen.bool_kept_numeric
UNSIGNED integersNUMBER, breit genug für den Bereich, mit einem CHECK gegen negative WerteNUMBER in Oracle fasst jede Ganzzahl der Breiten, die MySQL hat; die CHECK-Bedingung hält negative Werte fern wie in MySQL.
ZEROFILL and display widthsentferntDas Auffüllen mit Nullen ist eine Darstellung der Zahl, kein Teil davon. Die Zahlen bleiben erhalten; formatiere sie beim Lesen, wenn die Auffüllung wichtig ist.zerofill_dropped
FLOAT(M,D)BINARY_FLOAT oder BINARY_DOUBLE, ohne die NachkommastellenDie binären Gleitkommazahlen von Oracle haben keine feste Skalierung. Die gespeicherten Werte werden unverändert kopiert.float_scale_dropped
DECIMAL(p,s)NUMBER(p,s) bis 38 Stellen; darüber VARCHAR2NUMBER in Oracle fasst 38 Stellen. Breitere Dezimalzahlen bleiben Text, damit jede Stelle exakt bleibt.decimal_as_text
BIT(1), BIT(n)NUMBER(1), NUMBER(19) bis 63 Bit, NUMBER(20) für BIT(64)Bitfelder werden als die Zahl gespeichert, die ihre Bits ergeben.
zero, partial or impossible dates (0000-00-00, 2024-02-30)NULLOracle speichert nur echte Kalenderdaten. MySQL behält Null- und unmögliche Datumsangaben, wenn sein SQL-Modus sie erlaubt; sie werden NULL, und der Bericht zählt sie.invalid_date_null
NOT NULL columns with values that become NULLNOT NULL entferntEine Spalte, deren Werte NULL werden mussten, auch leere Strings, kann NOT NULL nicht behalten, sonst würde das Laden abbrechen.not_null_relaxed
empty strings and empty binary valuesNULLOracle speichert einen leeren String als NULL, daher wird ein Wert, der ' war, als NULL gelesen. Der Bericht zählt sie pro Spalte.empty_string_null
DEFAULT '0000-00-00'kein StandardwertEin Standardwert, den Oracle nicht speichern kann, wird weggelassen, statt durch ein erfundenes Datum ersetzt zu werden.zero_date_default
TIMEINTERVAL DAY TO SECOND, das Dauern fasstOracle hat keinen Uhrzeittyp, und MySQLs TIME ist eine Dauer von -838:59:59 bis 838:59:59; ein Intervall fasst jeden Wert.
YEARNUMBER(4) mit einem CHECK seines BereichsOracle hat keinen Jahrestyp; die CHECK-Bedingung behält dieselben Werte, die MySQL erlaubt.
CHAR(n), VARCHAR(n)VARCHAR2(n CHAR), zählt ZeichenLängen zählen Zeichen wie in MySQL, und MySQL gibt CHAR-Werte ohne nachgestellte Leerzeichen zurück, wie VARCHAR2 sie behält.
VARCHAR(n) and TEXT longer than 4000 bytesCLOBEin VARCHAR2 fasst standardmäßig 4000 Bytes, daher wird längerer Text ein CLOB; eine Spalte, deren Werte alle passen, behält VARCHAR2.text_as_lob
DATETIMETIMESTAMPEin DATETIME ist eine Uhrzeitangabe ohne Zeitzone, wie TIMESTAMP. DATE wird Oracles DATE, das auch eine Uhrzeit enthält, die auf Mitternacht bleibt.
TIMESTAMPTIMESTAMP WITH TIME ZONE in der Zone, die der Dump angibt, UTC, wenn er keine angibtEin TIMESTAMP ist ein Zeitpunkt. Dumps geben die Zone an, in der sie ihn geschrieben haben (mysqldump schreibt UTC); ohne diese Angabe werden die Werte als UTC gelesen, und der Bericht sagt es.timestamp_zone_assumed
ENUMVARCHAR2 mit einem CHECK der erlaubten WerteText mit einer CHECK-Bedingung behält dieselben Werte.
ENUM holding '' (MySQL's error value)NULLMySQL speichert einen leeren String, wenn in einem nachsichtigen SQL-Modus ein ungültiger Wert in ein ENUM geschrieben wird. Oracle speichert ihn als NULL, was die CHECK-Bedingung erlaubt, und der Bericht zählt ihn mit den anderen leeren Werten.
ENUM holding values outside its listkein CHECKWerte, die nicht in der Liste stehen, würden die CHECK-Bedingung verletzen, daher wird sie nicht angelegt.enum_check_skipped
SETVARCHAR2, wie MySQL es schreibt ('a,b')Oracle hat keinen Mengentyp; der Text ist der, den MySQL zurückgibt.
JSONCLOBDie JSON-Funktionen von Oracle lesen JSON auf jeder Version aus Text, und ein CLOB behält Werte jeder Größe.
NUL bytes in textbeibehaltenVARCHAR2 und CLOB können ein NUL-Zeichen enthalten, daher wird der Wert unverändert kopiert.
text that isn't valid in its character setdie fehlerhaften Bytes als ErsatzzeichenText muss als Zeichen gelesen werden, um als VARCHAR2 geschrieben zu werden.invalid_utf8_replaced
text decoded twice (ñ)unverändert kopiertDer Dump enthält genau diese Zeichen, daher werden sie kopiert; der Bericht weist auf sie hin.mojibake_suspected
AUTO_INCREMENTGENERATED BY DEFAULT ON NULL AS IDENTITY, neu gestartet hinter den kopierten IDsDie kopierten IDs laden unverändert, und der Zähler macht nach der höchsten weiter oder nach dem AUTO_INCREMENT des Dumps, je nachdem, was höher ist.
MyISAM AUTO_INCREMENT on the second column of a keyein Zähler für die TabelleMyISAM zählt pro Gruppe der ersten Schlüsselspalte; Oracle hat einen Zähler pro Tabelle.myisam_group_autoincrement
ON UPDATE CURRENT_TIMESTAMPein Trigger mit BEFORE UPDATEDer Trigger setzt die Spalte auf die aktuelle Zeit, wenn eine Änderung sie nicht setzt.on_update_trigger
generated columnsvirtuelle SpaltenOracle berechnet generierte Spalten nur beim Lesen; STORED-Spalten werden virtuell, mit denselben Werten.stored_as_virtual
generated columns with functions Oracle lackseine normale SpalteEine Formel, die sich nicht für Oracle schreiben lässt, hinterlässt eine normale Spalte und eine Zeile im Bericht.generated_not_translated
INVISIBLE columnsINVISIBLE-SpaltenOracle blendet unsichtbare Spalten bei SELECT * aus, wie MySQL.
CHECK constraintsübersetzt, inline in CREATE TABLEInline-CHECK-Bedingungen werden beim Laden jeder Zeile geprüft.
CHECK constraints with functions Oracle lacksnicht angelegtEine CHECK-Bedingung, die sich nicht für Oracle schreiben lässt, wird weggelassen und gemeldet.check_skipped
CHECK ... NOT ENFORCEDnicht angelegtMySQL behält diese CHECK-Bedingungen, ohne sie anzuwenden, daher können Zeilen sie verletzen.check_not_enforced
defaults with functions Oracle lackskein StandardwertEin Standardwert, der sich nicht für Oracle schreiben lässt, wird weggelassen und gemeldet.default_not_translated
keys and indexes on a prefix, c(20)ein Index auf SUBSTR der SpalteEin Funktionsindex auf demselben Anfang der Spalte hält dieselben Zeilen auseinander und indiziert CLOB-Spalten, die Oracle nicht ganz indizieren kann.prefix_unique
FULLTEXT indexesnicht angelegtOracle Text baut Volltextsuche mit eigenem Indextyp und eigenen Abfragen.fulltext_not_created
SPATIAL indexesnicht angelegtGeometrien werden als WKB-Bytes gespeichert, die ein räumlicher Index nicht lesen kann.spatial_index_not_created
functional indexes, and indexes on whole CLOB or BLOB columnsnicht angelegtOracle kann ein großes Objekt nicht ganz indizieren, und manche MySQL-Funktionen haben keine Entsprechung in Oracle.index_skipped
foreign keysnach den Daten, ENABLE NOVALIDATE, dann validiert, mit einer Warnung bei verwaisten ZeilenDumps laden mit FOREIGN_KEY_CHECKS=0, und MyISAM prüft nie, daher sind Zeilen ohne Elternzeile häufig. Der Schlüssel prüft neue Zeilen sofort und wird zuletzt validiert; verwaiste Zeilen lassen ihn mit einer Warnung unvalidiert, statt das Laden abzubrechen.
ON UPDATE CASCADE, SET NULL or SET DEFAULT; ON DELETE SET DEFAULTentferntFremdschlüssel in Oracle wirken nur beim Löschen, mit CASCADE oder SET NULL.foreign_key_action_unsupported
foreign keys to columns without a unique keynicht angelegtOracle braucht einen Primärschlüssel oder eine eindeutige Bedingung auf den referenzierten Spalten; InnoDB nicht.foreign_key_skipped
table and column namesin Großbuchstaben, wenn es einfache Namen sind, sonst wie geschriebenOracle speichert Namen ohne Anführungszeichen in Großbuchstaben, daher werden einfache Namen großgeschrieben, und Abfragen können die Anführungszeichen weglassen; andere Namen behalten ihre Schreibung und brauchen Anführungszeichen.identifier_renamed
names over 128 bytesgekürztNamen in Oracle 12.2 und neuer fassen 128 Bytes.name_shortened
GEOMETRY, POINT, POLYGON...BLOB mit WKBWKB ist das Standardformat, das jede räumliche Bibliothek liest; SDO_GEOMETRY braucht die Metadaten von Oracle Spatial.geometry_as_blob
INET4, INET6, UUID (MariaDB)VARCHAR2(39), VARCHAR2(36)Oracle hat keinen der beiden Typen; der Text ist der, den MariaDB zurückgibt.
BINARY, VARBINARY, BLOBRAW bis 2000 Bytes, sonst BLOBBytes bleiben Bytes.
PARTITION BYeine TabelleDie Zeilen bleiben dieselben; partitioniere die Tabelle in Oracle neu, wenn nötig.partitions_dropped
WITH SYSTEM VERSIONING (MariaDB)eine Tabelle mit den aktuellen ZeilenEin Dump enthält nur die aktuellen Zeilen.system_versioning_dropped
MyISAM, MEMORY and other engineseine normale TabelleOracle hat eine einzige Tabellen-Engine.engine_dropped
views, triggers, procedures, functions and eventsim Bericht aufgeführtIhr Code ist in der Sprache von MySQL geschrieben, daher werden sie aufgeführt, damit du sie neu anlegst.not_converted_objects
dumps without CREATE TABLETypen aus den Werten gelesenEin mit --no-create-info erstellter Dump enthält nur Zeilen, daher kommen die Typen aus den Werten.no_schema
geometries in a dump without CREATE TABLEBLOB mit WKBDas Geometrieformat von MySQL wird an den Werten erkannt und als Standard-WKB gespeichert.geometry_inferred
_ci collationsexakter VergleichOracle vergleicht Text exakt, sofern nicht anders angegeben.case_insensitive_collation
SET NAMES utf8 from utf8mb4 tableskonvertiert, mit einer Warnungmysqldump aus MySQL 5.x schreibt standardmäßig 3-Byte-utf8 und ersetzt jedes Emoji durch ein Fragezeichen, bevor ein Konverter die Datei sieht.dump_lost_four_byte_chars
dumps without SET NAMES whose text isn't UTF-8als Latin-1 (Windows-1252) gelesenlatin1 in MySQL ist Windows-1252, die übliche Kodierung solcher Dumps.charset_guessed
sjis, cp932, gbk, big5 dumpsals UTF-8 gelesen, mit einer WarnungDiese Kodierungen werden noch nicht dekodiert.unsupported_charset
UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rowsausgewertetManche Dump-Werkzeuge schreiben Werte als solche Aufrufe; sie werden als die Werte gelesen, die sie ergeben, wobei geografisches WKT auf Längengrad zuerst umgestellt wird.
other expressions in rowsNULLEin Konverter, der keine Datenbank ausführt, kann sie nicht auswerten.expression_value
DEFAULT in VALUESder Standardwert der SpalteEin literaler Standardwert wird in die Zeile kopiert.default_keyword_filled
DEFAULT in VALUES without a literal defaultNULLEs gibt keinen Wert zum Kopieren.default_keyword_null
REPLACE and INSERT IGNOREnormale ZeilenEin Dump hat eine Zeile pro Schlüssel, daher sind die Zeilen dieselben.replace_as_insert
types IntoSQL doesn't knowCLOBText nimmt jeden Wert auf; ändere den Typ nach dem Laden.unknown_type
values that don't fit their columnNULLEin beschädigter oder von Hand geschriebener Dump kann Werte enthalten, die seine Spalte nicht aufnehmen kann; sie werden NULL, damit der Rest lädt.invalid_value_null
unreadable geometriesNULLBytes, die keine Geometrie sind, lassen sich nicht als solche speichern.bad_geometry
dumps of several databasesein Schema, jede Tabelle mit dem Namen ihrer Datenbank vorangestelltDas Skript lädt in das Schema des ausführenden Benutzers, daher bekommen Tabellen verschiedener Datenbanken den Namen ihrer Datenbank vorangestellt.databases_merged
CREATE SEQUENCE (MariaDB)CREATE SEQUENCE, beim erreichten WertSequenzen in Oracle funktionieren genauso.
VECTOR(n) (MariaDB 11.7+)CLOB mit den Gleitkommazahlen als JSON-ArrayNur Oracle 23ai hat einen vector-Typ; ein JSON-Array behält jede Gleitkommazahl auf jeder Version.type_replaced

Das Skript in Oracle laden

Das Skript legt die Tabellen an, kopiert die Zeilen und fügt dann Schlüssel, Indizes und Fremdschlüssel hinzu, so lädt es schnell und hält beim ersten Fehler an.

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

Fremdschlüssel werden mit ENABLE NOVALIDATE hinzugefügt, sodass neue Zeilen sofort geprüft werden, und dann validiert. Verweist eine alte Zeile auf eine nicht vorhandene Zeile, nennt das Skript den Fremdschlüssel und lässt ihn unvalidiert, statt auf halbem Weg abzubrechen.

Führe bei einem großen Dump SQL*Plus auf dem Rechner der Datenbank aus. Das Skript schreibt alle 100 Zeilen fest. Der ausführende Benutzer braucht CREATE TABLE, CREATE SEQUENCE, CREATE TRIGGER und CREATE PROCEDURE sowie Quota auf seinem Tablespace.

Den MariaDB-Dump für das beste Ergebnis erstellen

Der Konverter liest, was der Dump enthält. Mit diesen Optionen bleibt mehr von deinen Daten darin:

  • --default-character-set=utf8mb4 bewahrt Emoji und andere 4-Byte-Zeichen, die ein utf8mb3-Dump verliert, bevor der Konverter ihn sieht.
  • --hex-blob schreibt Binärspalten und VECTOR-Werte hexadezimal, was das Kopieren zwischen Systemen übersteht.
  • --routines --triggers --events fügen diese Objekte dem Dump hinzu, damit der Bericht sie auflisten kann.

Was nicht konvertiert wird

Sichten, Trigger, gespeicherte Prozeduren, Funktionen und Ereignisse sind in der eigenen Sprache von MariaDB geschrieben. Sie stehen mit Namen im Bericht und werden nie stillschweigend weggelassen, damit du sie für Oracle neu schreiben kannst.

Fragen zu MariaDB zu Oracle

Keine Antwort gefunden? Schreib uns über die Kontaktseite, und ein Mensch antwortet. Kontaktseite

Wird mein Dump hochgeladen?

Nein. Der Konverter läuft in deinem Browser und liest den Dump stückweise von deiner Festplatte, daher verlässt er nie deinen Computer. Die Desktop-App und die Kommandozeile konvertieren ebenfalls auf deinem Computer.

Wie groß darf der Dump sein?

Der Konverter hält nie den ganzen Dump im Speicher: Er liest die Datei zweimal, in Abschnitten, und schreibt das Skript fortlaufend. Dumps von mehreren Gigabyte werden im Browser, in der Desktop-App und mit der Kommandozeile konvertiert.

Aus welchen MariaDB-Versionen kann der Dump stammen?

Dumps aus mariadb-dump und mysqldump auf MariaDB 10.3 bis 12, mit einem INSERT pro Tabelle oder einem pro Zeile. Jeder Test-Dump stammt aus MariaDB 10.11, 11.4 und 11.8 und wird Zelle für Zelle mit seiner Quelle verglichen.

Bleiben UUID-, INET6-, JSON- und VECTOR-Spalten erhalten?

UUID- und INET-Spalten werden VARCHAR2, JSON CLOB und VECTOR ein JSON-Array seiner Gleitkommazahlen. Null-Daten werden NULL, ebenso leere Strings, wie Oracle sie speichert.

Bleiben AUTO_INCREMENT-Werte und Sequenzen erhalten?

Ja. Jede AUTO_INCREMENT-Spalte wird eine Identity-Spalte, die nach der höchsten ID weitermacht. Sequenzen werden Oracle-Sequenzen, und Standardwerte, die aus einer Sequenz ziehen, ziehen weiter aus ihr.

Was ist mit gespeicherten Prozeduren und Triggern?

Sie stehen mit Namen im Bericht und werden nicht konvertiert, weil jede Datenbank sie in ihrer eigenen Sprache schreibt.

Auf welchen Oracle-Versionen lädt das Skript?

Oracle 19c und neuer. Jeder Test-Dump lädt auf 21c und 23ai und hält beim ersten Fehler an, falls etwas schiefgeht.