MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

Migração do banco de dados Oracle para o MariaDB - um mergulho profundo


Nos blogs anteriores, discutimos o tópico Como migrar do Oracle para o MySQL/Percona Server e, mais recentemente, Migrando do banco de dados Oracle para o MariaDB - O que você deve saber.

Ao longo dos anos e à medida que novas versões do MySQL e do MariaDB foram lançadas, ambos os projetos se desviaram inteiramente para duas plataformas RDBMS muito diferentes.

MariaDB e MySQL agora divergem significativamente entre si, especialmente com a chegada de suas versões mais recentes:MySQL 8.0 e MariaDB 10.3 GA e sua 10.4 (atualmente candidata RC).

Com o lançamento do MariaDB TX 3.0, o MariaDB surpreendeu muitos, pois não é mais um substituto imediato para o MySQL. Ele apresenta um novo nível de compatibilidade com o banco de dados Oracle e agora está se tornando uma alternativa real ao Oracle, bem como a outros bancos de dados corporativos e proprietários, como IBM DB2 ou EnterpriseDB.

A partir da versão 10.3 do MariaDB, recursos significativos foram introduzidos, como tabelas com versão do sistema e, o que é mais atraente para DBAs Oracle, suporte para PL/SQL!

De acordo com o site MariaDB, aproximadamente 80% do Oracle PL/SQL legado pode ser migrado sem reescrever o código. O MariaDB também possui o ColumnStore, que é seu novo mecanismo de análise e um mecanismo de armazenamento colunar projetado para processamento distribuído e massivamente paralelo (MPP), como para análise de big data.

A equipe do MariaDB trabalhou duro para adicionar suporte para PL/SQL. Ele adiciona facilidade extra ao migrar para o MariaDB do Oracle. Como ponto de referência para sua migração planejada, você pode verificar a seguinte referência do MariaDB. De acordo com nosso blog anterior, isso não abrangerá o processo geral de migração, pois é um processo longo. Mas esperamos que forneça informações básicas suficientes para servir de guia para seu processo de migração.

Planejamento e Estratégia de Desenvolvimento


Para o DBA, migrar do banco de dados Oracle para o MariaDB, essa migração significa muitos fatores semelhantes que não devem ser muito difíceis de mudar e adaptar. O MariaDB pode ser operado em servidor Windows e possui binários disponíveis para download na plataforma Windows. Se você estiver usando Oracle para OLAP (Online Analytical Processing) ou business intelligence, o MariaDB também possui o ColumnStore, que é o equivalente ao armazenamento de colunas Database In-Memory do Oracle.

Se você está acostumado a ter uma arquitetura Oracle com MAA (Maximum Available Architecture) com Data Guard ++ Oracle RAC (Real Application Cluster), igual ao MySQL/Percona Server, em MariaDB, você pode escolher entre uma replicação síncrona, semi- sync ou uma replicação assíncrona.

Para uma solução altamente disponível, o MariaDB tem o Maxscale como sua principal opção que você pode usar. Você pode misturar MaxScale com Keepalived e HAProxy. O ClusterControl, por exemplo, pode gerenciar isso de forma eficiente e mesmo com a chegada do produto MariaDB, MariaDB TX. Consulte nosso blog anterior para saber mais sobre como o ClusterControl pode gerenciar isso com eficiência.

Sendo o MariaDB uma tecnologia de código aberto, esta questão deve ser considerada:"Como obtemos suporte?"

Ao escolher uma opção de suporte, você precisa ter certeza de que ela não se limita ao banco de dados, mas deve abranger experiência em escalabilidade, redundância, resiliência, backups, alta disponibilidade, segurança, monitoramento/observabilidade, recuperação e envolvimento em sistemas de missão crítica . No geral, a oferta de suporte que você escolher precisa vir com uma compreensão de sua configuração arquitetônica sem expor a confidencialidade de seus dados.

Além disso, MariaDB tem uma comunidade muito grande e colaborativa em todo o mundo. Se você tiver problemas e quiser perguntar às pessoas envolvidas nesta comunidade, você pode experimentar o Freenode via cliente IRC (Internet Relay Chat), ir para a página da comunidade ou participar da lista de discussão.

Avaliação ou Verificação Preliminar


