暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

[译文] 从 Oracle 迁移到 MariaDB 的典型旅程

原创 Sebastien Giraud 2021-08-12
1841

MariaDB 采用独特的方法为现代业务需求提供数据库解决方案。使用MariaDB Enterprise,组织可以依赖一个完整的数据库来满足他们的所有需求,无论是在商品硬件上还是在他们选择的云上。例如,我们的可插拔专用存储引擎支持以前需要各种专用数据库的工作。MariaDB 可在几分钟内针对任何规模的事务性、分析性或混合用例进行部署,在不牺牲关键企业功能(例如真正的 ACID 合规性和完整 SQL)的情况下提供无与伦比的操作敏捷性。

同样,MariaDB 提供了兼容性特性,允许通过几个步骤轻松地从 Oracle、SQL Server、Postgres 等迁移到 MariaDB,而无需重写应用程序。

本博客将引导您完成从 Oracle 轻松迁移到 MariaDB 所需的主要步骤。我将演示MariaDB MaxScale提供的功能、我们的智能数据库代理以及MariaDB Enterprise Server的兼容模式如何极大地简化迁移。

兼容模式可用于本地部署,也可在MariaDB SkySQL 中用于云部署。

先决条件

此处详述的迁移过程依赖于 MariaDB Enterprise Server 和 MariaDB MaxScale。MaxScale 配置将在 MaxScale GUI 的帮助下创建。

由于安装方式各不相同,因此我没有在此处提供有关安装 MariaDB Enterprise Server 和 MariaDB MaxScale 的完整说明。有关完整的安装说明,请参阅 MariaDB Enterprise 文档:

在深入研究数据和结构之前,MariaDB 建议在 MariaDB 客户门户内的“迁移门户”中运行迁移评估。迁移门户提供了多种资源来帮助您迁移到 MariaDB。在“新迁移”部分,您可以选择要从中迁移的数据库并获得定制的迁移评估,以帮助您评估和规划迁移项目。

验证当前的 SQL MODE

因为变量会变化并且可以由外部软件调整,所以值得仔细检查SQL_MODE是否正在运行。

从 Linux 终端验证当前 SQL 模式:

sudo mariadb -e "show global variables like 'sql_mode';"
复制

在我们的示例中,它显示了SQL_MODE变量的默认配置:

 +---------------+-------------------------------------------------------------------------------------------+
 | Variable_name | Value                                                                                     |
 +---------------+-------------------------------------------------------------------------------------------+
 | sql_mode      | STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
 +---------------+-------------------------------------------------------------------------------------------+
复制

尝试使用 Oracle 语法创建表

让我们尝试在使用默认值的同时使用 Oracle 语法创建一个简单的表SQL_MODE

MariaDB [oracle_migration]> CREATE TABLE "customers" (
"CUST_ID" NUMBER(8,0),
"FIRST_NAME" VARCHAR2(50 BYTE),
"LAST_NAME" VARCHAR2(50 BYTE),
"ADDRESS1" VARCHAR2(128 BYTE)
);
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 '"customers" ("CUST_ID" NUMBER(8,0), "FIRST_NAME" VARCHAR2(50 BYTE), "LAST_NAM...' at line 1
复制

ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MariaDB 服务器相对应的手册
在第 1 行的“客户”(“CUST_ID”NUMBER(8,0)、“FIRST_NAME”VARCHAR2(50 BYTE)、“LAST_NAM…”附近使用的正确语法的版本)

默认情况下,MariaDB 客户端无法识别此语法。许多项目会阻止这种创建,例如双引号。

启用 Oracle 兼容模式

SQL_MODE将会话更改为 Oracle 兼容模式:

SET SESSION sql_mode='ORACLE';
Query OK, 0 rows affected (0.035 sec)
复制

尝试再次创建同一张表:

MariaDB [oracle_migration]> CREATE TABLE "customers" (
"CUST_ID" NUMBER(8,0), 
"FIRST_NAME" VARCHAR2(50 BYTE), 
"LAST_NAME" VARCHAR2(50 BYTE), 
"ADDRESS1" VARCHAR2(128 BYTE)
);
 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 'BYTE), "LAST_NAME" VARCHAR2(50 BYTE), "ADDRESS1" VARCHAR2(128 BYTE))' at line 1
