sql >> Base de Datos >  >> RDS >> MariaDB

Migración de Oracle Database a MariaDB:una inmersión profunda

En blogs anteriores, discutimos el tema de cómo migrar de Oracle a MySQL/Percona Server y, más recientemente, migrar de Oracle Database a MariaDB:lo que debe saber.

A lo largo de los años y a medida que se lanzaron nuevas versiones de MySQL y MariaDB, ambos proyectos se han desviado por completo a dos plataformas RDBMS muy diferentes.

MariaDB y MySQL ahora se diferencian significativamente, especialmente con la llegada de sus versiones más recientes:MySQL 8.0 y MariaDB 10.3 GA y su 10.4 (actualmente candidato RC).

Con el lanzamiento de MariaDB TX 3.0, MariaDB sorprendió a muchos, ya que ya no es un reemplazo directo de MySQL. Introduce un nuevo nivel de compatibilidad con la base de datos Oracle y ahora se está convirtiendo en una alternativa real a Oracle, así como a otras bases de datos empresariales y propietarias como IBM DB2 o EnterpriseDB.

A partir de la versión 10.3 de MariaDB, se han introducido funciones importantes, como tablas versionadas por el sistema y, lo que es más atractivo para los administradores de bases de datos de Oracle, ¡el soporte para PL/SQL!

Según el sitio web de MariaDB, aproximadamente el 80 % de Oracle PL/SQL heredado se puede migrar sin volver a escribir el código. MariaDB también tiene ColumnStore, que es su nuevo motor de análisis y un motor de almacenamiento en columnas diseñado para el procesamiento paralelo masivo (MPP) distribuido, como el análisis de big data.

El equipo de MariaDB ha trabajado duro para agregar soporte para PL/SQL. Agrega facilidad adicional al migrar a MariaDB desde Oracle. Como punto de referencia para su migración planificada, puede consultar la siguiente referencia de MariaDB. Según nuestro blog anterior, esto no cubrirá el proceso general de migración, ya que es un proceso largo. Pero es de esperar que proporcione suficiente información básica para servir como guía para su proceso de migración.

Estrategia de Planificación y Desarrollo

Para el DBA, migrar de la base de datos Oracle a MariaDB implica muchos factores similares que no deberían ser demasiado difíciles de cambiar y adaptar. MariaDB se puede operar en el servidor de Windows y tiene archivos binarios disponibles para la plataforma de Windows para descargas. Si está utilizando Oracle para OLAP (procesamiento analítico en línea) o inteligencia comercial, MariaDB también tiene ColumnStore, que es el equivalente al almacén de columnas en memoria de la base de datos de Oracle.

Si está acostumbrado a tener una arquitectura Oracle con MAA (arquitectura máxima disponible) con Data Guard ++ Oracle RAC (Real Application Cluster), igual que MySQL/Percona Server, en MariaDB, puede elegir entre una replicación síncrona, semi- sincronización o una replicación asíncrona.

Para una solución de alta disponibilidad, MariaDB tiene Maxscale como su opción principal que puede usar. Puede mezclar MaxScale con Keepalived y HAProxy. ClusterControl, por ejemplo, puede administrar esto de manera eficiente e incluso con la nueva llegada del producto de MariaDB, MariaDB TX. Consulte nuestro blog anterior para obtener más información sobre cómo ClusterControl puede administrar esto de manera eficiente.

Dado que MariaDB es una tecnología de código abierto, se debe considerar esta pregunta:"¿Cómo obtenemos soporte?"

Al elegir una opción de soporte, debe asegurarse de que no se limite a la base de datos, sino que debe cubrir la experiencia en escalabilidad, redundancia, resiliencia, copias de seguridad, alta disponibilidad, seguridad, monitoreo/observabilidad, recuperación y participación en sistemas de misión crítica. . En general, la oferta de soporte que elija debe comprender la configuración de su arquitectura sin exponer la confidencialidad de sus datos.

Además, MariaDB tiene una comunidad muy grande y colaboradora en todo el mundo. Si tiene problemas y desea preguntar a las personas involucradas en esta comunidad, puede probar Freenode a través del cliente IRC (Internet Relay Chat), ir a la página de su comunidad o unirse a su lista de correo.

