Перейти к содержимому
Главная страница IntoSQL

Конвертация Oracle в MariaDB

Перетащите файл .sql, который записывает Database Export в SQL Developer или SQLcl, с таблицами и командами Insert, и скачайте скрипт MariaDB с теми же таблицами, ключами, индексами и данными. Каждое значение, которое MariaDB не может хранить как есть, и каждый объект, который он не переносит, указаны в отчете.

Ваш файл
sqlshop_2024_oracle.sqlПример файла, 9,3 кБ
Ваша база данных

18 строк конвертировано, без исправлений, ни одна не отклонена

Показать

Таблицы в shop_2024_oracle.sqlДамп Oracle · создан программой SQL Developer · utf-8

  • customers8 строк
    7 столбцов
    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 строк
    9 столбцов
    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;

Исправления

Исправлять ничего не пришлось.

Файл конвертируется на этом компьютере и никуда не загружается.

Другие примеры:

Что меняется при переходе с Oracle на MariaDB

Каждая строка - это правило, которое применяет конвертер, и строка отчета, которую он пишет, когда правило что-то меняет в ваших данных.

  • BOOLEAN (23ai)

    tinyint(1)

    В MariaDB нет логического столбца, поэтому TRUE и FALSE становятся 1 и 0.

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

    varchar(n) до 1024 символов, дальше типы text

    Длины считаются в символах, считал ли Oracle байты или символы, поэтому каждое значение помещается.

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

    decimal(p,s) или bigint

    NUMBER сохраняет каждую цифру; NUMBER без точности, все значения которого - целые числа до 18 цифр, становится 64-битным целым, а отрицательный масштаб хранит столько же цифр до запятой.

  • INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND

    varchar(100) с текстом Oracle, например +01-06

    TIME в MariaDB вмещает длительности до 838 часов и не содержит лет и месяцев; текст сохраняет каждую часть.

    Строка отчета: type_replaced

  • DATE, TIMESTAMP(p)

    datetime(p)

    DATE в Oracle хранит время с точностью до секунды, поэтому это дата и время. Экспорт в американском или немецком сеансе записывает даты без времени и века (DD-MON-RR); экспортируйте в сеансе ISO (SYYYY-MM-DD HH24:MI:SS), чтобы их сохранить.

  • TIMESTAMP(7) to TIMESTAMP(9)

    шесть цифр долей секунды, седьмая отбрасывается

    MariaDB хранит микросекунды; седьмая цифра (100 наносекунд) отбрасывается, а не округляется, поэтому ни одно значение не переходит на следующую секунду или день.

    Строка отчета: fraction_cut

  • TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE

    datetime(p) в UTC

    TIMESTAMP в MariaDB доходит только до 2038 года, поэтому моменты хранятся как datetime в UTC: тот же момент, какое бы смещение ни было у значения.

    Строка отчета: moments_as_utc

  • JSON (21c), and CLOB holding JSON

    json

    Те же значения JSON; SQL NULL, который экспорт записал как 'null', остается NULL.

  • BLOB, RAW(n), LONG RAW

    binary(n), varbinary(n) и типы blob

    Байты остаются байтами.

  • ROWID, UROWID, XMLTYPE, SDO_GEOMETRY

    text

    У собственных типов Oracle нет аналогов; их значения сохраняют свой текст, включая значения ROWID, хотя вне Oracle они ничего не значат.

    Строка отчета: type_replaced

  • collations that ignore case (BINARY_CI)

    точное сравнение (utf8mb4_bin)

    Таблицы используют utf8mb4_bin, поэтому уникальные ключи различают то, что различал Oracle; столбцы, которые не учитывали регистр, это теряют. Правила для диакритики отличаются в разных версиях, поэтому ни одна сортировка _ci не совпадает с Oracle во всех из них.

    Строка отчета: case_insensitive_collation

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

    AUTO_INCREMENT, продолжается после наибольшего id

    Скопированные id загружаются как есть, а счетчик продолжается после наибольшего. Столбец, который триггер заполняет из последовательности (способ до 12c), тоже становится столбцом identity.

  • identity columns the target can't count

    обычное целое

    MariaDB нумерует один столбец на таблицу, в начале ключа; любой другой сохраняет значения без счетчика.

    Строка отчета: counter_dropped

  • CREATE SEQUENCE

    CREATE SEQUENCE с теми же параметрами

    Экспорт записывает, до какого значения дошла последовательность, как ее START WITH, поэтому она продолжается оттуда.

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

    генерируемые столбцы, STORED при PERSISTED, иначе VIRTUAL

    MariaDB вычисляет их по той же формуле; значения, которые экспорт для них записал, опускаются.

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

    обычный столбец

    Формула, которую нельзя записать для MariaDB, оставляет обычный столбец и строку в отчете; значения, которые экспорт записал для виртуальных столбцов, опускаются, и MariaDB не может их вычислить.

    Строка отчета: generated_not_translated

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

    без значения по умолчанию

    Значение по умолчанию, которое нельзя записать, опускается и попадает в отчет.

    Строка отчета: default_not_translated

  • CHECK constraints

    переводится

    Те же проверки, применяемые при загрузке каждой строки.

  • CHECK constraints with functions IntoSQL doesn't write

    не создается

    Проверка, которую нельзя записать, опускается и попадает в отчет.

    Строка отчета: check_skipped

  • CHECK constraints that are DISABLE or ENABLE NOVALIDATE

    не создается

    Oracle не применяет эти проверки к уже существующим строкам, поэтому строки могут их нарушать.

    Строка отчета: check_not_enforced

  • function-based, bitmap and domain indexes

    не создается

    IntoSQL создает индексы b-tree по целым столбцам; остальные создайте заново после загрузки.

    Строка отчета: index_skipped

  • foreign keys

    внешние ключи, загрузка с FOREIGN_KEY_CHECKS=0

    Строки загружаются в любом порядке, а ключи затем проверяют новые строки.

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

    не создается

    Ключ не может ссылаться на таблицу, которой нет, а у ключа, который Oracle не проверяет, могут быть строки без родителя.

    Строка отчета: foreign_key_skipped

  • partitioned tables

    одна таблица со строками всех секций

    Строки те же; при необходимости секционируйте таблицу заново в MariaDB.

    Строка отчета: partitions_dropped

  • several schemas in one export

    одна база данных, имя таблицы начинается с имени ее схемы

    Схемы в MariaDB - это базы данных, а экспорт, загружаемый в одну базу, не может их создать; экспорт одной схемы сохраняет имена своих таблиц.

    Строка отчета: schemas_merged

  • NOT NULL columns with values that become NULL

    NOT NULL снимается

    Столбец, значения которого пришлось заменить на NULL, не может сохранить NOT NULL, иначе загрузка остановится.

    Строка отчета: not_null_relaxed

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

    перечисляются в отчете

    Их код написан на PL/SQL, поэтому они перечислены, чтобы вы создали их заново.

    Строка отчета: not_converted_objects

  • exports without CREATE TABLE (data only)

    типы определяются по значениям

    Экспорт только с данными содержит лишь строки, поэтому типы берутся из значений.

    Строка отчета: no_schema

  • expressions in INSERT values other than the ones exports write

    NULL

    Конвертер, который не запускает базу данных, не может их вычислить; to_date, to_timestamp, TO_CLOB, HEXTORAW и другие функции, которые пишут экспорты, читаются.

    Строка отчета: expression_value

  • types IntoSQL doesn't know, and object types

    longtext

    Тип text вмещает любое значение; измените тип после загрузки.

    Строка отчета: unknown_type

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

    NULL

    MariaDB хранит годы с 1000 по 9999, а Oracle начинается с 1 года. Такие значения становятся NULL, а отчет их подсчитывает.

    Строка отчета: date_out_of_range

  • NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLE

    NULL

    Типы с плавающей точкой в MariaDB не поддерживают NaN и бесконечность, поэтому такие значения становятся NULL, а отчет их подсчитывает.

    Строка отчета: invalid_value_null

  • NUL characters in text

    сохраняется

    Значение копируется, а символ NUL в нем экранируется.

  • text that isn't valid in its encoding

    неверные байты заменяются символом замены

    Скрипт в UTF-8, и каждое значение должно быть корректным текстом.

    Строка отчета: invalid_utf8_replaced

  • text decoded twice (ñ)

    копируется как есть

    Скрипт содержит именно эти символы, поэтому они копируются; отчет на них указывает.

    Строка отчета: mojibake_suspected

