Oracle omzetten naar MariaDB
Zet het .sql-bestand neer dat Database Export van SQL Developer of SQLcl schrijft, met zijn tabellen en Insert-statements, en download een MariaDB-script met dezelfde tabellen, sleutels, indexen en data. Elke waarde die MariaDB niet ongewijzigd kan bevatten, en elk object dat het niet overneemt, staat in het rapport.
18 rijen geconverteerd, geen correcties, geen afgewezen
Tabellen in shop_2024_oracle.sqlOracle-dump · geschreven door SQL Developer · utf-8
customers8 rijen
7 kolommen id bigint not null name varchar(100) not null email varchar(150) not null country char(2) not null is_active smallint not null signed_up datetime created_at datetime not null orders10 rijen
9 kolommen id bigint not null customer_id bigint not null invoice bigint status varchar(10) not null total decimal(10,2) not null items int not null ordered_at datetime not null shipped_at datetime note varchar(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;
Correcties
Er hoefde niets gecorrigeerd te worden.
Je bestand wordt op deze computer omgezet en nooit geüpload.
Andere voorbeelden:
Wat er verandert van Oracle naar MariaDB
Elke rij is een regel die de converter toepast, met de rapportregel die hij schrijft als de regel iets in je data verandert.
BOOLEAN (23ai)
tinyint(1)
MariaDB heeft geen boolean-kolom, dus TRUE en FALSE zijn 1 en 0.
VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONG
varchar(n) tot 1024 tekens, daarboven text-typen
Lengtes tellen tekens, of Oracle nu bytes of tekens telde, zodat elke waarde past.
NUMBER, NUMBER(p,s), FLOAT(b)
decimal(p,s) of bigint
NUMBER behoudt elk cijfer; een NUMBER zonder precisie waarvan alle waarden gehele getallen van hoogstens 18 cijfers zijn, wordt een 64-bits integer, en een negatieve schaal krijgt evenveel cijfers voor de komma.
INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND
varchar(100) met de tekst van Oracle, zoals +01-06
TIME in MariaDB bevat duren tot 838 uur en heeft geen jaren of maanden; de tekst behoudt elk deel.
Rapportregel: type_replaced
DATE, TIMESTAMP(p)
datetime(p)
DATE in Oracle bevat een tijd tot op de seconde, dus het is een datum met tijd. Een export in een Amerikaanse of Duitse sessie schrijft datums zonder tijd of eeuw (DD-MON-RR); exporteer in een ISO-sessie (SYYYY-MM-DD HH24:MI:SS) om ze te behouden.
TIMESTAMP(7) to TIMESTAMP(9)
zes cijfers van een seconde, het zevende afgekapt
MariaDB bewaart microseconden; het zevende cijfer (100 nanoseconden) wordt afgekapt, nooit afgerond, dus geen waarde schuift naar de volgende seconde of dag.
Rapportregel: fraction_cut
TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE
datetime(p) in UTC
TIMESTAMP in MariaDB reikt maar tot 2038, dus momenten worden opgeslagen als datetime in UTC: hetzelfde moment, welke offset elke waarde ook had.
Rapportregel: moments_as_utc
JSON (21c), and CLOB holding JSON
json
Dezelfde JSON-waarden; een SQL-NULL die de export als 'null' schreef, blijft NULL.
BLOB, RAW(n), LONG RAW
binary(n), varbinary(n) en blob-typen
Bytes blijven bytes.
ROWID, UROWID, XMLTYPE, SDO_GEOMETRY
text
De eigen typen van Oracle hebben geen equivalent; hun waarden behouden hun tekst, ROWID-waarden inbegrepen, al betekenen die buiten Oracle niets.
Rapportregel: type_replaced
collations that ignore case (BINARY_CI)
exacte vergelijking (utf8mb4_bin)
Tabellen gebruiken utf8mb4_bin, zodat unieke sleutels gescheiden houden wat Oracle gescheiden hield; kolommen die hoofdletters negeerden, verliezen dat. Accentregels verschillen per versie, dus geen _ci-collatie komt op elke versie overeen met die van Oracle.
Rapportregel: case_insensitive_collation
identity columns, and a sequence a BEFORE INSERT trigger assigns
AUTO_INCREMENT, verdergaand na het hoogste id
De gekopieerde id's laden ongewijzigd, en de teller gaat verder na het hoogste. Een kolom die een trigger vult uit een sequence (de manier van voor 12c) wordt ook een identity-kolom.
identity columns the target can't count
een geheel getal zonder teller
MariaDB telt één kolom per tabel, aan het begin van een sleutel; elke andere behoudt zijn waarden zonder teller.
Rapportregel: counter_dropped
CREATE SEQUENCE
CREATE SEQUENCE met dezelfde opties
De export schrijft hoe ver een sequence is gekomen als zijn START WITH, dus hij gaat daar verder.
virtual columns (GENERATED ALWAYS AS ... VIRTUAL)
gegenereerde kolommen, STORED bij PERSISTED, anders VIRTUAL
MariaDB berekent ze met dezelfde formule; de waarden die de export ervoor schreef, worden weggelaten.
virtual columns with functions IntoSQL doesn't write, and the || operator
een gewone kolom
Een formule die niet voor MariaDB kan worden geschreven, levert een gewone kolom en een regel in het rapport op; de waarden die de export voor virtuele kolommen schreef, worden weggelaten, en MariaDB kan ze niet berekenen.
Rapportregel: generated_not_translated
defaults with functions IntoSQL doesn't write (SYS_GUID(), ||)
geen standaardwaarde
Een standaardwaarde die niet kan worden geschreven, wordt weggelaten en gemeld.
Rapportregel: default_not_translated
CHECK constraints
vertaald
Dezelfde checks, getest terwijl elke rij laadt.
CHECK constraints with functions IntoSQL doesn't write
niet aangemaakt
Een check die niet kan worden geschreven, wordt weggelaten en gemeld.
Rapportregel: check_skipped
CHECK constraints that are DISABLE or ENABLE NOVALIDATE
niet aangemaakt
Oracle past deze checks niet toe op de rijen die er al zijn, dus de rijen kunnen ze schenden.
Rapportregel: check_not_enforced
function-based, bitmap and domain indexes
niet aangemaakt
IntoSQL schrijft b-tree-indexen op hele kolommen; maak de andere na het laden opnieuw aan.
Rapportregel: index_skipped
foreign keys
refererende sleutels, geladen met FOREIGN_KEY_CHECKS=0
De rijen laden in willekeurige volgorde, en de sleutels controleren daarna nieuwe rijen.
foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE ones
niet aangemaakt
Een sleutel kan niet verwijzen naar een tabel die er niet is, en een sleutel die Oracle niet controleert, kan rijen zonder ouder hebben.
Rapportregel: foreign_key_skipped
partitioned tables
één tabel met de rijen van elke partitie
De rijen zijn dezelfde; partitioneer de tabel opnieuw in MariaDB als dat nodig is.
Rapportregel: partitions_dropped
several schemas in one export
één database, tabellen met de naam van hun schema ervoor
Schema's in MariaDB zijn databases, die een export die in één database laadt niet kan aanmaken; een export van één schema behoudt de namen van zijn tabellen.
Rapportregel: schemas_merged
NOT NULL columns with values that become NULL
NOT NULL weggelaten
Een kolom waarvan waarden NULL moesten worden, kan NOT NULL niet houden, anders zou het laden stoppen.
Rapportregel: not_null_relaxed
views, synonyms, types, packages, procedures, functions and other triggers
vermeld in het rapport
Hun code is geschreven in PL/SQL, dus ze worden vermeld zodat je ze opnieuw kunt maken.
Rapportregel: not_converted_objects
exports without CREATE TABLE (data only)
typen afgeleid uit de waarden
Een export met alleen data bevat alleen rijen, dus de typen komen uit de waarden.
Rapportregel: no_schema
expressions in INSERT values other than the ones exports write
NULL
Een converter die geen database draait, kan ze niet evalueren; to_date, to_timestamp, TO_CLOB, HEXTORAW en de andere die exports schrijven, worden gelezen.
Rapportregel: expression_value
types IntoSQL doesn't know, and object types
longtext
Text kan elke waarde bevatten; wijzig het type na het laden.
Rapportregel: unknown_type
dates before year 1 and time zones given as region names
NULL
MariaDB slaat jaren 1000 tot en met 9999 op, en Oracle gaat terug tot het jaar 1. Die waarden worden NULL en het rapport telt ze.
Rapportregel: date_out_of_range
NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLE
NULL
Drijvendekommatypen in MariaDB kennen geen NaN of oneindig, dus die waarden worden NULL en het rapport telt ze.
Rapportregel: invalid_value_null
NUL characters in text
behouden
De waarde wordt gekopieerd, met het NUL-teken ge-escapet.
text that isn't valid in its encoding
de foute bytes als het vervangingsteken
Het script is UTF-8 en elke waarde moet geldige tekst zijn.
Rapportregel: invalid_utf8_replaced
text decoded twice (ñ)
ongewijzigd gekopieerd
Het script bevat precies deze tekens, dus ze worden gekopieerd; het rapport wijst ze aan.
Rapportregel: mojibake_suspected
| In Oracle | In MariaDB | Rapportregel |
|---|---|---|
| BOOLEAN (23ai) | tinyint(1)MariaDB heeft geen boolean-kolom, dus TRUE en FALSE zijn 1 en 0. | |
| VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONG | varchar(n) tot 1024 tekens, daarboven text-typenLengtes tellen tekens, of Oracle nu bytes of tekens telde, zodat elke waarde past. | |
| NUMBER, NUMBER(p,s), FLOAT(b) | decimal(p,s) of bigintNUMBER behoudt elk cijfer; een NUMBER zonder precisie waarvan alle waarden gehele getallen van hoogstens 18 cijfers zijn, wordt een 64-bits integer, en een negatieve schaal krijgt evenveel cijfers voor de komma. | |
| INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND | varchar(100) met de tekst van Oracle, zoals +01-06TIME in MariaDB bevat duren tot 838 uur en heeft geen jaren of maanden; de tekst behoudt elk deel. | type_replaced |
| DATE, TIMESTAMP(p) | datetime(p)DATE in Oracle bevat een tijd tot op de seconde, dus het is een datum met tijd. Een export in een Amerikaanse of Duitse sessie schrijft datums zonder tijd of eeuw (DD-MON-RR); exporteer in een ISO-sessie (SYYYY-MM-DD HH24:MI:SS) om ze te behouden. | |
| TIMESTAMP(7) to TIMESTAMP(9) | zes cijfers van een seconde, het zevende afgekaptMariaDB bewaart microseconden; het zevende cijfer (100 nanoseconden) wordt afgekapt, nooit afgerond, dus geen waarde schuift naar de volgende seconde of dag. | fraction_cut |
| TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE | datetime(p) in UTCTIMESTAMP in MariaDB reikt maar tot 2038, dus momenten worden opgeslagen als datetime in UTC: hetzelfde moment, welke offset elke waarde ook had. | moments_as_utc |
| JSON (21c), and CLOB holding JSON | jsonDezelfde JSON-waarden; een SQL-NULL die de export als 'null' schreef, blijft NULL. | |
| BLOB, RAW(n), LONG RAW | binary(n), varbinary(n) en blob-typenBytes blijven bytes. | |
| ROWID, UROWID, XMLTYPE, SDO_GEOMETRY | textDe eigen typen van Oracle hebben geen equivalent; hun waarden behouden hun tekst, ROWID-waarden inbegrepen, al betekenen die buiten Oracle niets. | type_replaced |
| collations that ignore case (BINARY_CI) | exacte vergelijking (utf8mb4_bin)Tabellen gebruiken utf8mb4_bin, zodat unieke sleutels gescheiden houden wat Oracle gescheiden hield; kolommen die hoofdletters negeerden, verliezen dat. Accentregels verschillen per versie, dus geen _ci-collatie komt op elke versie overeen met die van Oracle. | case_insensitive_collation |
| identity columns, and a sequence a BEFORE INSERT trigger assigns | AUTO_INCREMENT, verdergaand na het hoogste idDe gekopieerde id's laden ongewijzigd, en de teller gaat verder na het hoogste. Een kolom die een trigger vult uit een sequence (de manier van voor 12c) wordt ook een identity-kolom. | |
| identity columns the target can't count | een geheel getal zonder tellerMariaDB telt één kolom per tabel, aan het begin van een sleutel; elke andere behoudt zijn waarden zonder teller. | counter_dropped |
| CREATE SEQUENCE | CREATE SEQUENCE met dezelfde optiesDe export schrijft hoe ver een sequence is gekomen als zijn START WITH, dus hij gaat daar verder. | |
| virtual columns (GENERATED ALWAYS AS ... VIRTUAL) | gegenereerde kolommen, STORED bij PERSISTED, anders VIRTUALMariaDB berekent ze met dezelfde formule; de waarden die de export ervoor schreef, worden weggelaten. | |
| virtual columns with functions IntoSQL doesn't write, and the || operator | een gewone kolomEen formule die niet voor MariaDB kan worden geschreven, levert een gewone kolom en een regel in het rapport op; de waarden die de export voor virtuele kolommen schreef, worden weggelaten, en MariaDB kan ze niet berekenen. | generated_not_translated |
| defaults with functions IntoSQL doesn't write (SYS_GUID(), ||) | geen standaardwaardeEen standaardwaarde die niet kan worden geschreven, wordt weggelaten en gemeld. | default_not_translated |
| CHECK constraints | vertaaldDezelfde checks, getest terwijl elke rij laadt. | |
| CHECK constraints with functions IntoSQL doesn't write | niet aangemaaktEen check die niet kan worden geschreven, wordt weggelaten en gemeld. | check_skipped |
| CHECK constraints that are DISABLE or ENABLE NOVALIDATE | niet aangemaaktOracle past deze checks niet toe op de rijen die er al zijn, dus de rijen kunnen ze schenden. | check_not_enforced |
| function-based, bitmap and domain indexes | niet aangemaaktIntoSQL schrijft b-tree-indexen op hele kolommen; maak de andere na het laden opnieuw aan. | index_skipped |
| foreign keys | refererende sleutels, geladen met FOREIGN_KEY_CHECKS=0De rijen laden in willekeurige volgorde, en de sleutels controleren daarna nieuwe rijen. | |
| foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE ones | niet aangemaaktEen sleutel kan niet verwijzen naar een tabel die er niet is, en een sleutel die Oracle niet controleert, kan rijen zonder ouder hebben. | foreign_key_skipped |
| partitioned tables | één tabel met de rijen van elke partitieDe rijen zijn dezelfde; partitioneer de tabel opnieuw in MariaDB als dat nodig is. | partitions_dropped |
| several schemas in one export | één database, tabellen met de naam van hun schema ervoorSchema's in MariaDB zijn databases, die een export die in één database laadt niet kan aanmaken; een export van één schema behoudt de namen van zijn tabellen. | schemas_merged |
| NOT NULL columns with values that become NULL | NOT NULL weggelatenEen kolom waarvan waarden NULL moesten worden, kan NOT NULL niet houden, anders zou het laden stoppen. | not_null_relaxed |
| views, synonyms, types, packages, procedures, functions and other triggers | vermeld in het rapportHun code is geschreven in PL/SQL, dus ze worden vermeld zodat je ze opnieuw kunt maken. | not_converted_objects |
| exports without CREATE TABLE (data only) | typen afgeleid uit de waardenEen export met alleen data bevat alleen rijen, dus de typen komen uit de waarden. | no_schema |
| expressions in INSERT values other than the ones exports write | NULLEen converter die geen database draait, kan ze niet evalueren; to_date, to_timestamp, TO_CLOB, HEXTORAW en de andere die exports schrijven, worden gelezen. | expression_value |
| types IntoSQL doesn't know, and object types | longtextText kan elke waarde bevatten; wijzig het type na het laden. | unknown_type |
| dates before year 1 and time zones given as region names | NULLMariaDB slaat jaren 1000 tot en met 9999 op, en Oracle gaat terug tot het jaar 1. Die waarden worden NULL en het rapport telt ze. | date_out_of_range |
| NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLE | NULLDrijvendekommatypen in MariaDB kennen geen NaN of oneindig, dus die waarden worden NULL en het rapport telt ze. | invalid_value_null |
| NUL characters in text | behoudenDe waarde wordt gekopieerd, met het NUL-teken ge-escapet. | |
| text that isn't valid in its encoding | de foute bytes als het vervangingstekenHet script is UTF-8 en elke waarde moet geldige tekst zijn. | invalid_utf8_replaced |
| text decoded twice (ñ) | ongewijzigd gekopieerdHet script bevat precies deze tekens, dus ze worden gekopieerd; het rapport wijst ze aan. | mojibake_suspected |
Het script in MariaDB 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.
mariadb --default-character-set=utf8mb4 mydb < oracle.mariadb.sqlRefererende sleutels worden aangemaakt zoals de dump ze declareert, met FOREIGN_KEY_CHECKS=0 terwijl de rijen laden, zoals mysqldump doet.
Voer bij een grote dump de client uit op dezelfde machine als de server, en verhoog max_allowed_packet als één rij erg groot is.
IntoSQL Pro laadt het bestand rechtstreeks in MariaDB vanuit de desktopapp of de opdrachtregel, zonder een script te schrijven.
Een dump van Oracle maken voor het beste resultaat
De converter leest wat de dump bevat. Met deze opties blijft er meer van je data in staan:
- Kies in SQL Developer Tools, Database Export, met DDL en het dataformaat Insert. SQLcl schrijft hetzelfde met SET SQLFORMAT INSERT.
- Voer ALTER SESSION SET NLS_DATE_FORMAT = 'SYYYY-MM-DD HH24:MI:SS' uit voordat je exporteert: het standaardformaat schrijft datums zonder tijd of eeuw.
- Een .dmp-bestand van exp of expdp is binair: importeer het in een Oracle-database, bijvoorbeeld Oracle Database Free in Docker, en exporteer het met SQL Developer.
Wat niet wordt geconverteerd
Weergaven, packages, procedures, functies, triggers, typen en synoniemen zijn geschreven in PL/SQL. Ze staan op naam in het rapport en worden nooit stilletjes weggelaten, zodat je ze kunt herschrijven voor MariaDB.
Vragen over Oracle naar MariaDB
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.
Kan ik een .dmp-bestand van exp of expdp converteren?
Niet direct: Data Pump en de oorspronkelijke Export schrijven een binair formaat dat alleen Oracle leest. Importeer het bestand in een willekeurige Oracle-database (Oracle Database Free draait in Docker) en exporteer het met Database Export van SQL Developer of met SQLcl. De converter meldt dat wanneer hij een .dmp-bestand krijgt.
Van welke Oracle-versies kan de export komen?
Exports uit SQL Developer en SQLcl, met de tabeldefinities van DBMS_METADATA, vanaf Oracle 11g. Elke testexport komt van Oracle 21c en 23ai, in Amerikaanse, Duitse en ISO-sessies, en wordt cel voor cel met zijn bron vergeleken.
Wat gebeurt er met NUMBER, DATE en de andere Oracle-typen?
NUMBER wordt decimal, of bigint voor gehele getallen, en tekst boven 65 cijfers; DATE wordt datetime en behoudt zijn tijd; CLOB wordt longtext, BLOB blob, en intervallen behouden de tekst van Oracle. NaN en Infinity worden NULL en het rapport telt ze.
Blijven identity-kolommen en sequences behouden?
Ja. Identity-kolommen worden AUTO_INCREMENT en gaan verder na het hoogste id; sequences worden MariaDB-sequences, en standaardwaarden die er een waarde uit halen, blijven dat doen.
En PL/SQL-packages, 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 MariaDB-versies laadt het script?
MariaDB 10.11 en later. Elke testexport laadt op 10.11 en 11.4 en stopt bij de eerste fout als er iets misgaat.