Fazer backup de seus dados, incluindo configurações ou arquivos de configuração, ajustes de kernel, scripts de automação precisam ser considerados:é uma tarefa óbvia, mas antes de migrar, sempre proteja tudo primeiro, especialmente ao mudar para uma plataforma diferente.

Você também deve avaliar se seus aplicativos estão seguindo as convenções de engenharia de software atualizadas e garantir que sejam independentes de plataforma. Essas práticas podem ser benéficas, especialmente ao mudar para uma plataforma de banco de dados diferente.

Como o MariaDB é uma tecnologia de código aberto, certifique-se de saber quais são os conectores disponíveis no MariaDB. Isso é bastante simples agora, pois existem várias bibliotecas de clientes disponíveis. Verifique aqui uma lista dessas bibliotecas de cliente. Além disso, você também pode verificar esta lista de clientes e utilitários disponíveis na página.

Por último, certifique-se de seus requisitos de hardware.

O MariaDB não possui requisitos específicos:um servidor comum pode funcionar, mas isso depende de quanto desempenho você precisa. No entanto, se você estiver envolvido com o ColumnStore para seus aplicativos analíticos ou aplicativos de data warehouse, confira sua documentação. Extraído de sua página, para a AWS, eles testaram isso geralmente usando tipos de instância m4.4xlarge como um meio termo econômico. O R4.8xlarge também foi testado e funciona cerca de duas vezes mais rápido por cerca de duas vezes o preço.

O que você deve saber


Igual ao MySQL, no MariaDB, você pode criar vários bancos de dados, enquanto o Oracle não vem com essa mesma funcionalidade.

No MariaDB, um esquema é sinônimo de um banco de dados. Você pode substituir a palavra-chave SCHEMA em vez de DATABASE na sintaxe SQL do MariaDB. Por exemplo, usando CREATE SCHEMA em vez de CRIAR BANCO DE DADOS; enquanto a Oracle tem uma distinção para isso. Um esquema representa apenas uma parte de um banco de dados:as tabelas e outros objetos pertencentes a um único usuário. Normalmente, há um relacionamento de um para um entre a instância e o banco de dados.

Por exemplo, em uma configuração de replicação equivalente no Oracle (por exemplo, Real Application Clusters ou RAC), você tem várias instâncias acessando um único banco de dados. Isso permite iniciar o Oracle em vários servidores, todos acessando os mesmos dados. No entanto, no MariaDB, você pode permitir acesso a vários bancos de dados de suas várias instâncias e pode até filtrar quais bancos de dados/esquema você pode replicar para um nó MariaDB.

Fazendo referência a um de nossos blogs anteriores (este e este), o mesmo princípio se aplica quando se fala em converter seu banco de dados com ferramentas disponíveis encontradas na internet.

Não existe tal ferramenta que possa converter 100% do banco de dados Oracle em MariaDB, embora o MariaDB tenha Red Rover Migration Practice; este é um serviço que o MariaDB oferece e não é gratuito.

MariaDB fala sobre migração no Development Bank of Singapore (DBS), como resultado de sua colaboração com MariaDB na compatibilidade com Oracle. Ela conseguiu migrar mais de 50% de seus aplicativos de missão crítica em apenas 12 meses do Oracle Database para o MariaDB.

Mas se você estiver procurando por algumas ferramentas, as ferramentas sqlines, que são SQLines SQL Converter e SQLines Data Tool, oferecem um conjunto de ferramentas simples e operacional.

As seções a seguir descrevem melhor as coisas que você deve estar ciente quando se trata de migração e verificação do resultado lógico do SQL.

Mapeamento de tipo de dados


MySQL e MariaDB compartilham os mesmos tipos de dados disponíveis. Embora existam variações de como ele é implementado, você pode verificar a lista de tipos de dados no MariaDB aqui.

Enquanto o MySQL usa o tipo de dados JSON, o MariaDB difere, pois é apenas um alias do tipo de dados LONGTEXT. O MariaDB também tem uma função, JSON_VALID, que pode ser usada na expressão de restrição CHECK.

Portanto, farei uso desta apresentação tabular abaixo com base nas informações aqui, pois os tipos de dados do MySQL em relação ao MariaDB não se desviam tanto, mas adicionei alterações à medida que o tipo de dados ROW foi introduzido no MariaDB 10.3. 0 como parte do recurso de compatibilidade PL/SQL.

