Converta Oracle para MariaDB
Solte o arquivo .sql que o Database Export do SQL Developer ou o SQLcl escreve, com suas tabelas e instruções Insert, e baixe um script do MariaDB com as mesmas tabelas, chaves, índices e dados. Cada valor que o MariaDB não aceita como está, e cada objeto que ele não traz, aparece no relatório.
18 linhas convertidas, nenhuma correção, nenhuma rejeitada
Tabelas em shop_2024_oracle.sqlDump do Oracle · gerado por SQL Developer · utf-8
customers8 linhas
7 colunas 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 linhas
9 colunas 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;
Correções
Nada precisou de correção.
Seu arquivo é convertido neste computador e nunca é enviado.
Outros exemplos:
O que muda do Oracle para o MariaDB
Cada linha é uma regra que o conversor aplica, com a linha do relatório que ele escreve quando a regra muda algo nos seus dados.
BOOLEAN (23ai)
tinyint(1)
O MariaDB não tem coluna booleana, então TRUE e FALSE são 1 e 0.
VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONG
varchar(n) até 1024 caracteres, tipos text acima disso
Os tamanhos contam caracteres, quer o Oracle contasse bytes ou caracteres, então todo valor cabe.
NUMBER, NUMBER(p,s), FLOAT(b)
decimal(p,s), ou bigint
NUMBER mantém cada dígito; um NUMBER sem precisão cujos valores são todos números inteiros de até 18 dígitos vira um inteiro de 64 bits, e uma escala negativa comporta outros tantos dígitos antes do ponto.
INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND
varchar(100) com o texto do Oracle, como +01-06
O TIME do MariaDB guarda durações de até 838 horas, e não tem anos nem meses; o texto mantém cada parte.
Linha do relatório: type_replaced
DATE, TIMESTAMP(p)
datetime(p)
O DATE do Oracle guarda uma hora até o segundo, então é uma data e hora. Uma exportação em uma sessão americana ou alemã escreve as datas sem a hora nem o século (DD-MON-RR); exporte em uma sessão ISO (SYYYY-MM-DD HH24:MI:SS) para mantê-las.
TIMESTAMP(7) to TIMESTAMP(9)
seis dígitos de segundo, o sétimo cortado
O MariaDB guarda microssegundos; o sétimo dígito (100 nanossegundos) é cortado, nunca arredondado, então nenhum valor passa para o segundo ou o dia seguinte.
Linha do relatório: fraction_cut
TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE
datetime(p) em UTC
O TIMESTAMP do MariaDB só vai até 2038, então os instantes são guardados como datetime em UTC, o mesmo instante qualquer que seja o fuso que cada valor tinha.
Linha do relatório: moments_as_utc
JSON (21c), and CLOB holding JSON
json
Os mesmos valores JSON; um NULL do SQL que a exportação escreveu como 'null' continua NULL.
BLOB, RAW(n), LONG RAW
binary(n), varbinary(n) e tipos blob
Bytes continuam bytes.
ROWID, UROWID, XMLTYPE, SDO_GEOMETRY
text
Os tipos próprios do Oracle não têm equivalente; seus valores mantêm o texto, incluindo os valores ROWID, embora fora do Oracle não signifiquem nada.
Linha do relatório: type_replaced
collations that ignore case (BINARY_CI)
comparação exata (utf8mb4_bin)
As tabelas usam utf8mb4_bin para que as chaves únicas separem o que o Oracle separava; colunas que ignoravam maiúsculas perdem isso. As regras de acentos mudam entre versões, então nenhuma collation _ci corresponde à do Oracle em todas.
Linha do relatório: case_insensitive_collation
identity columns, and a sequence a BEFORE INSERT trigger assigns
AUTO_INCREMENT, continuando depois do maior id
Os ids copiados carregam como estão, e o contador continua depois do maior deles. Uma coluna que um gatilho preenche a partir de uma sequência (o jeito de antes do 12c) também é de identidade.
identity columns the target can't count
um inteiro simples
O MariaDB conta uma coluna por tabela, no início de uma chave; qualquer outra mantém seus valores sem contador.
Linha do relatório: counter_dropped
CREATE SEQUENCE
CREATE SEQUENCE com as mesmas opções
A exportação escreve até onde uma sequência chegou como o seu START WITH, então ela continua dali.
virtual columns (GENERATED ALWAYS AS ... VIRTUAL)
colunas geradas, STORED quando PERSISTED, VIRTUAL nos outros casos
O MariaDB as calcula com a mesma fórmula; os valores que a exportação escreveu para elas ficam de fora.
virtual columns with functions IntoSQL doesn't write, and the || operator
uma coluna simples
Uma fórmula que não pode ser escrita para o MariaDB deixa uma coluna simples e uma linha no relatório; os valores que a exportação escreveu para colunas virtuais ficam de fora, e o MariaDB não tem nenhum para calcular.
Linha do relatório: generated_not_translated
defaults with functions IntoSQL doesn't write (SYS_GUID(), ||)
sem valor padrão
Um valor padrão que não pode ser escrito fica de fora e é informado.
Linha do relatório: default_not_translated
CHECK constraints
traduzidos
Os mesmos CHECKs, testados à medida que cada linha carrega.
CHECK constraints with functions IntoSQL doesn't write
não criado
Um CHECK que não pode ser escrito fica de fora e é informado.
Linha do relatório: check_skipped
CHECK constraints that are DISABLE or ENABLE NOVALIDATE
não criado
O Oracle não aplica esses CHECKs às linhas que já existiam, então as linhas podem violá-los.
Linha do relatório: check_not_enforced
function-based, bitmap and domain indexes
não criado
O IntoSQL escreve índices b-tree sobre colunas inteiras; crie os outros de novo depois da carga.
Linha do relatório: index_skipped
foreign keys
chaves estrangeiras, carregadas com FOREIGN_KEY_CHECKS=0
As linhas carregam em qualquer ordem, e as chaves verificam as linhas novas depois.
foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE ones
não criada
Uma chave não pode apontar para uma tabela que não existe, e uma que o Oracle não verifica pode ter linhas sem pai.
Linha do relatório: foreign_key_skipped
partitioned tables
uma tabela com as linhas de todas as partições
As linhas são as mesmas; particione a tabela de novo no MariaDB se precisar.
Linha do relatório: partitions_dropped
several schemas in one export
um banco de dados, tabelas com o nome do schema na frente
Os schemas do MariaDB são bancos de dados, que uma exportação carregada em um único banco não pode criar; uma exportação de um só schema mantém os nomes das suas tabelas.
Linha do relatório: schemas_merged
NOT NULL columns with values that become NULL
NOT NULL removido
Uma coluna cujos valores tiveram de virar NULL não pode manter NOT NULL, senão a carga pararia.
Linha do relatório: not_null_relaxed
views, synonyms, types, packages, procedures, functions and other triggers
listados no relatório
O código deles é escrito em PL/SQL, então eles são listados para você recriá-los.
Linha do relatório: not_converted_objects
exports without CREATE TABLE (data only)
tipos lidos dos valores
Uma exportação só de dados tem apenas linhas, então os tipos vêm dos valores.
Linha do relatório: no_schema
expressions in INSERT values other than the ones exports write
NULL
Um conversor que não executa um banco de dados não consegue avaliá-las; to_date, to_timestamp, TO_CLOB, HEXTORAW e as outras que as exportações escrevem são lidas.
Linha do relatório: expression_value
types IntoSQL doesn't know, and object types
longtext
O texto aceita qualquer valor; mude o tipo depois da carga.
Linha do relatório: unknown_type
dates before year 1 and time zones given as region names
NULL
O MariaDB guarda os anos de 1000 a 9999, e o Oracle vai até o ano 1. Esses valores viram NULL e o relatório os conta.
Linha do relatório: date_out_of_range
NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLE
NULL
Os tipos de ponto flutuante do MariaDB não têm NaN nem infinito, então esses valores viram NULL e o relatório os conta.
Linha do relatório: invalid_value_null
NUL characters in text
mantido
O valor é copiado com o caractere NUL escapado.
text that isn't valid in its encoding
os bytes inválidos como o caractere de substituição
O script é UTF-8 e todo valor precisa ser texto válido.
Linha do relatório: invalid_utf8_replaced
text decoded twice (ñ)
copiado como está
O script contém exatamente esses caracteres, então eles são copiados; o relatório os aponta.
Linha do relatório: mojibake_suspected
| No Oracle | No MariaDB | Linha do relatório |
|---|---|---|
| BOOLEAN (23ai) | tinyint(1)O MariaDB não tem coluna booleana, então TRUE e FALSE são 1 e 0. | |
| VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONG | varchar(n) até 1024 caracteres, tipos text acima dissoOs tamanhos contam caracteres, quer o Oracle contasse bytes ou caracteres, então todo valor cabe. | |
| NUMBER, NUMBER(p,s), FLOAT(b) | decimal(p,s), ou bigintNUMBER mantém cada dígito; um NUMBER sem precisão cujos valores são todos números inteiros de até 18 dígitos vira um inteiro de 64 bits, e uma escala negativa comporta outros tantos dígitos antes do ponto. | |
| INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND | varchar(100) com o texto do Oracle, como +01-06O TIME do MariaDB guarda durações de até 838 horas, e não tem anos nem meses; o texto mantém cada parte. | type_replaced |
| DATE, TIMESTAMP(p) | datetime(p)O DATE do Oracle guarda uma hora até o segundo, então é uma data e hora. Uma exportação em uma sessão americana ou alemã escreve as datas sem a hora nem o século (DD-MON-RR); exporte em uma sessão ISO (SYYYY-MM-DD HH24:MI:SS) para mantê-las. | |
| TIMESTAMP(7) to TIMESTAMP(9) | seis dígitos de segundo, o sétimo cortadoO MariaDB guarda microssegundos; o sétimo dígito (100 nanossegundos) é cortado, nunca arredondado, então nenhum valor passa para o segundo ou o dia seguinte. | fraction_cut |
| TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE | datetime(p) em UTCO TIMESTAMP do MariaDB só vai até 2038, então os instantes são guardados como datetime em UTC, o mesmo instante qualquer que seja o fuso que cada valor tinha. | moments_as_utc |
| JSON (21c), and CLOB holding JSON | jsonOs mesmos valores JSON; um NULL do SQL que a exportação escreveu como 'null' continua NULL. | |
| BLOB, RAW(n), LONG RAW | binary(n), varbinary(n) e tipos blobBytes continuam bytes. | |
| ROWID, UROWID, XMLTYPE, SDO_GEOMETRY | textOs tipos próprios do Oracle não têm equivalente; seus valores mantêm o texto, incluindo os valores ROWID, embora fora do Oracle não signifiquem nada. | type_replaced |
| collations that ignore case (BINARY_CI) | comparação exata (utf8mb4_bin)As tabelas usam utf8mb4_bin para que as chaves únicas separem o que o Oracle separava; colunas que ignoravam maiúsculas perdem isso. As regras de acentos mudam entre versões, então nenhuma collation _ci corresponde à do Oracle em todas. | case_insensitive_collation |
| identity columns, and a sequence a BEFORE INSERT trigger assigns | AUTO_INCREMENT, continuando depois do maior idOs ids copiados carregam como estão, e o contador continua depois do maior deles. Uma coluna que um gatilho preenche a partir de uma sequência (o jeito de antes do 12c) também é de identidade. | |
| identity columns the target can't count | um inteiro simplesO MariaDB conta uma coluna por tabela, no início de uma chave; qualquer outra mantém seus valores sem contador. | counter_dropped |
| CREATE SEQUENCE | CREATE SEQUENCE com as mesmas opçõesA exportação escreve até onde uma sequência chegou como o seu START WITH, então ela continua dali. | |
| virtual columns (GENERATED ALWAYS AS ... VIRTUAL) | colunas geradas, STORED quando PERSISTED, VIRTUAL nos outros casosO MariaDB as calcula com a mesma fórmula; os valores que a exportação escreveu para elas ficam de fora. | |
| virtual columns with functions IntoSQL doesn't write, and the || operator | uma coluna simplesUma fórmula que não pode ser escrita para o MariaDB deixa uma coluna simples e uma linha no relatório; os valores que a exportação escreveu para colunas virtuais ficam de fora, e o MariaDB não tem nenhum para calcular. | generated_not_translated |
| defaults with functions IntoSQL doesn't write (SYS_GUID(), ||) | sem valor padrãoUm valor padrão que não pode ser escrito fica de fora e é informado. | default_not_translated |
| CHECK constraints | traduzidosOs mesmos CHECKs, testados à medida que cada linha carrega. | |
| CHECK constraints with functions IntoSQL doesn't write | não criadoUm CHECK que não pode ser escrito fica de fora e é informado. | check_skipped |
| CHECK constraints that are DISABLE or ENABLE NOVALIDATE | não criadoO Oracle não aplica esses CHECKs às linhas que já existiam, então as linhas podem violá-los. | check_not_enforced |
| function-based, bitmap and domain indexes | não criadoO IntoSQL escreve índices b-tree sobre colunas inteiras; crie os outros de novo depois da carga. | index_skipped |
| foreign keys | chaves estrangeiras, carregadas com FOREIGN_KEY_CHECKS=0As linhas carregam em qualquer ordem, e as chaves verificam as linhas novas depois. | |
| foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE ones | não criadaUma chave não pode apontar para uma tabela que não existe, e uma que o Oracle não verifica pode ter linhas sem pai. | foreign_key_skipped |
| partitioned tables | uma tabela com as linhas de todas as partiçõesAs linhas são as mesmas; particione a tabela de novo no MariaDB se precisar. | partitions_dropped |
| several schemas in one export | um banco de dados, tabelas com o nome do schema na frenteOs schemas do MariaDB são bancos de dados, que uma exportação carregada em um único banco não pode criar; uma exportação de um só schema mantém os nomes das suas tabelas. | schemas_merged |
| NOT NULL columns with values that become NULL | NOT NULL removidoUma coluna cujos valores tiveram de virar NULL não pode manter NOT NULL, senão a carga pararia. | not_null_relaxed |
| views, synonyms, types, packages, procedures, functions and other triggers | listados no relatórioO código deles é escrito em PL/SQL, então eles são listados para você recriá-los. | not_converted_objects |
| exports without CREATE TABLE (data only) | tipos lidos dos valoresUma exportação só de dados tem apenas linhas, então os tipos vêm dos valores. | no_schema |
| expressions in INSERT values other than the ones exports write | NULLUm conversor que não executa um banco de dados não consegue avaliá-las; to_date, to_timestamp, TO_CLOB, HEXTORAW e as outras que as exportações escrevem são lidas. | expression_value |
| types IntoSQL doesn't know, and object types | longtextO texto aceita qualquer valor; mude o tipo depois da carga. | unknown_type |
| dates before year 1 and time zones given as region names | NULLO MariaDB guarda os anos de 1000 a 9999, e o Oracle vai até o ano 1. Esses valores viram NULL e o relatório os conta. | date_out_of_range |
| NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLE | NULLOs tipos de ponto flutuante do MariaDB não têm NaN nem infinito, então esses valores viram NULL e o relatório os conta. | invalid_value_null |
| NUL characters in text | mantidoO valor é copiado com o caractere NUL escapado. | |
| text that isn't valid in its encoding | os bytes inválidos como o caractere de substituiçãoO script é UTF-8 e todo valor precisa ser texto válido. | invalid_utf8_replaced |
| text decoded twice (ñ) | copiado como estáO script contém exatamente esses caracteres, então eles são copiados; o relatório os aponta. | mojibake_suspected |
Carregue o script no MariaDB
O script cria as tabelas, copia as linhas e depois adiciona chaves, índices e chaves estrangeiras, então carrega rápido e para no primeiro erro.
mariadb --default-character-set=utf8mb4 mydb < oracle.mariadb.sqlAs chaves estrangeiras são criadas como o dump as declara, com FOREIGN_KEY_CHECKS=0 enquanto as linhas carregam, como faz o mysqldump.
Para um dump grande, execute o cliente na mesma máquina do servidor e aumente max_allowed_packet se uma única linha for muito grande.
O IntoSQL Pro carrega o arquivo direto no MariaDB pelo app para desktop ou pela linha de comando, sem escrever um script.
Gere o dump do Oracle para o melhor resultado
O conversor lê o que o dump contém. Estas opções mantêm mais dos seus dados nele:
- No SQL Developer, escolha Tools, Database Export, com DDL e o formato de dados Insert. O SQLcl escreve o mesmo com SET SQLFORMAT INSERT.
- Rode ALTER SESSION SET NLS_DATE_FORMAT = 'SYYYY-MM-DD HH24:MI:SS' antes de exportar: o formato padrão escreve as datas sem a hora nem o século.
- Um arquivo .dmp do exp ou do expdp é binário: importe-o em um banco de dados Oracle, como o Oracle Database Free no Docker, e exporte-o com o SQL Developer.
O que não é convertido
Visões, pacotes, procedimentos, funções, gatilhos, tipos e sinônimos são escritos em PL/SQL. Eles aparecem no relatório pelo nome, nunca são descartados em silêncio, para que você possa reescrevê-los para o MariaDB.
Perguntas sobre Oracle para MariaDB
Não encontrou a resposta? Escreva para nós pela página de contato e uma pessoa responde. Página de contato
Meu dump é enviado?
Não. O conversor roda no seu navegador e lê o dump do seu disco em partes, então ele nunca sai do seu computador. O app para desktop e a linha de comando também convertem no seu computador.
Qual o tamanho máximo do dump?
O conversor nunca guarda o dump inteiro na memória: ele lê o arquivo duas vezes, por intervalos, e escreve o script à medida que avança. Dumps de vários gigabytes são convertidos no navegador, no app para desktop e com a linha de comando.
Posso converter um arquivo .dmp do exp ou do expdp?
Não diretamente: o Data Pump e o Export original escrevem um formato binário que só o Oracle lê. Importe-o em qualquer banco de dados Oracle, o Oracle Database Free roda no Docker, e exporte-o com o Database Export do SQL Developer ou com o SQLcl. O conversor avisa quando recebe um arquivo .dmp.
De quais versões do Oracle a exportação pode vir?
Exportações do SQL Developer e do SQLcl, com as definições de tabela do DBMS_METADATA, a partir do Oracle 11g. Cada exportação de teste vem do Oracle 21c e 23ai, em sessões americanas, alemãs e ISO, e é comparada com a origem célula por célula.
O que acontece com NUMBER, DATE e os outros tipos do Oracle?
NUMBER vira decimal, ou bigint para números inteiros, e texto acima de 65 dígitos; DATE vira datetime, mantendo a hora; CLOB longtext, BLOB blob, e os intervalos mantêm o texto do Oracle. NaN e Infinity viram NULL e o relatório os conta.
As colunas de identidade e as sequências são mantidas?
Sim. As colunas de identidade viram AUTO_INCREMENT e continuam depois do maior id; as sequências viram sequências do MariaDB, e os valores padrão que usam uma continuam usando.
E os pacotes, procedimentos e gatilhos em PL/SQL?
Eles aparecem no relatório pelo nome e não são convertidos, porque cada banco de dados os escreve na sua própria linguagem.
Em quais versões do MariaDB o script carrega?
MariaDB 10.11 e posteriores. Cada exportação de teste carrega no 10.11 e no 11.4 e para no primeiro erro se algo der errado.