Valoración o Verificación Preliminar

Es necesario considerar la posibilidad de realizar una copia de seguridad de sus datos, incluidas las configuraciones o los archivos de configuración, los ajustes del kernel y los scripts de automatización:es una tarea obvia, pero antes de migrar, siempre asegure todo primero, especialmente cuando se traslada a una plataforma diferente.

También debe evaluar que sus aplicaciones sigan las convenciones de ingeniería de software actualizadas y asegurarse de que sean independientes de la plataforma. Estas prácticas pueden ser beneficiosas para usted, especialmente cuando se cambia a una plataforma de base de datos diferente.

Dado que MariaDB es una tecnología de código abierto, asegúrese de saber cuáles son los conectores disponibles en MariaDB. Esto es bastante sencillo en este momento, ya que hay varias bibliotecas de clientes disponibles. Consulte aquí para obtener una lista de estas bibliotecas cliente. Aparte de eso, también puede consultar esta lista de la página de Clientes y Utilidades disponibles.

Por último, asegúrese de sus requisitos de hardware.

MariaDB no tiene requisitos específicos:un servidor básico típico puede funcionar, pero eso depende del rendimiento que necesite. Sin embargo, si está comprometido con ColumnStore para sus aplicaciones analíticas o aplicaciones de almacenamiento de datos, consulte su documentación. Tomado de su página, para AWS, han probado esto generalmente usando tipos de instancias m4.4xlarge como un término medio rentable. El R4.8xlarge también ha sido probado y funciona aproximadamente el doble de rápido por aproximadamente el doble de precio.

Lo que debe saber

Al igual que MySQL, en MariaDB, puede crear múltiples bases de datos mientras que Oracle no viene con la misma funcionalidad.

En MariaDB, un esquema es sinónimo de una base de datos. Puede sustituir la palabra clave SCHEMA en lugar de DATABASE en la sintaxis SQL de MariaDB. Por ejemplo, usando CREATE SCHEMA en lugar de CREAR BASE DE DATOS; mientras que Oracle tiene una distinción para esto. Un esquema representa solo una parte de una base de datos:las tablas y otros objetos que pertenecen a un solo usuario. Normalmente, existe una relación de uno a uno entre la instancia y la base de datos.

Por ejemplo, en una configuración de replicación equivalente en Oracle (por ejemplo, Real Application Clusters o RAC), tiene varias instancias que acceden a una única base de datos. Esto le permite iniciar Oracle en varios servidores, todos accediendo a los mismos datos. Sin embargo, en MariaDB, puede permitir el acceso a múltiples bases de datos desde sus múltiples instancias e incluso puede filtrar qué bases de datos/esquema puede replicar en un nodo de MariaDB.

Haciendo referencia a uno de nuestros blogs anteriores (este y este), se aplica el mismo principio cuando se habla de convertir su base de datos con las herramientas disponibles que se encuentran en Internet.

No existe tal herramienta que pueda convertir al 100% la base de datos de Oracle en MariaDB, aunque MariaDB tiene Red Rover Migration Practice; este es un servicio que ofrece MariaDB y no es gratuito.

MariaDB habla sobre la migración en el Banco de Desarrollo de Singapur (DBS), como resultado de su colaboración con MariaDB sobre la compatibilidad con Oracle. Ha podido migrar más del 50 por ciento de sus aplicaciones de misión crítica en solo 12 meses de Oracle Database a MariaDB.

Pero si está buscando algunas herramientas, las herramientas sqlines, que son SQLines SQL Converter y SQLines Data Tool, ofrecen un conjunto de herramientas simple pero operativo.

Las siguientes secciones a continuación describen con más detalle las cosas que debe tener en cuenta cuando se trata de la migración y la verificación del resultado lógico de SQL.

Asignación de tipos de datos

MySQL y MariaDB comparten los mismos tipos de datos disponibles. Aunque existen variaciones en cuanto a cómo se implementa, puede consultar la lista de tipos de datos en MariaDB aquí.

