Przejdź do treści
Strona główna IntoSQL

Konwertuj Oracle do MariaDB

Upuść plik .sql zapisany przez Database Export w SQL Developer lub przez SQLcl, z tabelami i instrukcjami Insert, i pobierz skrypt MariaDB z tymi samymi tabelami, kluczami, indeksami i danymi. Każda wartość, której MariaDB nie może przechować bez zmian, i każdy obiekt, którego nie przenosi, są wymienione w raporcie.

Twój plik
sqlshop_2024_oracle.sqlPlik przykładowy, 9,3 kB
Twoja baza danych

18 wierszy przekonwertowanych, bez poprawek, brak odrzuconych

Pokaż

Tabele w pliku shop_2024_oracle.sqlZrzut Oracle · zapisany przez SQL Developer · utf-8

  • customers8 wierszy
    7 kolumn
    idbigint not null
    namevarchar(100) not null
    emailvarchar(150) not null
    countrychar(2) not null
    is_activesmallint not null
    signed_updatetime
    created_atdatetime not null
  • orders10 wierszy
    9 kolumn
    idbigint not null
    customer_idbigint not null
    invoicebigint
    statusvarchar(10) not null
    totaldecimal(10,2) not null
    itemsint not null
    ordered_atdatetime not null
    shipped_atdatetime
    notevarchar(255)
-- Written by IntoSQL from a Oracle dump. Load it with: mariadb --default-character-set=utf8mb4 <database> < <file>
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
SET UNIQUE_CHECKS = 0;
SET SQL_MODE = 'NO_AUTO_VALUE_ON_ZERO,ALLOW_INVALID_DATES';

CREATE SEQUENCE `invoice_numbers` START WITH 1020 MINVALUE 1 INCREMENT BY 1;
CREATE TABLE `customers` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `email` varchar(150) NOT NULL,
  `country` char(2) NOT NULL DEFAULT 'US',
  `is_active` smallint NOT NULL DEFAULT 1,
  `signed_up` datetime,
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `customers_email_uk` (`email`),
  CONSTRAINT `check1` CHECK (`is_active` IN (0, 1))
) AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='People who bought at least once';

