一、MogDB数据库介绍
MogDB是云和恩墨基于openGauss开源数据库进行完善增强的企业发行版。它围绕高性能、高可用、全密态、自动化运维、多数据库兼容等企业需求,应对企业用户需求新一代数据库的应用场景。其核心价值是高安全、高性能、高兼容、易运维和全天候的企业支持。
二、MogDB目前公开的客户
三、MogDB生态工具
1 . 关于MogHA(MogDB Highly Available )
- MogHA 是云和恩墨基于 MogDB 同步异步流复制技术自研的一款保障数据库主备集群高可用的企业级软件系统
- MogHA 能够自主探测故障实现故障转移,虚拟IP自动漂移等特性,使得数据库的故障持续时间从分钟级降到秒级(RPO=0,RTO<30s),确保数据库集群的高可用服务。
- 为什么需要MogHA
- 首先我们需要理解一下什么是高可用,高可用的目的是为了让数据库尽可能提供连续服务,以保证上层业务的稳定运行。数据库虽然支持主备库的部署结构,其目的是防止单点故障。但数据库并不提供故障检测以及自动化切换主备的功能,这也不属于数据库的处理范畴。所以需要有 MogHA 这样的一套高可用系统,来保证数据库服务的连续性。
- 功能特性
- 自主发现数据库实例角色
- 自主故障转移
- 支持网络故障检测
- 支持磁盘故障检测
- 虚拟IP自动漂移
- 感知双主脑裂,自动选主
- 数据库进程和CPU绑定
- HA自身进程高可用
- 支持单机并行部署多套 MogHA
- 支持 x86_64 和 aarch64
- 系统架构
- 支持的模式
- Lite 模式,顾名思义即轻量级模式,该模式仅需在主库和一台同步备机器上启动 MogHA 服务,此时 MogHA 服务可以保证这两台机器上数据库实例的高可用,当主库发生不可修复的问题或者网络隔离时,MogHA 可以自主地进行故障切换和虚拟IP漂移。
- Full模式相较于 lite 模式,需要在所有实例机器上运行 MogHA 服务,且所有的实例有由 MogHA 来自动管理,当出现主库故障时,会优先选择本机房同步备进行切换,如果本机房同步备也是故障的情况,会选择同城备机房的同步备进行切换。为了达到RPO=0,MogHA 不会选择异步备库进行切换,以防止数据丢失。该模式会在主备切换时,会自动修改数据库的复制连接及同步备列表配置。
2 . 关于MTK(Database Migration Toolkit)
- 将Oracle/DB2/MySQL/openGauss数据库的数据结构,全量数据高速导入到MogDB的工具。最新版本同时支持对于Oracle数据库中存储过程,函数,触发器等程序段的MogDB兼容性改写和导入。
- 多数据库类型支持
- 支持 Oracle,DB2,openGauss,SqlServer,MySQL,Informix 等数据库之间的互相迁移 (互为源和目标)。
- 支持将数据库内容导出成可执行的 SQL 脚本 (源数据库内容迁移到文本)。
- 迁移性能调整
- 支持调整数据迁移过程中的批量查询、批量插入大小等细粒度参数,来调整数据迁移的性能。
- 支持数据迁移时的多并发,并行和数据分片。
- 结构和数据分离
- 支持迁移对象结构和数据;也支持仅迁移结构或者仅迁移数据(在结构已经迁移完之后)。
- 支持表级和 Schema 级的迁移范围限定,允许指定schema下全部对象或者某些对象进行迁移 。
- 支持迁移过程中的 Schema 重映射,也就是支持将对象从源Schema迁移到目标端的不同名Schema下 。
- 程序迁移(支持Oracle/MySQL/DB2为源,openGauss为目标)
- 支持Oracle/MySQL/DB2->openGauss的存储过程,函数,触发器,包迁移。
自动根据openGauss的语法规则,对Oracle/MySQL/DB2的程序进行改写,之后再在目标端openGauss数据库中创建。
- 迁移场景
源数据库 | 目标数据库 |
Oracle | openGauss |
Oracle | MySQL |
Oracle | PostgreSQL |
MySQL | openGauss |
MySQL | MySQL |
MySQL | PostgreSQL |
DB2 | openGauss |
DB2 | MySQL |
DB2 | PostgreSQL |
DB2 | DB2 |
SqlServer | openGauss |
SqlServer | MySQL |
SqlServer | PostgreSQL |
openGauss | openGauss |
openGauss | PostgreSQL |
PostgreSQL | openGauss |
Informix | openGauss |
- 支持数据库对象
对象名称 | 是否支持 | 说明 |
Schema | 支持 | 方案 Oracle Users MySQL Database DB2 Schema SqlServer Database Schema |
Sequence | 支持 | 序列 |
ObjectType | 支持 | 类型 |
Domain | 不支持 | 域 |
Wrapper | 支持 | Only DB2 |
Server | 支持 | Only DB2 |
User-mapping | 支持 | Only DB2 |
Queue | 不支持 | 队列 |
Table | 支持 | 不包含OBJECT TYPE TABLE |
NickName | 支持 | Only DB2 |
Rule | 支持 | 规则 |
TableData | 支持 | 表数据 |
Index | 支持 | |
Constraint | 支持 | |
DBLink | 支持 | 数据库连接. 仅支持查询个数,不提供语法转换 |
View | 支持 | |
MView | 支持 | 物化视图 |
Function | 支持 | |
Procedure | 支持 | |
Package | 支持 | |
Trigger | 支持 | |
Synonym | 支持 | |
TableDataCom | 支持 | 表行数对比 |
AlterSequence | 支持 | 迁移序列最后值 |
CollStatistics | 支持 | 收集统计信息 |
- 存储过程转换
- 入参和出参类型转换
- 函数重载
- FROM dual 移除
- 语法转换
转换前 | 转换后 |
Sequence | 支持 |
connect by | cte改写 |
EXECUTE IMMEDIATE | EXECUTE |
EXIT WHEN NOT FOUND部分语法 | |
interval语法 | |
mod 语法 counter mod 1000 = 0 | mod(counter,4) == 0 |
null 相关语法 != | <> null |
PIPE ROW | RETURN NEXT |
select 1,2 into | select 1,2 into STRICT |
select unique | SELECT DISTINCT |
sequence nextval/currval | nextval(xxx) |
SQLCODE | SQLSTATE |
truncate table 部分语法 |
- 函数转换
转换前 | 转换后 |
ADD_YEARS | |
DBMS_OUTPUT.PUT_LINE | RAISE NOTICE |
DBMS_LOB.GETLENGTH | octet_length |
DBMS_LOB.SUBSTR | substr |
DBMS_STANDARD.RAISE EXCEPTION | |
decode | case when |
empty_blob/empty_clob | null |
from_tz | |
listagg | string_agg |
months_between | |
NUMTODSINTERVAL | |
NUMTOYMINTERVAL | |
nvl2 | case when |
raise_application_error | RAISE EXCEPTION |
SYS_CONTEXT | |
SYSTIMESTAMP | CURRENT_TIMESTAMP |
TO_CHAR | ::varchar |
to_char(l_curr_time, ‘TZH’) | EXTRACT( timezone_hour from l_curr_time) |
to_char(l_curr_time, ‘TZM’) | EXTRACT( timezone_minute from l_curr_time) |
TO_CLOB | “” |
TO_TIMESTAMP_TZ | |
trunc | date_trunc |
UTL_ROW.CAST_TO_RAW | encode |
3. MDB (MogDB Data Bridge)
- 异构数据库迁移同步工具,用于 MogDB/openGauss 以及同类基于 openGauss 的数据库与其他异构数据库(Oracle, DB2, MySQL, PostgreSQL等)之间的数据迁移和同步
- 架构
- 支持数据库类型
源数据库 | 目标数据库 | 是否支持 | 预计支持版本 |
Oracle | MogDB | 支持 | |
MogDB | Oracle | 支持 | |
MySQL | MogDB | 未支持 | v1.1 |
MogDB | MySQL | 未支持 | v1.1 |
- 支持数据库对象
对象名称 | 是否支持 | 说明 | 预计支持版本 |
Schema | 支持 | ||
Table | 支持 | ||
Constraint | 支持 | 不支持外键 | |
Index | 支持 | ||
TableData | 支持 | 表数据 | |
User | 未支持 | v1.2 | |
Sequence | 未支持 | v1.2 | |
Synonyms | 未支持 | v1.2 |
- 不支持数据库对象
对象名称 | 是否支持 | 说明 |
Trigger | 不支持 | |
Procedure | 不支持 | |
Function | 不支持 | |
Package | 不支持 | |
View | 不支持 |
4. MVD (MogDB Verify Data)
- 异构数据库对比工具,可用于异构数据迁移或同步完成之后,校验源库与目标库之间的差异。
- 主要功能
- 对象结构对比: 包括源库与目标库的对象差异,表对象的结构(字段类型和名称),约束,索引的差异等。
- 数据特征对比: 包括表中各个字段的统计学特征值对比,主要对比相关性与平均值,最大值,最小值,中位值等。
- 精确差异识别: 对数据特征有差异的表,进行精确差异识别,通过统一的 MD5 摘要算法,找出源库与目标库中数据不一致的行记录。
- 操作系统与平台支持
- Linux x86_64
- Linux arm64 ( 因为 ARM 平台没有 DB2 客户端,所以 ARM 版不支持源库或者目标库为 DB2 )
- MacOS
- 数据库支持
- Oracle >= 11.2
- MogDB/openGauss >= 1.0 ( MacOS 暂不支持 SHA256 加密认证方式 )
- MySQL >= 5.5
- DB2 >= 11.5