Mientras que MySQL usa el tipo de datos JSON, MariaDB se diferencia porque es solo un alias del tipo de datos LONGTEXT. MariaDB también tiene una función, JSON_VALID, que se puede usar dentro de la expresión de restricción CHECK.

Por lo tanto, haré uso de esta presentación tabular a continuación en función de la información aquí, ya que los tipos de datos de MySQL contra MariaDB no se desvían tanto, pero he agregado cambios a medida que se introdujo el tipo de datos ROW en MariaDB 10.3. 0 como parte de la función de compatibilidad PL/SQL.

Consulte la siguiente tabla:

MySQL
Oracle
1 BARCHIVO Puntero a archivo binario, ⇐ 4G VARCHAR(255)
2 BINARY_FLOAT Número de punto flotante de 32 bits FLOTACIÓN
3 BINARIO_DOBLE Número de punto flotante de 64 bits DOBLE
4 BLOQUEO Objeto binario grande, ⇐ 4G BLOB LARGO
5 CARÁCTER(n), CARÁCTER(n) Cadena de longitud fija, 1 ⇐ n ⇐ 255 CARÁCTER(n), CARÁCTER(n)
6 CARÁCTER(n), CARÁCTER(n) Cadena de longitud fija, 256 ⇐ n ⇐ 2000 VARCHAR(n)
7 CLOB Objeto grande de carácter, ⇐ 4G TEXTO LARGO
8 FECHA Fecha y hora FECHAHORA
9 DECIMAL(p,s), DEC(p,s) Número de punto fijo DECIMAL(p,s), DEC(p,s)
10 DOBLE PRECISIÓN Número de coma flotante DOBLE PRECISIÓN
11 FLOTACIÓN(p) Número de coma flotante DOBLE
12 ENTERO, INT entero de 38 dígitos INT DECIMALES(38)
13 INTERVALO AÑO(p) A MES Intervalo de fechas VARCHAR(30)
14 INTERVALO DE DÍA(p) A SEGUNDO(s) Día e intervalo de tiempo VARCHAR(30)
15 LARGO Datos de personajes, ⇐ 2G TEXTO LARGO
16 LARGO CRUDO Datos binarios, ⇐ 2G BLOB LARGO
17 NCHAR(n) Cadena UTF-8 de longitud fija, 1 ⇐ n ⇐ 255 NCHAR(n)
18 NCHAR(n) Cadena UTF-8 de longitud fija, 256 ⇐ n ⇐ 2000 NVARCHAR(n)
19 NCHAR VARIABLE(n) Cadena UTF-8 de longitud variable, 1 ⇐ n ⇐ 4000 NCHAR VARIABLE(n)
20 NCLOB Cadena Unicode de longitud variable, ⇐ 4G NVARCHAR(máximo)
21 NÚMERO(p,0), NÚMERO(p) Entero de 8 bits, 1 <=p <3 TINYINT (0 a 255)
entero de 16 bits, 3 <=p <5 PEQUEÑO
Entero de 32 bits, 5 <=p <9 INT
entero de 64 bits, 9 <=p <19 BIGINTO
Número de punto fijo, 19 <=p <=38 DECIMAL(p)
22 NÚMERO(p,s) Número de punto fijo, s> 0 DECIMAL(p,s)
23 NÚMERO, NÚMERO(*) Número de coma flotante DOBLE
24 NUMÉRICO(p,s) Número de punto fijo NUMÉRICO(p,s)
25 NVARCHAR2(n) Cadena UTF-8 de longitud variable, 1 ⇐ n ⇐ 4000 NVARCHAR(n)
26 RAW(n) Cadena binaria de longitud variable, 1 ⇐ n ⇐ 255 BINARIO(n)
27 RAW(n) Cadena binaria de longitud variable, 256 ⇐ n ⇐ 2000 VARBINARIO(n)
28 REAL Número de coma flotante DOBLE
29 ROWID Dirección de fila física CHAR(10)
Por lo tanto, para la compatibilidad con PL/SQL, puede usar ROW ( [{, }. .. ])
30 PEQUEÑO entero de 38 dígitos DECIMALES(38)
31 TIMESTAMP(p) Fecha y hora con fracción FECHAHORA(p)
32 TIMESTAMP(p) CON ZONA HORARIA Fecha y hora con fracción y zona horaria FECHAHORA(p)
33 UROWID(n) Direcciones de fila lógica, 1 ⇐ n ⇐ 4000 VARCHAR(n)
34 VARCHAR(n) Cadena de longitud variable, 1 ⇐ n ⇐ 4000 VARCHAR(n)
35 VARCHAR2(n) Cadena de longitud variable, 1 ⇐ n ⇐ 4000 VARCHAR(n)
36 TIPOXML Datos XML TEXTO LARGO