В OracleВ MariaDBСтрока отчета
BOOLEAN (23ai)tinyint(1)В MariaDB нет логического столбца, поэтому TRUE и FALSE становятся 1 и 0.
VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONGvarchar(n) до 1024 символов, дальше типы textДлины считаются в символах, считал ли Oracle байты или символы, поэтому каждое значение помещается.
NUMBER, NUMBER(p,s), FLOAT(b)decimal(p,s) или bigintNUMBER сохраняет каждую цифру; NUMBER без точности, все значения которого - целые числа до 18 цифр, становится 64-битным целым, а отрицательный масштаб хранит столько же цифр до запятой.
INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECONDvarchar(100) с текстом Oracle, например +01-06TIME в MariaDB вмещает длительности до 838 часов и не содержит лет и месяцев; текст сохраняет каждую часть.type_replaced
DATE, TIMESTAMP(p)datetime(p)DATE в Oracle хранит время с точностью до секунды, поэтому это дата и время. Экспорт в американском или немецком сеансе записывает даты без времени и века (DD-MON-RR); экспортируйте в сеансе ISO (SYYYY-MM-DD HH24:MI:SS), чтобы их сохранить.
TIMESTAMP(7) to TIMESTAMP(9)шесть цифр долей секунды, седьмая отбрасываетсяMariaDB хранит микросекунды; седьмая цифра (100 наносекунд) отбрасывается, а не округляется, поэтому ни одно значение не переходит на следующую секунду или день.fraction_cut
TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONEdatetime(p) в UTCTIMESTAMP в MariaDB доходит только до 2038 года, поэтому моменты хранятся как datetime в UTC: тот же момент, какое бы смещение ни было у значения.moments_as_utc
JSON (21c), and CLOB holding JSONjsonТе же значения JSON; SQL NULL, который экспорт записал как 'null', остается NULL.
BLOB, RAW(n), LONG RAWbinary(n), varbinary(n) и типы blobБайты остаются байтами.
ROWID, UROWID, XMLTYPE, SDO_GEOMETRYtextУ собственных типов Oracle нет аналогов; их значения сохраняют свой текст, включая значения ROWID, хотя вне Oracle они ничего не значат.type_replaced
collations that ignore case (BINARY_CI)точное сравнение (utf8mb4_bin)Таблицы используют utf8mb4_bin, поэтому уникальные ключи различают то, что различал Oracle; столбцы, которые не учитывали регистр, это теряют. Правила для диакритики отличаются в разных версиях, поэтому ни одна сортировка _ci не совпадает с Oracle во всех из них.case_insensitive_collation
identity columns, and a sequence a BEFORE INSERT trigger assignsAUTO_INCREMENT, продолжается после наибольшего idСкопированные id загружаются как есть, а счетчик продолжается после наибольшего. Столбец, который триггер заполняет из последовательности (способ до 12c), тоже становится столбцом identity.
identity columns the target can't countобычное целоеMariaDB нумерует один столбец на таблицу, в начале ключа; любой другой сохраняет значения без счетчика.counter_dropped
CREATE SEQUENCECREATE SEQUENCE с теми же параметрамиЭкспорт записывает, до какого значения дошла последовательность, как ее START WITH, поэтому она продолжается оттуда.
virtual columns (GENERATED ALWAYS AS ... VIRTUAL)генерируемые столбцы, STORED при PERSISTED, иначе VIRTUALMariaDB вычисляет их по той же формуле; значения, которые экспорт для них записал, опускаются.
virtual columns with functions IntoSQL doesn't write, and the || operatorобычный столбецФормула, которую нельзя записать для MariaDB, оставляет обычный столбец и строку в отчете; значения, которые экспорт записал для виртуальных столбцов, опускаются, и MariaDB не может их вычислить.generated_not_translated
defaults with functions IntoSQL doesn't write (SYS_GUID(), ||)без значения по умолчаниюЗначение по умолчанию, которое нельзя записать, опускается и попадает в отчет.default_not_translated
CHECK constraintsпереводитсяТе же проверки, применяемые при загрузке каждой строки.
CHECK constraints with functions IntoSQL doesn't writeне создаетсяПроверка, которую нельзя записать, опускается и попадает в отчет.check_skipped
CHECK constraints that are DISABLE or ENABLE NOVALIDATEне создаетсяOracle не применяет эти проверки к уже существующим строкам, поэтому строки могут их нарушать.check_not_enforced
function-based, bitmap and domain indexesне создаетсяIntoSQL создает индексы b-tree по целым столбцам; остальные создайте заново после загрузки.index_skipped
foreign keysвнешние ключи, загрузка с FOREIGN_KEY_CHECKS=0Строки загружаются в любом порядке, а ключи затем проверяют новые строки.
foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE onesне создаетсяКлюч не может ссылаться на таблицу, которой нет, а у ключа, который Oracle не проверяет, могут быть строки без родителя.foreign_key_skipped
partitioned tablesодна таблица со строками всех секцийСтроки те же; при необходимости секционируйте таблицу заново в MariaDB.partitions_dropped
several schemas in one exportодна база данных, имя таблицы начинается с имени ее схемыСхемы в MariaDB - это базы данных, а экспорт, загружаемый в одну базу, не может их создать; экспорт одной схемы сохраняет имена своих таблиц.schemas_merged
NOT NULL columns with values that become NULLNOT NULL снимаетсяСтолбец, значения которого пришлось заменить на NULL, не может сохранить NOT NULL, иначе загрузка остановится.not_null_relaxed
views, synonyms, types, packages, procedures, functions and other triggersперечисляются в отчетеИх код написан на PL/SQL, поэтому они перечислены, чтобы вы создали их заново.not_converted_objects
exports without CREATE TABLE (data only)типы определяются по значениямЭкспорт только с данными содержит лишь строки, поэтому типы берутся из значений.no_schema
expressions in INSERT values other than the ones exports writeNULLКонвертер, который не запускает базу данных, не может их вычислить; to_date, to_timestamp, TO_CLOB, HEXTORAW и другие функции, которые пишут экспорты, читаются.expression_value
types IntoSQL doesn't know, and object typeslongtextТип text вмещает любое значение; измените тип после загрузки.unknown_type
dates before year 1 and time zones given as region namesNULLMariaDB хранит годы с 1000 по 9999, а Oracle начинается с 1 года. Такие значения становятся NULL, а отчет их подсчитывает.date_out_of_range
NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLENULLТипы с плавающей точкой в MariaDB не поддерживают NaN и бесконечность, поэтому такие значения становятся NULL, а отчет их подсчитывает.invalid_value_null
NUL characters in textсохраняетсяЗначение копируется, а символ NUL в нем экранируется.
text that isn't valid in its encodingневерные байты заменяются символом заменыСкрипт в UTF-8, и каждое значение должно быть корректным текстом.invalid_utf8_replaced
text decoded twice (ñ)копируется как естьСкрипт содержит именно эти символы, поэтому они копируются; отчет на них указывает.mojibake_suspected