Confira a tabela abaixo:
Oracle MySQL
1 BFILE Ponteiro para arquivo binário, ⇐ 4G VARCHAR(255)
2 BINARY_FLOAT Número de ponto flutuante de 32 bits FLOAT
3 BINARY_DOUBLE Número de ponto flutuante de 64 bits DUPLO
4 BLOB Objeto binário grande, ⇐ 4G LONGBLOB
5 CHAR(n), CHARACTER(n) String de comprimento fixo, 1 ⇐ n ⇐ 255 CHAR(n), CHARACTER(n)
6 CHAR(n), CHARACTER(n) String de comprimento fixo, 256 ⇐ n ⇐ 2000 VARCHAR(n)
7 CLOB Caractere objeto grande, ⇐ 4G TEXTO LONGO
8 DATA Data e hora DATETIME
9 DECIMAL(p,s), DEC(p,s) Número de ponto fixo DECIMAL(p,s), DEC(p,s)
10 DUPLA PRECISÃO Número de ponto flutuante DUPLA PRECISÃO
11 FLOAT(p) Número de ponto flutuante DUPLO
12 INTEIRO, INT 38 dígitos inteiro INT DECIMAL(38)
13 INTERVAL YEAR(p) TO MONTH Intervalo de data VARCHAR(30)
14 INTERVALO DIA(p) A SEGUNDO(s) Intervalo de dia e hora VARCHAR(30)
15 LONGO Dados de caracteres, ⇐ 2G TEXTO LONGO
16 LONG RAW Dados binários, ⇐ 2G LONGBLOB
17 NCHAR(n) String UTF-8 de comprimento fixo, 1 ⇐ n ⇐ 255 NCHAR(n)
18 NCHAR(n) String UTF-8 de comprimento fixo, 256 ⇐ n ⇐ 2000 NVARCHAR(n)
19 NCHAR VARIANDO(n) String UTF-8 de comprimento variável, 1 ⇐ n ⇐ 4000 NCHAR VARYING(n)
20 NCLOB String Unicode de comprimento variável, ⇐ 4G NVARCHAR(max)
21 NUMBER(p,0), NUMBER(p) inteiro de 8 bits, 1 <=p <3 TINYINT (0 a 255)
inteiro de 16 bits, 3 <=p <5 SMALLINT
inteiro de 32 bits, 5 <=p <9 INT
inteiro de 64 bits, 9 <=p <19 GRANDE
Número de ponto fixo, 19 <=p <=38 DECIMAL(p)
22 NUMBER(p,s) Número de ponto fixo, s> 0 DECIMAL(p,s)
23 NÚMERO, NÚMERO(*) Número de ponto flutuante DUPLO
24 NUMERIC(p,s) Número de ponto fixo NUMERIC(p,s)
25 NVARCHAR2(n) String UTF-8 de comprimento variável, 1 ⇐ n ⇐ 4000 NVARCHAR(n)
26 RAW(n) String binária de comprimento variável, 1 ⇐ n ⇐ 255 BINÁRIO(n)
27 RAW(n) String binária de comprimento variável, 256 ⇐ n ⇐ 2000 VARBINÁRIO(n)
28 REAL Número de ponto flutuante DUPLO
29 ROWID Endereço da linha física CHAR(10)
Portanto, para compatibilidade com PL/SQL, você pode usar ROW ( [{, }. .. ])
30 SMALLINT 38 dígitos inteiro DECIMAL(38)
31 TIMESTAMP(p) Data e hora com fração DATETIME(p)
32 TIMESTAMP(p) COM FUSO HORÁRIO Data e hora com fração e fuso horário DATETIME(p)
33 UROWID(n) Endereços de linhas lógicas, 1 ⇐ n ⇐ 4000 VARCHAR(n)
34 VARCHAR(n) String de comprimento variável, 1 ⇐ n ⇐ 4000 VARCHAR(n)
35 VARCHAR2(n) String de comprimento variável, 1 ⇐ n ⇐ 4000 VARCHAR(n)
36 XMLTYPE Dados XML TEXTO LONGO