复制

它再次返回一个错误,但它是一个不同的错误。BYTE使用 Oracle 兼容模式的 MariaDB 客户端无法识别该值。

那么如何去除BYTE关键字呢?

我们可以依靠 MariaDB MaxScale 功能来删除和更新实时查询的语法。

MaxScale 2.5 包含一个智能 GUI,可以轻松监控和配置实时流量的 MaxScale。下一步将是关于如何使用 MariaDB MaxScale GUI。

访问 MaxScale GUI

在 MaxScale 上,我们可以定义一个规则来重写实时查询,然后再将其发送到 MariaDB 服务器。当需要调整一些实时查询而不对应用程序产生任何影响时,此功能特别有用。

这些功能还可用于修复应用程序中的拼写错误,而无需进行任何部署或对生产产生任何影响。

最大比例图形用户界面

配置完成后,默认情况下 MaxScale GUI 在端口 8989 上可用。让我们使用以下地址 https://127.0.0.1:8989 访问此接口。

连接后,访问 MaxScale GUI 监控页面并访问考虑的服务。

MaxScale GUI 监控页面

MaxScale 配置由几个模块组成。所有这些模块都链接在我们所谓的“服务”中。我们可以在前面的屏幕截图中看到,一个服务正在链接多个服务器、一个监控系统、一个侦听端口、一个路由规则,以及潜在的许多过滤器。

在这种情况下,只定义了一项服务——“读写服务”。让我们通过单击其名称来访问此服务定义:

MaxScale Red-Write-Service

定义一个新的正则表达式过滤器

在 MariaDB MaxScale 上使用正则表达式过滤器允许您重写实时查询。

首先,返回 MaxScale 概览屏幕并单击 **+ Create New**并定义新过滤器的配置:

MaxScale 正则表达式过滤器

选择创建一个新过滤器。

提供与过滤器目标匹配的名称,然后选择“regexfilter”。

在参数中插入匹配参数中要替换的原始值:BYTE\)

要_匹配_括号等特殊字符,请记住通过添加反斜杠将其转义,如图所示。

用所需的值完成替换框。在这种情况下,它是括号而不转义特殊字符。

完成后验证此新规则。

将新规则关联到所需的服务

现在已经创建了新的过滤器,返回到服务定义页面并单击_过滤器部分上的+ 添加过滤器_按钮。

向服务添加过滤规则

在_添加过滤器_框中,启用新创建的过滤器,以便将其与当前服务和侦听器关联。

完成后,我们可以CREATE TABLE 再次测试我们的命令。

检查新创建的规则

使用mariadb命令行并访问 MaxScale 服务。

$ mariadb -hmaxscale1.example.com -P4006 -utest -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 10.5.9-6-MariaDB-enterprise MariaDB Enterprise Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
复制

通过 MaxScale 接口连接好后,我们现在可以测试新创建的重写规则。

让我们使用之前创建的数据库:

MariaDB [(none)]> use oracle_migration
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
复制

在考虑的会话上启用 Oracle 模式:

MariaDB [(none)]> SET SESSION sql_mode='ORACLE';
Query OK, 0 rows affected (0.004 sec)
复制

再次尝试使用完全相同的语法创建此表:

MariaDB [oracle_migration]> CREATE TABLE "customers" (
"CUST_ID" NUMBER(8,0), 
"FIRST_NAME" VARCHAR2(50 BYTE), 
"LAST_NAME" VARCHAR2(50 BYTE), 
"ADDRESS1" VARCHAR2(128 BYTE)
);

Query OK, 0 rows affected (0.044 sec)
复制

完成了,根本没有修改应用程序,创建的表没有错误。

当然,可以定义许多其他规则。

文章来源: https://mariadb.com/resources/blog/a-typical-journey-migrating-to-mariadb-from-oracle/

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

严少安
暂无图片 暂无图片
关注
暂无图片
获得了4366次点赞
暂无图片
内容获得1429次评论
暂无图片
获得了872次收藏
目录
  • 先决条件
  • 验证当前的 SQL MODE
  • 尝试使用 Oracle 语法创建表
  • 启用 Oracle 兼容模式
  • 访问 MaxScale GUI
  • 定义一个新的正则表达式过滤器
  • 将新规则关联到所需的服务
  • 检查新创建的规则