Atributos y opciones de tipo de datos:

Oráculo MySQL
Semántica de tamaño de columna BYTE y CHAR El tamaño siempre está en caracteres

Transacciones

MariaDB usa XtraDB desde versiones anteriores hasta la 10.1 y cambió a InnoDB desde la versión 10.2 en adelante; aunque varios motores de almacenamiento pueden ser una opción alternativa para manejar transacciones como el motor de almacenamiento MyRocks.

De manera predeterminada, MariaDB tiene la variable de confirmación automática establecida en ON, lo que significa que debe manejar explícitamente las declaraciones transaccionales para aprovechar ROLLBACK para ignorar los cambios o aprovechar el uso de SAVEPOINT.

Es básicamente el mismo concepto que usa Oracle en términos de confirmación, retrocesos y puntos de guardado.

Para transacciones explícitas, esto significa que debe usar START TRANSACTION/BEGIN; ; COMPROMETER; sintaxis.

De lo contrario, si tiene que deshabilitar la confirmación automática, debe COMMITIR explícitamente todo el tiempo para sus declaraciones que requieren cambios en sus datos.

Mesa doble

MariaDB tiene la compatibilidad dual con Oracle, que está destinada a la compatibilidad de las bases de datos que utilizan una tabla ficticia, a saber, DUAL. Funciona igual que MySQL donde la cláusula FROM no es obligatoria, por lo que la tabla DUAL no es necesaria. Sin embargo, la tabla DUAL no funciona exactamente de la misma manera que lo hace para Oracle, pero para SELECT simples en MariaDB, está bien.

Esto se adapta al uso de DUAL de Oracle, por lo que cualquier declaración existente en su aplicación que use DUAL podría no requerir cambios al migrar a MariaDB.

La cláusula Oracle FROM es obligatoria para cada declaración SELECT, por lo que la base de datos Oracle usa la tabla DUAL para la declaración SELECT donde no se requiere un nombre de tabla.

Vea el siguiente ejemplo a continuación:

En 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

Pero en 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)

Nota:el DESC DUAL la sintaxis no funciona en MariaDB y los resultados también difieren ya que CURRENT_TIMESTAMP (usa el tipo de datos TIMESTAMP) en MySQL no incluye la zona horaria.

SISTEMA

La función SYSDATE de Oracle es casi la misma en MariaDB.

MariaDB devuelve fecha y hora y es una función que requiere () (cerrar y abrir paréntesis sin necesidad de argumentos. Para demostrar esto a continuación, aquí está Oracle y MariaDB sobre el uso de SYSDATE.

En Oracle, el uso de SYSDATE simple solo devuelve la fecha del día sin la hora. Pero para obtener la hora y la fecha, use TO_CHAR para convertir la hora de la fecha al formato deseado; mientras que en MariaDB, es posible que no lo necesite para obtener la fecha y la hora, ya que devuelve ambas.

Vea el ejemplo a continuación.

En 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

Pero en MariaDB:

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

Si desea formatear la fecha, MariaDB tiene una función DATE_FORMAT().

Puede consultar la documentación de fecha y hora de MariaDB para obtener más información.

HASTA_FECHA

El equivalente TO_DATE de Oracle en MariaDB es la función STR_TO_DATE().

Es casi idéntico al de Oracle:devuelve el tipo de datos DATE, mientras que en MariaDB devuelve el tipo de datos 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

MariaDB aún no tiene una funcionalidad equivalente a esta. Actualmente, según su ticket de Jira MDEV-16482, esta solicitud de función para agregar SYNONYM aún está abierta y aún no hay señales de progreso a partir de este momento. Esperamos que esto se incorpore en la versión futura. Sin embargo, una posible alternativa podría ser usar VIEW.

Aunque SYNONYM en Oracle se puede usar para crear un alias de una tabla remota,

por ejemplo

CREATE PUBLIC SYNONYM emp_table FOR [email protected]

En MariaDB, puede aprovechar el uso del motor de almacenamiento CONNECT, que es más potente que el motor de almacenamiento FederatedX, ya que le permite conectar varias fuentes de bases de datos. Puede ver esta breve presentación en video.

Hay un buen ejemplo en la página del manual de MariaDB, que no reiteraré aquí ya que hay ciertas consideraciones que debe cumplir, especialmente cuando usa ODBC. Consulte el manual.

Comportamiento de cadena vacía y NULL

Tenga en cuenta que en MariaDB, la cadena vacía no es NULL, mientras que Oracle trata la cadena vacía como valores nulos.

En Oráculo:

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

En 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)

