Конвертация Oracle в MariaDB
Перетащите файл .sql, который записывает Database Export в SQL Developer или SQLcl, с таблицами и командами Insert, и скачайте скрипт MariaDB с теми же таблицами, ключами, индексами и данными. Каждое значение, которое MariaDB не может хранить как есть, и каждый объект, который он не переносит, указаны в отчете.
18 строк конвертировано, без исправлений, ни одна не отклонена
Таблицы в shop_2024_oracle.sqlДамп Oracle · создан программой SQL Developer · utf-8
customers8 строк
7 столбцов 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 строк
9 столбцов 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;
Исправления
Исправлять ничего не пришлось.
Файл конвертируется на этом компьютере и никуда не загружается.
Другие примеры:
Что меняется при переходе с 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, LONG | varchar(n) до 1024 символов, дальше типы textДлины считаются в символах, считал ли Oracle байты или символы, поэтому каждое значение помещается. | |
| NUMBER, NUMBER(p,s), FLOAT(b) | decimal(p,s) или bigintNUMBER сохраняет каждую цифру; NUMBER без точности, все значения которого - целые числа до 18 цифр, становится 64-битным целым, а отрицательный масштаб хранит столько же цифр до запятой. | |
| INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND | varchar(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 ZONE | datetime(p) в UTCTIMESTAMP в 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, иначе 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 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 | NULLMariaDB хранит годы с 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 |
Загрузите скрипт в 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 и останавливается на первой ошибке, если что-то пойдет не так.