Загрузите скрипт в MariaDB

Скрипт создает таблицы, копирует строки, затем добавляет ключи, индексы и внешние ключи, поэтому загрузка идет быстро и останавливается на первой ошибке.

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

Внешние ключи создаются так, как их объявляет дамп, с FOREIGN_KEY_CHECKS=0 на время загрузки строк, как это делает mysqldump.

Для большого дампа запускайте клиент на той же машине, где работает сервер, и увеличьте max_allowed_packet, если отдельная строка очень большая.

IntoSQL Pro загружает файл прямо в MariaDB из приложения для компьютера или командной строки, без написания скрипта.

Как создать дамп Oracle для лучшего результата

Конвертер читает то, что есть в дампе. Эти параметры сохраняют в нем больше ваших данных:

  • В SQL Developer выберите Tools, Database Export, с DDL и форматом данных Insert. SQLcl записывает то же самое с SET SQLFORMAT INSERT.
  • Выполните ALTER SESSION SET NLS_DATE_FORMAT = 'SYYYY-MM-DD HH24:MI:SS' перед экспортом: формат по умолчанию записывает даты без времени и века.
  • Файл .dmp из exp или expdp двоичный: импортируйте его в базу Oracle, например в Oracle Database Free в Docker, и экспортируйте через SQL Developer.