CREATE TABLE `orders` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `customer_id` bigint NOT NULL,
  `invoice` bigint DEFAULT (nextval(`invoice_numbers`)),
  `status` varchar(10) NOT NULL DEFAULT 'pending',
  `total` decimal(10,2) NOT NULL,
  `items` int NOT NULL DEFAULT 1,
  `ordered_at` datetime NOT NULL,
  `shipped_at` datetime,
  `note` varchar(255),
  PRIMARY KEY (`id`),
  KEY `orders_status_date_ix` (`status`,`ordered_at`),
  CONSTRAINT `check1` CHECK (`status` IN ('pending', 'paid', 'shipped', 'cancelled')),
  CONSTRAINT `orders_customer_fk` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`id`)
) AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (1,'Ana Martínez','ana@example.com','MX',1,'2023-01-15 00:00:00','2023-01-15 10:24:00.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (2,'Zoë Müller','zoe@example.de','DE',1,'2023-02-03 00:00:00','2023-02-03 08:11:42.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (3,'José Peña','jose@example.es','ES',0,'2023-03-21 00:00:00','2023-03-21 19:05:17.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (4,'李雷','lilei@example.cn','CN',1,'2023-05-09 00:00:00','2023-05-09 02:40:00.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (5,'Noah O\'Brien','noah@example.ie','IE',1,NULL,'2023-06-30 14:00:00.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (6,'Amélie Laurent','amelie@example.fr','FR',1,'2024-01-02 00:00:00','2024-01-02 09:30:00.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (7,'Ravi Patel','ravi@example.in','IN',0,'2024-02-29 00:00:00','2024-02-29 23:59:59.000000');
INSERT INTO `customers` (`id`,`name`,`email`,`country`,`is_active`,`signed_up`,`created_at`) VALUES (8,'Sofia Rossi 🌻','sofia@example.it','IT',1,'2024-04-12 00:00:00','2024-04-12 12:12:12.000000');
INSERT INTO `orders` (`id`,`customer_id`,`invoice`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`) VALUES (1,1,1000,'shipped',129.9,3,'2024-03-01 10:00:00','2024-03-02 16:30:00',NULL);
INSERT INTO `orders` (`id`,`customer_id`,`invoice`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`) VALUES (2,2,1001,'paid',54,1,'2024-03-02 11:15:00',NULL,'Gift wrap 🎁');
INSERT INTO `orders` (`id`,`customer_id`,`invoice`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`) VALUES (3,1,1002,'cancelled',12.5,1,'2024-03-03 09:45:00',NULL,'Customer changed their mind');
INSERT INTO `orders` (`id`,`customer_id`,`invoice`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`) VALUES (4,4,1003,'shipped',980,12,'2024-03-05 02:10:00','2024-03-07 08:00:00','请小心轻放');
INSERT INTO `orders` (`id`,`customer_id`,`invoice`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`) VALUES (5,5,1004,'pending',45.75,2,'2024-03-08 17:20:00',NULL,'Leave at the door; ring twice');
INSERT INTO `orders` (`id`,`customer_id`,`invoice`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`) VALUES (6,6,1005,'shipped',310.4,5,'2024-03-10 13:00:00','2024-03-11 09:00:00','Fragile: "glass"');
INSERT INTO `orders` (`id`,`customer_id`,`invoice`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`) VALUES (7,8,1006,'paid',76.2,2,'2024-03-11 18:45:00',NULL,NULL);
INSERT INTO `orders` (`id`,`customer_id`,`invoice`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`) VALUES (8,2,1007,'paid',19.99,1,'2024-03-12 08:00:00',NULL,'Paid at the counter');
INSERT INTO `orders` (`id`,`customer_id`,`invoice`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`) VALUES (9,3,1008,'shipped',64,2,'2024-03-14 15:30:00',NULL,'Shipping date never recorded');
INSERT INTO `orders` (`id`,`customer_id`,`invoice`,`status`,`total`,`items`,`ordered_at`,`shipped_at`,`note`) VALUES (10,7,1009,'paid',1499,1,'2024-03-15 21:05:00',NULL,'C:\\Users\\ravi\\invoice.pdf');

SET UNIQUE_CHECKS = 1;
SET FOREIGN_KEY_CHECKS = 1;

Poprawki

Nic nie wymagało poprawek.

Plik jest konwertowany na tym komputerze i nigdy nie jest wysyłany.

Inne przykłady:

Co zmienia się między Oracle a MariaDB

Każdy wiersz to reguła stosowana przez konwerter, z wpisem, który dodaje do raportu, gdy reguła coś zmienia w twoich danych.

  • BOOLEAN (23ai)

    tinyint(1)

    MariaDB nie ma kolumny logicznej, więc TRUE i FALSE to 1 i 0.

  • VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONG

    varchar(n) do 1024 znaków, powyżej typy text

    Długości liczą znaki, niezależnie od tego, czy Oracle liczył bajty, czy znaki, więc każda wartość się mieści.

  • NUMBER, NUMBER(p,s), FLOAT(b)

    decimal(p,s) lub bigint

    NUMBER zachowuje każdą cyfrę; NUMBER bez precyzji, którego wszystkie wartości są liczbami całkowitymi do 18 cyfr, staje się 64-bitową liczbą całkowitą, a ujemna skala mieści tyle samo cyfr przed przecinkiem.

  • INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND

    varchar(100) z tekstem Oracle, np. +01-06

    TIME w MariaDB mieści czasy trwania do 838 godzin i nie ma lat ani miesięcy; tekst zachowuje każdą część.

    Wpis w raporcie: type_replaced

  • DATE, TIMESTAMP(p)

    datetime(p)

    DATE w Oracle przechowuje czas z dokładnością do sekundy, więc jest datą z godziną. Eksport w sesji amerykańskiej lub niemieckiej zapisuje daty bez godziny i stulecia (DD-MON-RR); eksportuj w sesji ISO (SYYYY-MM-DD HH24:MI:SS), aby je zachować.

  • TIMESTAMP(7) to TIMESTAMP(9)

    sześć cyfr ułamka sekundy, siódma obcięta

    MariaDB przechowuje mikrosekundy; siódma cyfra (100 nanosekund) jest obcinana, nigdy zaokrąglana, więc żadna wartość nie przechodzi na następną sekundę ani dzień.

    Wpis w raporcie: fraction_cut

  • TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE

    datetime(p) w UTC

    TIMESTAMP w MariaDB sięga tylko roku 2038, więc momenty są zapisywane jako datetime w UTC, ten sam moment niezależnie od przesunięcia każdej wartości.

    Wpis w raporcie: moments_as_utc

  • JSON (21c), and CLOB holding JSON

    json

    Te same wartości JSON; SQL NULL zapisany przez eksport jako 'null' pozostaje NULL.

  • BLOB, RAW(n), LONG RAW

    binary(n), varbinary(n) i typy blob

    Bajty pozostają bajtami.

  • ROWID, UROWID, XMLTYPE, SDO_GEOMETRY

    text

    Własne typy Oracle nie mają odpowiednika; ich wartości zachowują swój tekst, łącznie z wartościami ROWID, choć poza Oracle nic nie znaczą.

    Wpis w raporcie: type_replaced

  • collations that ignore case (BINARY_CI)

    dokładne porównanie (utf8mb4_bin)

    Tabele używają utf8mb4_bin, więc klucze unikalne rozróżniają to, co rozróżniał Oracle; kolumny, które ignorowały wielkość liter, to tracą. Reguły akcentów różnią się między wersjami, więc żadne porównywanie _ci nie odpowiada temu z Oracle w każdej z nich.

    Wpis w raporcie: case_insensitive_collation

  • identity columns, and a sequence a BEFORE INSERT trigger assigns

    AUTO_INCREMENT, kontynuowane po najwyższym id

    Skopiowane id ładują się bez zmian, a licznik idzie dalej od najwyższego z nich. Kolumna, którą wyzwalacz wypełnia z sekwencji (sposób sprzed 12c), też staje się kolumną identity.

  • identity columns the target can't count

    zwykła liczba całkowita

    MariaDB liczy jedną kolumnę na tabelę, na początku klucza; każda inna zachowuje wartości bez licznika.

    Wpis w raporcie: counter_dropped

  • CREATE SEQUENCE

    CREATE SEQUENCE z tymi samymi opcjami

    Eksport zapisuje, dokąd doszła sekwencja, jako jej START WITH, więc kontynuuje ona od tego miejsca.

  • virtual columns (GENERATED ALWAYS AS ... VIRTUAL)

    kolumny generowane, STORED przy PERSISTED, w przeciwnym razie VIRTUAL

    MariaDB oblicza je według tej samej formuły; wartości, które eksport dla nich zapisał, są pomijane.

  • virtual columns with functions IntoSQL doesn't write, and the || operator

    zwykła kolumna

    Formuła, której nie da się zapisać dla MariaDB, zostawia zwykłą kolumnę i wpis w raporcie; wartości, które eksport zapisał dla kolumn wirtualnych, są pomijane, a MariaDB nie może ich obliczyć.

    Wpis w raporcie: generated_not_translated

  • defaults with functions IntoSQL doesn't write (SYS_GUID(), ||)

    brak wartości domyślnej

    Wartość domyślna, której nie da się zapisać, jest pomijana i zgłaszana w raporcie.

    Wpis w raporcie: default_not_translated

  • CHECK constraints

    przetłumaczone

    Te same ograniczenia CHECK, sprawdzane przy ładowaniu każdego wiersza.

  • CHECK constraints with functions IntoSQL doesn't write

    nie jest tworzone

    Ograniczenie CHECK, którego nie da się zapisać, jest pomijane i zgłaszane w raporcie.

    Wpis w raporcie: check_skipped

  • CHECK constraints that are DISABLE or ENABLE NOVALIDATE

    nie jest tworzone

    Oracle nie stosuje tych ograniczeń CHECK do już istniejących wierszy, więc wiersze mogą je łamać.

    Wpis w raporcie: check_not_enforced

  • function-based, bitmap and domain indexes

    nie jest tworzone

    IntoSQL zapisuje indeksy b-tree na całych kolumnach; pozostałe utwórz ponownie po załadowaniu.

    Wpis w raporcie: index_skipped

  • foreign keys

    klucze obce, ładowane z FOREIGN_KEY_CHECKS=0

    Wiersze ładują się w dowolnej kolejności, a klucze sprawdzają potem nowe wiersze.

  • foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE ones

    nie jest tworzone

    Klucz nie może wskazywać tabeli, której nie ma, a klucz, którego Oracle nie sprawdza, może mieć wiersze bez rodzica.

    Wpis w raporcie: foreign_key_skipped

  • partitioned tables

    jedna tabela z wierszami wszystkich partycji

    Wiersze są te same; jeśli trzeba, podziel tabelę na partycje ponownie w MariaDB.

    Wpis w raporcie: partitions_dropped

  • several schemas in one export

    jedna baza danych, nazwa każdej tabeli zaczyna się od nazwy jej schematu

    Schematy w MariaDB to bazy danych, których eksport ładowany do jednej bazy nie może utworzyć; eksport jednego schematu zachowuje nazwy swoich tabel.

    Wpis w raporcie: schemas_merged

  • NOT NULL columns with values that become NULL

    NOT NULL usunięte

    Kolumna, której wartości musiały stać się NULL, nie może zachować NOT NULL, bo ładowanie by się zatrzymało.

    Wpis w raporcie: not_null_relaxed

  • views, synonyms, types, packages, procedures, functions and other triggers

    wymienione w raporcie

    Ich kod jest napisany w PL/SQL, więc trafiają na listę do ręcznego odtworzenia.

    Wpis w raporcie: not_converted_objects

  • exports without CREATE TABLE (data only)

    typy odczytane z wartości

    Eksport samych danych zawiera tylko wiersze, więc typy pochodzą z wartości.

    Wpis w raporcie: no_schema

  • expressions in INSERT values other than the ones exports write

    NULL

    Konwerter, który nie uruchamia bazy danych, nie może ich obliczyć; to_date, to_timestamp, TO_CLOB, HEXTORAW i inne, które zapisują eksporty, są odczytywane.

    Wpis w raporcie: expression_value

  • types IntoSQL doesn't know, and object types

    longtext

    Tekst mieści każdą wartość; zmień typ po załadowaniu.

    Wpis w raporcie: unknown_type

  • dates before year 1 and time zones given as region names

    NULL

    MariaDB przechowuje lata od 1000 do 9999, a Oracle sięga do roku 1. Takie wartości stają się NULL, a raport je liczy.

    Wpis w raporcie: date_out_of_range

  • NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLE

    NULL

    Typy zmiennoprzecinkowe w MariaDB nie mają NaN ani nieskończoności, więc te wartości stają się NULL, a raport je liczy.

    Wpis w raporcie: invalid_value_null

  • NUL characters in text

    zachowane

    Wartość jest kopiowana, a znak NUL jest w niej zapisany jako sekwencja ucieczki.

  • text that isn't valid in its encoding

    błędne bajty jako znak zastępczy

    Skrypt jest w UTF-8 i każda wartość musi być poprawnym tekstem.

    Wpis w raporcie: invalid_utf8_replaced

  • text decoded twice (ñ)

    skopiowane bez zmian

    Skrypt zawiera dokładnie te znaki, więc są kopiowane; raport je wskazuje.

    Wpis w raporcie: mojibake_suspected

W OracleW MariaDBWpis w raporcie
BOOLEAN (23ai)tinyint(1)MariaDB nie ma kolumny logicznej, więc TRUE i FALSE to 1 i 0.
VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONGvarchar(n) do 1024 znaków, powyżej typy textDługości liczą znaki, niezależnie od tego, czy Oracle liczył bajty, czy znaki, więc każda wartość się mieści.
NUMBER, NUMBER(p,s), FLOAT(b)decimal(p,s) lub bigintNUMBER zachowuje każdą cyfrę; NUMBER bez precyzji, którego wszystkie wartości są liczbami całkowitymi do 18 cyfr, staje się 64-bitową liczbą całkowitą, a ujemna skala mieści tyle samo cyfr przed przecinkiem.
INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECONDvarchar(100) z tekstem Oracle, np. +01-06TIME w MariaDB mieści czasy trwania do 838 godzin i nie ma lat ani miesięcy; tekst zachowuje każdą część.type_replaced
DATE, TIMESTAMP(p)datetime(p)DATE w Oracle przechowuje czas z dokładnością do sekundy, więc jest datą z godziną. Eksport w sesji amerykańskiej lub niemieckiej zapisuje daty bez godziny i stulecia (DD-MON-RR); eksportuj w sesji ISO (SYYYY-MM-DD HH24:MI:SS), aby je zachować.
TIMESTAMP(7) to TIMESTAMP(9)sześć cyfr ułamka sekundy, siódma obciętaMariaDB przechowuje mikrosekundy; siódma cyfra (100 nanosekund) jest obcinana, nigdy zaokrąglana, więc żadna wartość nie przechodzi na następną sekundę ani dzień.fraction_cut
TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONEdatetime(p) w UTCTIMESTAMP w MariaDB sięga tylko roku 2038, więc momenty są zapisywane jako datetime w UTC, ten sam moment niezależnie od przesunięcia każdej wartości.moments_as_utc
JSON (21c), and CLOB holding JSONjsonTe same wartości JSON; SQL NULL zapisany przez eksport jako 'null' pozostaje NULL.
BLOB, RAW(n), LONG RAWbinary(n), varbinary(n) i typy blobBajty pozostają bajtami.
ROWID, UROWID, XMLTYPE, SDO_GEOMETRYtextWłasne typy Oracle nie mają odpowiednika; ich wartości zachowują swój tekst, łącznie z wartościami ROWID, choć poza Oracle nic nie znaczą.type_replaced
collations that ignore case (BINARY_CI)dokładne porównanie (utf8mb4_bin)Tabele używają utf8mb4_bin, więc klucze unikalne rozróżniają to, co rozróżniał Oracle; kolumny, które ignorowały wielkość liter, to tracą. Reguły akcentów różnią się między wersjami, więc żadne porównywanie _ci nie odpowiada temu z Oracle w każdej z nich.case_insensitive_collation
identity columns, and a sequence a BEFORE INSERT trigger assignsAUTO_INCREMENT, kontynuowane po najwyższym idSkopiowane id ładują się bez zmian, a licznik idzie dalej od najwyższego z nich. Kolumna, którą wyzwalacz wypełnia z sekwencji (sposób sprzed 12c), też staje się kolumną identity.
identity columns the target can't countzwykła liczba całkowitaMariaDB liczy jedną kolumnę na tabelę, na początku klucza; każda inna zachowuje wartości bez licznika.counter_dropped
CREATE SEQUENCECREATE SEQUENCE z tymi samymi opcjamiEksport zapisuje, dokąd doszła sekwencja, jako jej START WITH, więc kontynuuje ona od tego miejsca.
virtual columns (GENERATED ALWAYS AS ... VIRTUAL)kolumny generowane, STORED przy PERSISTED, w przeciwnym razie VIRTUALMariaDB oblicza je według tej samej formuły; wartości, które eksport dla nich zapisał, są pomijane.
virtual columns with functions IntoSQL doesn't write, and the || operatorzwykła kolumnaFormuła, której nie da się zapisać dla MariaDB, zostawia zwykłą kolumnę i wpis w raporcie; wartości, które eksport zapisał dla kolumn wirtualnych, są pomijane, a MariaDB nie może ich obliczyć.generated_not_translated
defaults with functions IntoSQL doesn't write (SYS_GUID(), ||)brak wartości domyślnejWartość domyślna, której nie da się zapisać, jest pomijana i zgłaszana w raporcie.default_not_translated
CHECK constraintsprzetłumaczoneTe same ograniczenia CHECK, sprawdzane przy ładowaniu każdego wiersza.
CHECK constraints with functions IntoSQL doesn't writenie jest tworzoneOgraniczenie CHECK, którego nie da się zapisać, jest pomijane i zgłaszane w raporcie.check_skipped
CHECK constraints that are DISABLE or ENABLE NOVALIDATEnie jest tworzoneOracle nie stosuje tych ograniczeń CHECK do już istniejących wierszy, więc wiersze mogą je łamać.check_not_enforced
function-based, bitmap and domain indexesnie jest tworzoneIntoSQL zapisuje indeksy b-tree na całych kolumnach; pozostałe utwórz ponownie po załadowaniu.index_skipped
foreign keysklucze obce, ładowane z FOREIGN_KEY_CHECKS=0Wiersze ładują się w dowolnej kolejności, a klucze sprawdzają potem nowe wiersze.
foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE onesnie jest tworzoneKlucz nie może wskazywać tabeli, której nie ma, a klucz, którego Oracle nie sprawdza, może mieć wiersze bez rodzica.foreign_key_skipped
partitioned tablesjedna tabela z wierszami wszystkich partycjiWiersze są te same; jeśli trzeba, podziel tabelę na partycje ponownie w MariaDB.partitions_dropped
several schemas in one exportjedna baza danych, nazwa każdej tabeli zaczyna się od nazwy jej schematuSchematy w MariaDB to bazy danych, których eksport ładowany do jednej bazy nie może utworzyć; eksport jednego schematu zachowuje nazwy swoich tabel.schemas_merged
NOT NULL columns with values that become NULLNOT NULL usunięteKolumna, której wartości musiały stać się NULL, nie może zachować NOT NULL, bo ładowanie by się zatrzymało.not_null_relaxed
views, synonyms, types, packages, procedures, functions and other triggerswymienione w raporcieIch kod jest napisany w PL/SQL, więc trafiają na listę do ręcznego odtworzenia.not_converted_objects
exports without CREATE TABLE (data only)typy odczytane z wartościEksport samych danych zawiera tylko wiersze, więc typy pochodzą z wartości.no_schema
expressions in INSERT values other than the ones exports writeNULLKonwerter, który nie uruchamia bazy danych, nie może ich obliczyć; to_date, to_timestamp, TO_CLOB, HEXTORAW i inne, które zapisują eksporty, są odczytywane.expression_value
types IntoSQL doesn't know, and object typeslongtextTekst mieści każdą wartość; zmień typ po załadowaniu.unknown_type
dates before year 1 and time zones given as region namesNULLMariaDB przechowuje lata od 1000 do 9999, a Oracle sięga do roku 1. Takie wartości stają się NULL, a raport je liczy.date_out_of_range
NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLENULLTypy zmiennoprzecinkowe w MariaDB nie mają NaN ani nieskończoności, więc te wartości stają się NULL, a raport je liczy.invalid_value_null
NUL characters in textzachowaneWartość jest kopiowana, a znak NUL jest w niej zapisany jako sekwencja ucieczki.
text that isn't valid in its encodingbłędne bajty jako znak zastępczySkrypt jest w UTF-8 i każda wartość musi być poprawnym tekstem.invalid_utf8_replaced
text decoded twice (ñ)skopiowane bez zmianSkrypt zawiera dokładnie te znaki, więc są kopiowane; raport je wskazuje.mojibake_suspected

Załaduj skrypt do MariaDB

Skrypt tworzy tabele, kopiuje wiersze, a potem dodaje klucze, indeksy i klucze obce, więc ładuje się szybko i zatrzymuje przy pierwszym błędzie.

mariadb --default-character-set=utf8mb4 mydb < oracle.mariadb.sql

Klucze obce są tworzone tak, jak deklaruje je zrzut, z FOREIGN_KEY_CHECKS=0 podczas ładowania wierszy, tak jak robi to mysqldump.

Przy dużym zrzucie uruchom klienta na tej samej maszynie co serwer i zwiększ max_allowed_packet, jeśli pojedynczy wiersz jest bardzo duży.

IntoSQL Pro ładuje plik prosto do MariaDB z aplikacji na komputer lub wiersza poleceń, bez pisania skryptu.

Jak zrobić zrzut Oracle dla najlepszego wyniku

Konwerter odczytuje to, co zawiera zrzut. Te opcje zachowują w nim więcej twoich danych:

  • W SQL Developer wybierz Tools, Database Export, z DDL i formatem danych Insert. SQLcl zapisuje to samo z SET SQLFORMAT INSERT.
  • Przed eksportem uruchom ALTER SESSION SET NLS_DATE_FORMAT = 'SYYYY-MM-DD HH24:MI:SS': domyślny format zapisuje daty bez godziny i stulecia.
  • Plik .dmp z exp lub expdp jest binarny: zaimportuj go do bazy Oracle, np. Oracle Database Free w Dockerze, i wyeksportuj przez SQL Developer.

Co nie jest konwertowane

Widoki, pakiety, procedury, funkcje, wyzwalacze, typy i synonimy są pisane w PL/SQL. Raport wymienia je z nazwy i nigdy nie pomija ich po cichu, więc możesz je przepisać dla MariaDB.

Pytania o konwersję Oracle do MariaDB

Nie ma tu odpowiedzi? Napisz do nas przez stronę kontaktu, a odpowie człowiek. Strona kontaktu

Czy mój zrzut jest wysyłany?

Nie. Konwerter działa w przeglądarce i odczytuje zrzut z dysku po kawałku, więc nigdy nie opuszcza on twojego komputera. Aplikacja na komputer i wiersz poleceń też konwertują na twoim komputerze.

Jak duży może być zrzut?

Konwerter nigdy nie trzyma całego zrzutu w pamięci: czyta plik dwa razy, fragmentami, i zapisuje skrypt na bieżąco. Zrzuty wielogigabajtowe konwertują się w przeglądarce, w aplikacji na komputer i w wierszu poleceń.

Czy mogę przekonwertować plik .dmp z exp lub expdp?

Nie bezpośrednio: Data Pump i oryginalny Export zapisują format binarny, który czyta tylko Oracle. Zaimportuj plik do dowolnej bazy Oracle (Oracle Database Free działa w Dockerze) i wyeksportuj go przez Database Export w SQL Developer lub przez SQLcl. Konwerter informuje o tym, gdy dostanie plik .dmp.

Z jakich wersji Oracle może pochodzić eksport?

Eksporty z SQL Developer i SQLcl, z definicjami tabel z DBMS_METADATA, z Oracle od wersji 11g. Każdy testowy eksport pochodzi z Oracle 21c i 23ai, w sesjach amerykańskich, niemieckich i ISO, i jest porównywany ze źródłem komórka po komórce.

Co dzieje się z NUMBER, DATE i innymi typami Oracle?

NUMBER staje się decimal, bigint dla liczb całkowitych, a powyżej 65 cyfr tekstem; DATE staje się datetime i zachowuje godzinę; CLOB staje się longtext, BLOB blob, a interwały zachowują tekst Oracle. NaN i Infinity stają się NULL, a raport je liczy.

Czy kolumny identity i sekwencje są zachowywane?

Tak. Kolumny identity stają się AUTO_INCREMENT i idą dalej po najwyższym id; sekwencje stają się sekwencjami MariaDB, a wartości domyślne, które z nich pobierają, nadal z nich pobierają.

A pakiety PL/SQL, procedury i wyzwalacze?

Raport wymienia je z nazwy, ale nie są konwertowane, bo każda baza danych zapisuje je we własnym języku.

Na jakich wersjach MariaDB ładuje się skrypt?

MariaDB 10.11 i nowsze. Każdy testowy eksport ładuje się na 10.11 i 11.4 i zatrzymuje przy pierwszym błędzie, jeśli coś pójdzie nie tak.