Atributos e opções do tipo de dados:
Oráculo MySQL
Semântica de tamanho de coluna BYTE e CHAR O tamanho está sempre em caracteres

Transações


MariaDB usa XtraDB de versões anteriores até 10.1 e mudou para InnoDB da versão 10.2 em diante; embora vários mecanismos de armazenamento possam ser uma opção alternativa para lidar com transações, como o mecanismo de armazenamento MyRocks.

Por padrão, o MariaDB tem a variável autocommit definida como ON, o que significa que você precisa manipular explicitamente as instruções transacionais para aproveitar o ROLLBACK para ignorar alterações ou usar SAVEPOINT.

É basicamente o mesmo conceito que a Oracle usa em termos de commit, rollbacks e savepoints.

Para transações explícitas, isso significa que você deve usar o START TRANSACTION/BEGIN; ; COMPROME; sintaxe.

Caso contrário, se você tiver que desabilitar o autocommit, você precisará explicitamente COMMIT o tempo todo para suas instruções que exigem alterações em seus dados.

Mesa dupla


O MariaDB tem a compatibilidade dupla com o Oracle, que se destina à compatibilidade de bancos de dados usando uma tabela fictícia, ou seja, DUAL. Ele opera da mesma forma que o MySQL onde a cláusula FROM não é obrigatória, então a tabela DUAL não é necessária. No entanto, a tabela DUAL não funciona exatamente da mesma maneira que para Oracle, mas para SELECTs simples no MariaDB, isso é bom.

Isso se adequa ao uso do DUAL pela Oracle, portanto, quaisquer instruções existentes em seu aplicativo que usem o DUAL podem não exigir alterações na migração para o MariaDB.

A cláusula Oracle FROM é obrigatória para cada instrução SELECT, portanto, o banco de dados Oracle usa a tabela DUAL para a instrução SELECT onde um nome de tabela não é necessário.

Veja o seguinte exemplo abaixo:

No Oráculo:
SQL> DESC DUAL;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 DUMMY                                              VARCHAR2(1)

SQL> SELECT CURRENT_TIMESTAMP FROM DUAL;
CURRENT_TIMESTAMP
---------------------------------------------------------------------------
16-FEB-19 04.16.18.910331 AM +08:00

Mas no MariaDB:
MariaDB [test]> DESC DUAL;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DUAL' at line 1
MariaDB [test]> SELECT CURRENT_TIMESTAMP FROM DUAL;
+---------------------+
| CURRENT_TIMESTAMP   |
+---------------------+
| 2019-02-27 04:11:01 |
+---------------------+
1 row in set (0.000 sec)

Observação:o DESC DUAL A sintaxe não funciona no MariaDB e os resultados também diferem, pois CURRENT_TIMESTAMP (usa o tipo de dados TIMESTAMP) no MySQL não inclui o fuso horário.

SYSDATE


A função SYSDATE do Oracle é quase a mesma no MariaDB.