Secuencias

Desde MariaDB 10.3, se han introducido secuencias compatibles con Oracle y un lenguaje de procedimiento almacenado compatible con Oracle PL/SQL. En MariaDB, crear una secuencia es bastante similar a SEQUENCE de Oracle.

Ejemplo de MariaDB:

CREATE SEQUENCE s START WITH 100 INCREMENT BY 10;
CREATE SEQUENCE s2 START WITH -100 INCREMENT BY -10;

y la especificación de valores mínimos y máximos viables se muestra a continuación

CREATE SEQUENCE s3 START WITH -100 INCREMENT BY 10 MINVALUE=-100 MAXVALUE=1000;

Funciones de cadenas de caracteres

MariaDB, al igual que MySQL, también tiene un puñado de funciones de cadena que es demasiado largo para discutirlas aquí una por una. Por lo tanto, puede consultar la documentación desde aquí y comparar esto con las funciones de cadena de Oracle.

Declaraciones DML

Las declaraciones Insert/Update/Delete de Oracle son congruentes en MariaDB.

INSERTAR TODO/INSERTAR PRIMERO de Oracle no es compatible con MariaDB y nadie ha abierto aún esta solicitud de función en su Jira (que yo sepa).

De lo contrario, deberá indicar sus consultas de MySQL una por una.

por ejemplo

En 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.

Pero en MariaDB, debe ejecutar la inserción de una en una:

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)

INSERTAR TODO/INSERTAR PRIMERO no se compara con cómo se usa en Oracle, donde puede aprovechar las condiciones agregando una palabra clave CUANDO en su sintaxis; no hay una opción equivalente a partir de este momento en MariaDB.

Por lo tanto, su solución alternativa en esto es usar procedimientos.

Símbolo de uniones externas "+"

Actualmente, por compatibilidad, aún no está presente en MariaDB. Por lo tanto, hay muchos tickets de Jira que he encontrado en MariaDB, pero este es mucho más preciso en términos de solicitud de funciones. Por lo tanto, su opción alternativa para este momento es usar la sintaxis JOIN. Consulte la documentación para obtener más información al respecto.

COMENZAR CON...CONECTAR POR

Oracle utiliza COMENZAR CON..CONECTAR POR para consultas jerárquicas.

A partir de MariaDB 10.2, introdujeron CTE (expresión de tabla común), que está diseñada para admitir generaciones de resultados de datos jerárquicos, que usan modelos como listas de adyacencia o modelos de conjuntos anidados.

Al igual que PostgreSQL y MySQL, MariaDB utiliza CTE recursivos y no recursivos.

Por ejemplo, un simple no recursivo que se usa para comparar individuos contra su 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)

mientras que un CTE recursivo (ejemplo:devolver los destinos de autobús con Nueva York como origen)

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 en MariaDB?

Anteriormente, en nuestro blog sobre "Migración de la base de datos Oracle a MariaDB:lo que debe saber", mostramos cuán poderoso es ahora en MariaDB al agregar su cumplimiento para adoptar PL/SQL como parte de su kernel de base de datos. Siempre que utilice la compatibilidad con PL/SQL en MariaDB, asegúrese de haber configurado SQL_MODE ='Oracle' como sigue:

SET SQL_MODE='ORACLE';

El nuevo modo de compatibilidad ayuda con la siguiente sintaxis:

  • Sintaxis de bucle
  • Declaración de variable
  • Construcción de procedimiento almacenado no ANSI
  • Sintaxis del cursor
  • Parámetros de procedimientos almacenados
  • Herencia de tipos de datos (%TYPE, %ROWTYPE)
  • Excepciones de estilo PL/SQL
  • Sinónimos para tipos básicos de SQL (VARCHAR2, NÚMERO, …)

Por ejemplo, en Oracle, puede crear un paquete, que es un objeto de esquema que agrupa tipos, variables y subprogramas PL/SQL relacionados lógicamente. Por lo tanto, en MariaDB, puede hacerlo como se muestra a continuación:

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 ;

Sin embargo, el PL/SQL de Oracle se compila antes de la ejecución cuando se carga en el servidor. Aunque MariaDB no dice esto en su manual, asumiría que el enfoque es el mismo que el de MySQL, donde se compila y almacena en el caché cuando se invoca.

Herramientas de migración

Como indicó mi colega Bart en nuestro blog anterior aquí, las herramientas de sqlines, que son SQLines SQL Converter y SQLines Data Tool, también pueden brindarle ayuda como parte de su migración.

MariaDB tiene su servicio Red Rover Migration Practice que puede aprovechar.

En general, la migración de Oracle a MariaDB no es tan fácil como migrar a MySQL/Percona, lo que podría agregar más desafíos que MariaDB; especialmente no existe compatibilidad PL/SQL en MySQL.

De todos modos, si encuentra o conoce alguna herramienta que le resulte útil y beneficiosa para migrar de Oracle a MariaDB, ¡deje un comentario en este blog!

Pruebas

Igual que lo que he dicho en este blog, permítanme reiterar algo aquí.

Como parte de su plan de migración, la prueba es una tarea vital que juega un papel muy importante y afecta su decisión con respecto a la migración.

La herramienta dbdeployer (un reemplazo de MySQL Sandbox) es una herramienta muy útil que puede aprovechar. Es bastante fácil para usted probar y probar diferentes enfoques y le ahorra tiempo, en lugar de configurar toda la pila si su propósito es probar primero la plataforma RDBMS.

Para probar sus rutinas almacenadas en SQL (funciones o procedimientos), disparadores, eventos, le sugiero que use estas herramientas mytap o el marco de pruebas unitarias de Google.

Las herramientas de Percona aún pueden ser útiles y pueden incorporarse a su DBA o tareas de ingeniería incluso con MariaDB. Consulte el kit de herramientas de Percona aquí. Puede elegir las herramientas según sus necesidades, especialmente para tareas de prueba y uso de producción.

En general, las cosas que debe tener en cuenta como pautas al realizar una prueba para su servidor MariaDB son:

  • Después de la instalación, debe considerar realizar algunos ajustes. Consulte nuestro seminario web sobre cómo ajustar su servidor MariaDB.
  • Haga algunos puntos de referencia y pruebas de carga de estrés para su configuración en su nodo actual. Consulte mysqlslap y sysbench que pueden ayudarlo con esto. Consulte también nuestro blog "Cómo comparar el rendimiento de MySQL y MariaDB usando SysBench".
  • Verifique si sus DDL están definidos correctamente, como tipos de datos, restricciones, índices agrupados y secundarios, o particiones, si las tiene.
  • Verifique su DML, especialmente si la sintaxis es correcta y está guardando los datos correctamente como se esperaba.
  • Revise sus rutinas, eventos y disparadores almacenados para asegurarse de que se ejecutan o devuelven los resultados esperados.
  • Verifique que sus consultas en ejecución sean eficaces. Le sugiero que aproveche las herramientas de código abierto o pruebe nuestro producto ClusterControl. Ofrece monitoreo/observabilidad especialmente de su clúster MariaDB. Consulte este blog anterior en el que mostramos cómo ClusterControl puede ayudarlo a administrar MariaDB TX 3.0. Puede usar ClusterControl aquí para monitorear sus consultas y su plan de consulta para asegurarse de que funcionen.