Что не конвертируется

Представления, пакеты, процедуры, функции, триггеры, типы и синонимы написаны на PL/SQL. Они перечислены в отчете по имени и никогда не удаляются молча, чтобы вы могли переписать их для MariaDB.

Вопросы о Oracle в MariaDB

Нет ответа на ваш вопрос? Напишите нам через страницу контактов, и вам ответит человек. Страница контактов

Мой дамп загружается на сервер?

Нет. Конвертер работает в вашем браузере и читает дамп с диска по частям, поэтому он никогда не покидает ваш компьютер. Приложение для компьютера и командная строка тоже конвертируют на вашем компьютере.

Насколько большим может быть дамп?

Конвертер никогда не держит весь дамп в памяти: он читает файл дважды, по диапазонам, и пишет скрипт по ходу чтения. Дампы в несколько гигабайт конвертируются в браузере, в приложении для компьютера и в командной строке.

Можно ли конвертировать файл .dmp из exp или expdp?

Не напрямую: Data Pump и исходный Export пишут двоичный формат, который читает только Oracle. Импортируйте его в любую базу Oracle (Oracle Database Free работает в Docker) и экспортируйте через Database Export в SQL Developer или SQLcl. Конвертер сообщает об этом, когда получает файл .dmp.

Из каких версий Oracle может быть экспорт?

Экспорты из SQL Developer и SQLcl с определениями таблиц из DBMS_METADATA, из Oracle 11g и новее. Каждый тестовый экспорт создан в Oracle 21c и 23ai, в американском, немецком и ISO-сеансах, и сверен с источником ячейка за ячейкой.

Что происходит с NUMBER, DATE и другими типами Oracle?

NUMBER становится decimal, или bigint для целых чисел, и текстом свыше 65 цифр; DATE становится datetime и сохраняет время; CLOB - longtext, BLOB - blob, а интервалы сохраняют текст Oracle. NaN и Infinity становятся NULL, а отчет их подсчитывает.

Сохраняются ли столбцы identity и последовательности?

Да. Столбцы identity становятся AUTO_INCREMENT и продолжаются после наибольшего id; последовательности становятся последовательностями MariaDB, а значения по умолчанию, которые берутся из них, продолжают из них браться.

А пакеты, процедуры и триггеры PL/SQL?

Они перечислены в отчете по имени и не конвертируются, потому что каждая база данных пишет их на своем языке.

На каких версиях MariaDB загружается скрипт?

MariaDB 10.11 и новее. Каждый тестовый экспорт загружается на 10.11 и 11.4 и останавливается на первой ошибке, если что-то пойдет не так.