MariaDB retorna data e hora e é uma função que requer () (feche e abra parênteses sem necessidade de argumentos. Para demonstrar isso abaixo, aqui estão Oracle e MariaDB usando SYSDATE.

No Oracle, usar SYSDATE simples apenas retorna a data do dia sem a hora. Mas para obter a hora e a data, use TO_CHAR para converter a data e hora no formato desejado; enquanto no MariaDB, você pode não precisar dele para obter a data e a hora, pois retorna ambos.

Veja exemplo abaixo.

No Oráculo:
SQL> SELECT TO_CHAR (SYSDATE, 'MM-DD-YYYY HH24:MI:SS') "NOW" FROM DUAL;
NOW
-------------------
02-16-2019 04:39:00

SQL> SELECT SYSDATE FROM DUAL;

SYSDATE
---------
16-FEB-19

Mas no MariaDB:
MariaDB [test]> SELECT SYSDATE() FROM DUAL;
+---------------------+
| SYSDATE()           |
+---------------------+
| 2019-02-27 04:11:57 |
+---------------------+
1 row in set (0.000 sec)

Se você deseja formatar a data, o MariaDB possui uma função DATE_FORMAT().

Você pode verificar a documentação de data e hora do MariaDB para obter mais informações.

TO_DATE


O equivalente TO_DATE do Oracle no MariaDB é a função STR_TO_DATE().

É quase idêntico ao do Oracle:retorna o tipo de dados DATE, enquanto no MariaDB retorna o tipo de dados DATETIME.

Oráculo:
SQL> SELECT TO_DATE ('20190218121212','yyyymmddhh24miss') as "NOW" FROM DUAL; 
NOW
-------------------------
18-FEB-19

MariaDB:
MariaDB [test]> SELECT STR_TO_DATE('2019-02-18 12:12:12','%Y-%m-%d %H:%i:%s') as "NOW" FROM DUAL;
+---------------------+
| NOW                 |
+---------------------+
| 2019-02-18 12:12:12 |
+---------------------+
1 row in set (0.000 sec)

SINÔNIMO


O MariaDB ainda não possui uma funcionalidade equivalente a esta. Atualmente, com base no ticket do Jira MDEV-16482 , essa solicitação de recurso para adicionar SYNONYM ainda está aberta e nenhum sinal de progresso até o momento. Esperamos que isso seja incorporado na versão futura. No entanto, uma alternativa possível poderia ser usando VIEW.

Embora SYNONYM no Oracle possa ser usado para criar um alias de uma tabela remota,

por exemplo.
CREATE PUBLIC SYNONYM emp_table FOR [email protected]

No MariaDB, você pode aproveitar o uso do mecanismo de armazenamento CONNECT, que é mais poderoso que o mecanismo de armazenamento FederatedX, pois permite conectar várias fontes de banco de dados. Você pode conferir este pequeno vídeo de apresentação.

Há um bom exemplo na página de manual do MariaDB, que não vou reiterar aqui, pois há certas considerações que você deve atender especialmente ao usar ODBC. Consulte o manual.

Comportamento de String Vazia e NULL


Observe que no MariaDB, a string vazia não é NULL, enquanto o Oracle trata a string vazia como valores nulos.

No Oráculo:
SQL> SELECT CASE WHEN '' IS NULL THEN 'Yes' ELSE 'No' END AS "Null Eval" FROM dual;
Nul
---
Yes

Em MariaDB:
MariaDB [test]> SELECT CASE WHEN '' IS NULL THEN 'Yes' ELSE 'No' END AS "Null Eval" FROM dual;
+-----------+
| Null Eval |
+-----------+
| No        |
+-----------+
1 row in set (0.001 sec)

Sequências


Desde o MariaDB 10.3, foram introduzidas sequências compatíveis com Oracle e uma linguagem de procedimento armazenado compatível com Oracle PL/SQL. No MariaDB, criar uma sequência é bastante semelhante ao SEQUENCE do Oracle.

Exemplo de MariaDB:
CREATE SEQUENCE s START WITH 100 INCREMENT BY 10;
CREATE SEQUENCE s2 START WITH -100 INCREMENT BY -10;

e especificando valores mínimos e máximos viáveis ​​mostra o seguinte
CREATE SEQUENCE s3 START WITH -100 INCREMENT BY 10 MINVALUE=-100 MAXVALUE=1000;

Funções de cadeia de caracteres


O MariaDB, assim como o MySQL, também possui um punhado de funções de string que são muito longas para discuti-las aqui uma a uma. Portanto, pode verificar a documentação aqui e comparar isso com as funções de string do Oracle.

Declarações DML


As instruções Insert/Update/Delete do Oracle são congruentes no MariaDB.

INSERIR TUDO/INSERIR PRIMEIRO da Oracle não é suportado no MariaDB e ninguém ainda abriu esta solicitação de recurso em seu Jira (que eu saiba).

Caso contrário, você precisaria declarar suas consultas MySQL uma a uma.

por exemplo.

No Oráculo:
SQL> INSERT ALL
  INTO CUSTOMERS (customer_id, customer_name, city) VALUES (1000, 'Jase Alagaban', 'Davao City')
  INTO CUSTOMERS (customer_id, customer_name, city) VALUES (2000, 'Maximus Aleksandre Namuag', 'Davao City')
SELECT * FROM dual;
2 rows created.

Mas no MariaDB, você precisa executar a inserção uma de cada vez:
MariaDB [test]> INSERT INTO CUSTOMERS (customer_id, customer_name, city) VALUES (1000, 'Jase Alagaban', 'Davao City');
Query OK, 1 row affected (0.02 sec)
MariaDB [test]> INSERT INTO CUSTOMERS (customer_id, customer_name, city) VALUES (2000, 'Maximus Aleksandre Namuag', 'Davao City');
Query OK, 1 row affected (0.00 sec)

O INSERT ALL/INSERT FIRST não se compara a como ele é usado no Oracle, onde você pode aproveitar as condições adicionando uma palavra-chave WHEN em sua sintaxe; não há opção equivalente a partir deste momento no MariaDB.

Portanto, sua solução alternativa para isso é usar procedimentos.

Símbolo "+" de junções externas


Atualmente, por compatibilidade, ainda não está presente no MariaDB. Portanto, existem muitos tickets do Jira que encontrei no MariaDB, mas este é muito mais preciso em termos de solicitação de recursos. Portanto, sua escolha alternativa para este momento é usar a sintaxe JOIN. Verifique a documentação para obter mais informações sobre isso.

COMEÇAR COM..CONECTAR POR


A Oracle usa START WITH..CONNECT BY para consultas hierárquicas.

A partir do MariaDB 10.2, eles introduziram o CTE (Common Table Expression), que é projetado para suportar gerações de resultados de dados hierárquicos, que usam modelos como listas de adjacência ou modelos de conjuntos aninhados.

Semelhante ao PostgreSQL e MySQL, o MariaDB usa CTEs não recursivos e recursivos.

Por exemplo, um simples não recursivo que é usado para comparar indivíduos com seu grupo:
WITH sales_product_year AS (
SELECT product,
YEAR(ship_date) AS year,
SUM(price) AS total_amt
FROM item_sales
GROUP BY product, year
)

SELECT * 
FROM sales_product_year S1
WHERE
total_amt > 
    (SELECT 0.1 * SUM(total_amt)
     FROM sales_product_year S2
     WHERE S2.year = S1.year)

enquanto um CTE recursivo (exemplo:retornar os destinos de ônibus com Nova York como origem)
WITH RECURSIVE bus_dst as ( 
    SELECT origin as dst FROM bus_routes WHERE origin='New York' 
  UNION
    SELECT bus_routes.dst FROM bus_routes, bus_dst WHERE bus_dst.dst= bus_routes.origin 
) 
SELECT * FROM bus_dst;

PL/SQL no MariaDB?


Anteriormente, em nosso blog sobre "Migrando do banco de dados Oracle para o MariaDB - o que você deve saber", mostramos o quão poderoso é agora o MariaDB adicionando sua conformidade para adotar PL/SQL como parte de seu kernel de banco de dados. Sempre que você usar a compatibilidade PL/SQL no MariaDB, certifique-se de ter definido SQL_MODE ='Oracle' assim como segue:
SET SQL_MODE='ORACLE';

O novo modo de compatibilidade ajuda com a seguinte sintaxe:
  • Sintaxe de loop
  • Declaração de variável
  • Construção de procedimento armazenado não ANSI
  • Sintaxe do cursor
  • Parâmetros de procedimento armazenado
  • Herança de tipo de dados (%TYPE, %ROWTYPE)
  • Exceções de estilo PL/SQL
  • Sinônimos para tipos básicos de SQL (VARCHAR2, NUMBER, …)

Por exemplo, no Oracle, você pode criar um pacote, que é um objeto de esquema que agrupa tipos, variáveis ​​e subprogramas PL/SQL relacionados logicamente. Portanto, no MariaDB, você pode fazer como abaixo:
MariaDB [test]> CREATE OR REPLACE PACKAGE BODY hello AS
    -> 
    ->   vString VARCHAR2(255) := NULL;
    -> 
    ->   -- was declared public in PACKAGE
    ->   PROCEDURE helloFromS9s(pString VARCHAR2) AS
    ->   BEGIN
    ->     SELECT 'Severalnines showing MariaDB Package Procedure in ' || pString || '!' INTO vString FROM dual;
    ->     SELECT vString;
    ->   END;
    -> 
    -> BEGIN
    ->   SELECT 'called only once per connection!';
    -> END hello;
    -> /
Query OK, 0 rows affected (0.021 sec)

MariaDB [test]> 
MariaDB [test]> DECLARE
    ->   vString VARCHAR2(255) := NULL;
    ->   -- CONSTANT seems to be not supported yet by MariaDB
    ->   -- cString CONSTANT VARCHAR2(255) := 'anonymous block';
    ->   cString VARCHAR2(255) := 'anonymous block';
    -> BEGIN
    ->   CALL hello.helloFromS9s(cString);
    -> END;
    -> /
+----------------------------------+
| called only once per connection! |
+----------------------------------+
| called only once per connection! |
+----------------------------------+
1 row in set (0.000 sec)

+--------------------------------------------------------------------+
| vString                                                            |
+--------------------------------------------------------------------+
| Severalnines showing MariaDB Package Procedure in anonymous block! |
+--------------------------------------------------------------------+
1 row in set (0.000 sec)

Query OK, 1 row affected (0.000 sec)

MariaDB [test]> 
MariaDB [test]> DELIMITER ;

No entanto, o PL/SQL da Oracle é compilado antes da execução quando é carregado no servidor. Embora o MariaDB não diga isso em seu manual, eu diria que a abordagem é a mesma do MySQL, onde é compilado e armazenado no cache quando é invocado.

Ferramentas de migração


Como meu colega Bart indicou em nosso blog anterior aqui, as ferramentas sqlines que são SQLines SQL Converter e SQLines Data Tool também podem fornecer ajuda como parte de sua migração.

O MariaDB tem o serviço Red Rover Migration Practice, do qual você pode aproveitar.

No geral, a migração da Oracle para o MariaDB não é tão fácil quanto a migração para o MySQL/Percona, que poderia adicionar mais desafios do que o MariaDB; especialmente não existe compatibilidade PL/SQL no MySQL.

De qualquer forma, se você encontrar ou souber de alguma ferramenta que considere útil e benéfica para migrar do Oracle para o MariaDB, deixe um comentário neste blog!

Teste


Igual ao que afirmei neste blog, permita-me reiterar um pouco disso aqui.

Como parte de seu plano de migração, o teste é uma tarefa vital que desempenha um papel muito importante e afeta sua decisão em relação à migração.

A ferramenta dbdeployer (uma substituição do MySQL Sandbox) é uma ferramenta muito útil que você pode aproveitar. Isso é muito fácil para você tentar testar diferentes abordagens e economizar seu tempo, em vez de configurar toda a pilha se seu objetivo for tentar testar a plataforma RDBMS primeiro.

Para testar suas rotinas armazenadas de SQL (funções ou procedimentos), gatilhos, eventos, sugiro que você use essas ferramentas mytap ou o Unit Testing Framework do Google.

As ferramentas Percona ainda podem ser úteis e podem ser incorporadas ao seu DBA ou tarefas de engenharia mesmo com MariaDB. Confira o Percona Toolkit aqui. Você pode escolher as ferramentas de acordo com suas necessidades, especialmente para tarefas de teste e uso de produção.

No geral, as coisas que você precisa ter em mente como suas diretrizes ao fazer um teste para seu servidor MariaDB são:
  • Após a instalação, você precisa considerar fazer alguns ajustes. Confira nosso webinar sobre como ajustar seu servidor MariaDB.
  • Faça alguns benchmarks e testes de carga de estresse para sua configuração em seu nó atual. Confira mysqlslap e sysbench que podem ajudá-lo com isso. Confira também nosso blog "Como comparar o desempenho do MySQL e do MariaDB usando o SysBench".
  • Verifique se seus DDLs estão definidos corretamente, como tipos de dados, restrições, índices clusterizados e secundários ou partições, se houver.
  • Verifique seu DML especialmente se a sintaxe estiver correta e estiver salvando os dados corretamente conforme o esperado.
  • Confira suas rotinas, eventos e gatilhos armazenados para garantir que eles executem/retornem os resultados esperados.
  • Verifique se suas consultas em execução estão funcionando. Sugiro que você aproveite as ferramentas de código aberto ou experimente nosso produto ClusterControl. Ele oferece monitoramento/observabilidade especialmente do seu cluster MariaDB. Confira este blog anterior no qual mostramos como o ClusterControl pode ajudá-lo a gerenciar o MariaDB TX 3.0. Você pode usar o ClusterControl aqui para monitorar suas consultas e seu plano de consulta para garantir que elas tenham desempenho.